Pull to refresh

Comments 20

На этот вопрос каждый ответит по своему. Кому-то(как мне) было очень интересно написать такой модуль и получить неожиданные результаты. Кому-то — прочитать об этом и попробывать самим. Что касается вывода — спасибо за замечание, исправлюсь.
Тоесть вы только что нашли критичную ошибку ядра линукс(стандартные ps/psmisc не видят процесс, запущенный стандартным образом) и вот так свободно об этом на всеобщее обозрение выложили статью?
Замечательный метод для руткитов.
А побочные эффекты есть? Выделение памяти/ресурсов? renicing/schedulering? top что показывает при 100% загрузки ядра этим процессом например?
Чтобы это провернуть, надо сначала этот кастомный модуль ядра загрузить. А для этого уже нужны особые привилегии. Критической ошибкой не является.
Не особые, а рутовые. Но вопрос не в доступе к руту, есть куча других експлоитов. Вопрос в том, что процесс невидим после этого хака.
Если вы можете загрузить любой модуль ядра — считайте, что все в ваших руках. У вас есть тысяча и одна способов обмануть стандартные приложения, системы защиты, пользователей и получить полный контроль над системой.
Выглядит, конечно, странно. Наверно так, поскольку нет записи в /proc/.
В подсчете загрузки участвует, но записи нету.
image
А вот если в нем запустить чтото еще, то это уже видно.

Если вы можете загрузить модуль ядра, то вы уже можете всё. Вам даже не обязательно скрывать какой либо процесс, можно все желаемые действия выполнять из самого модуля.

Интересно, а это будет работать от имени простого пользователя? (Это же как нелегальная эскалация на кольцо 0 получается. Если PID/PPID можно изменить на 0. (Хотя в обоих случаях могу ошибаться.))

Никак, обычный пользователь не сможет загрузить такой модуль ядра.

Имеется ввиду после загрузки модуля рутом.

Зависит от прав, выставленных на устройство /dev/test. Если читать можно(модуль работает на чтение) то pid изменится. В планах реализовать смену pid через запись, найти бы нужную функцию для преобразования в число. Процесс в пользовательском пространстве, так и останется.
хм. atoi()? Вообще, я бы сделал через procfs или sysfs. Там есть нужные примитивы для работы со строками, которые приходят из юзерспейса.
Ну если рут грузит в ядро код, который позволяет делать с ядром что угодно и кому угодно…
Никакой дополнительной защиты тут нет. Разработчики ядра считают что вы знаете что делаете.

Знаете, я несколько сомневаюсь, что подобные эксперименты стоит выставлять на показ общественности, даже под тэгом 'ненормальное программирование'. Я уже молчу о большом количестве неточностей в матчасти, и сомнительном выборе в сторону модуля в качестве реализации.

А kill убивает невидимый процесс или нет?
Он его просто не находит
-bash: kill: (12345) - No such process
Вот это дыра :) Я понимаю, что если получен рут доступ — это считай компроментация всей системы. Но теперь можно его получить, затереть все следы и скрыть своё присутствие практически навсегда + сделать невозможным своё уничтожение.
Все руткиты делают именно это. В том или ином виде. Правильно установленный руткит изнутри системы задетектить невозможно. Только исследуя систему снаружи.
Любопытное наблюдение, на ядре 4.13 (ubuntu) это сработало, а на ядре 4.9 (arch) нет. PID просто не поменялся.
Sign up to leave a comment.

Articles