Как вы можете запустить процесс и сделать его невидимым для top
команды? Процесс запускается обычным пользователем (не root) и не должен быть виден другим обычным пользователям.
Как вы можете запустить процесс и сделать его невидимым для top
команды? Процесс запускается обычным пользователем (не root) и не должен быть виден другим обычным пользователям.
Ответы:
Ядро Linux начиная с версии 3.3 содержит поддержку скрытия процессов для других пользователей.
Это делается hidepid=
и gid=
опция монтирования для / прока , как описано в соответствующей фиксации и Documentation / файловые системы / proc.txt .
Debian Wheezy также включает эту функцию.
Команда top
считывает данные из proc, которые предоставляются непосредственно из ядра. Чтобы скрыть процессы, вам нужно использовать код внутри ядра для маскировки.
Помимо использования инфраструктуры безопасности, такой как SELinux и grsecurity (упомянутой в других ответах), код в стиле руткита - это единственный оставшийся вариант. Я говорю «стиль», потому что «руткит» сам по себе неплох, это то, как он используется. Существуют совершенно законные причины скрытия процессов от других пользователей, поэтому эта возможность существует в инфраструктурах безопасности.
Основной путь, которым вы должны следовать, чтобы заставить это работать, состоит в том, чтобы подключить (или перехватить, в зависимости от того, как вы на это смотрите) функции (я) в ядре Linux, которые раздают /proc/pid/
данные. Я демонстрирую один метод подключения к функциям ядра Linux в модуле безопасности, который я написал:
https://github.com/cormander/tpe-lkm
Код «высокого уровня» для этого находится в hijack_syscalls()
методе in security.c
, а магия дьявола в деталях - в hijacks.c
файле.
Скорее всего, вы найдете функции, которые вы хотите подключить, в fs/proc/
каталоге исходного кода ядра Linux. Имейте в виду, что linux не обеспечивает стабильный ABI, поэтому ваш код должен будет несколько измениться, чтобы он работал в разных версиях ядра linux. Также имейте в виду, что вам нужен полный root-доступ к машине, чтобы иметь возможность вставить этот код.
ОБНОВИТЬ:
Если вы оберните pid_getattr
символ ядра некоторым дополнительным кодом, это будет действительно легко сделать. Недавно я добавил что-то, что скрывает процессы в вышеупомянутом модуле ядра:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
Вы можете сделать нечто подобное, сделав процессы определенного пользователя или группы недоступными для просмотра никем, кроме root и этого пользователя. Делать это по имени процесса немного сложнее, но возможно. Посмотрите на exe_from_mm()
функцию. Обратите внимание, что это может повлиять на производительность внутри pid_getattr
.
Кажется, два основных варианта.
Selinux работает, помещая разных людей в разные домены безопасности и в некотором смысле помещая их в песочницу, чтобы они не могли видеть вещи друг друга. Это кроется в этом вопросе . Поскольку selinux быстро становится де-факто платформой безопасности в мире Linux, это, вероятно, именно то направление, которое вам следует искать.
Другой - это безопасность, как упомянуто Мариоошем и как задано в этом вопросе . В некоторых дистрибутивах есть альтернативные пакеты ядра с установленными патчами grsecurity. Если у вас есть это, вы можете использовать их.
Если по какой-либо причине вы хотите сделать это без добавления каркаса безопасности, такого как selinux или grsecurity, объясните, почему вы не пишете руткит.
Это не так просто на стандартной коробке Linux. Посмотрите на grsecurity , но это требует исправления ядра и т. Д.
Вы можете переопределить свой argv [0] другим именем ... но, строго говоря, вы ищете какой-нибудь руткит. это может вам помочь: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
Вы можете написать эквивалентную команду, которая работает точно так же top
, но не отображает процессы, соответствующие определенному имени. В качестве альтернативы вы можете получить исходный код top
команды и изменить его соответствующим образом. Затем вы можете заменить top
команду в /usr/sbin
(или где бы она ни была) вашей версией.
top
команды.
this_is_not_the_process_you_are_looking_for
?