Как сделать процесс невидимым для других пользователей?


19

Как вы можете запустить процесс и сделать его невидимым для topкоманды? Процесс запускается обычным пользователем (не root) и не должен быть виден другим обычным пользователям.


1
Такой вид поражает цель вершины и слишком легко злоупотреблять. Почему бы просто не переименовать процесс? this_is_not_the_process_you_are_looking_for?

я вижу, как насчет сокрытия пользователя?

5
Пожалуйста, скажите нам, что вы не пытаетесь написать руткит. Можете ли вы объяснить свой сценарий так, чтобы, возможно, мы могли предложить лучшую архитектуру безопасности вместо той, которая обычно считается "злым" поведением?
— Калеб

2
Вы можете использовать grsecurity или SELinux . Оба требуют корневого вмешательства для начальной настройки.
— Жиль "ТАК - перестань быть злым"

Ответы:



11

Команда 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.


4

Кажется, два основных варианта.

  • Selinux работает, помещая разных людей в разные домены безопасности и в некотором смысле помещая их в песочницу, чтобы они не могли видеть вещи друг друга. Это кроется в этом вопросе . Поскольку selinux быстро становится де-факто платформой безопасности в мире Linux, это, вероятно, именно то направление, которое вам следует искать.

  • Другой - это безопасность, как упомянуто Мариоошем и как задано в этом вопросе . В некоторых дистрибутивах есть альтернативные пакеты ядра с установленными патчами grsecurity. Если у вас есть это, вы можете использовать их.

Если по какой-либо причине вы хотите сделать это без добавления каркаса безопасности, такого как selinux или grsecurity, объясните, почему вы не пишете руткит.


1

Это не так просто на стандартной коробке Linux. Посмотрите на grsecurity , но это требует исправления ядра и т. Д.


2
Я думаю, что это стандартно с ядром selinux.
— user606723


0

Вы можете написать эквивалентную команду, которая работает точно так же top, но не отображает процессы, соответствующие определенному имени. В качестве альтернативы вы можете получить исходный код topкоманды и изменить его соответствующим образом. Затем вы можете заменить topкоманду в /usr/sbin(или где бы она ни была) вашей версией.


2
Замена top не мешает пользователю делать то, что делает top.
— Тим Пост

2
Нет, но был задан вопрос, как сделать процессы невидимыми для topкоманды.
— LawrenceC
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.