Як зробити процес невидимим для інших користувачів?


19

Як ви могли запустити процес і зробити його невидимим для topкоманди? Процес запускається звичайним користувачем (не root) і не повинен бути видимим для інших звичайних користувачів.


1
Цей вид перемагає мету верху, і було б надто просто зловживати. Чому б просто не перейменувати процес? this_is_not_the_process_you_are_looking_for?

я бачу, що з приховуванням користувача?

5
Скажіть, будь ласка, ви не намагаєтесь написати root-kit. Чи можете ви пояснити свій сценарій так, що, можливо, ми можемо запропонувати кращу архітектуру безпеки замість тієї, яка взагалі вважається "злою" поведінкою?
Калеб

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

Відповіді:



11

topКоманда зчитує дані з пуття, яка надається безпосередньо з ядра. Щоб приховати процеси, вам доведеться використовувати код всередині ядра, щоб зробити маскування.

Окрім використання системи безпеки на зразок SELinux та grsecurity (згадані в інших відповідях), код у стилі rootkit - ваш єдиний варіант, що залишився. Я кажу "стиль", тому що "руткіт" сам по собі непоганий, це як він використовується. Приховування процесів від інших користувачів є цілком законними причинами, саме тому ця можливість існує в рамках безпеки.

Основний маршрут, який вам доведеться дотримуватися, щоб змусити це працювати, - це підключення (або викрадення, залежно від того, як ви на це дивитесь) функції (я) в ядрі Linux, які передають /proc/pid/дані. Я демонструю один метод підключення до функцій ядра Linux в модулі захисту, який я написав:

https://github.com/cormander/tpe-lkm

Код "високого рівня" в цьому hijack_syscalls()методі security.c, а магія "чорт у деталях" за ним - у hijacks.cфайлі.

Ви, ймовірно, знайдете функції (функції), які вам захочеться підключити до fs/proc/каталогу вихідного коду ядра Linux. Майте на увазі, що Linux не забезпечує стабільний ABI, тому ваш код потрібно буде дещо змінити, щоб він працював у різних версіях ядра Linux. Крім того, майте на увазі, що вам потрібен повний кореневий доступ до машини, щоб мати можливість вставити цей код.

ОНОВЛЕННЯ:

Якщо ви обмотаєте pid_getattrсимвол ядра деяким додатковим кодом, це зробити дуже просто. Нещодавно я додав щось, що приховує процеси, до вищевказаного модуля ядра:

https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3

Ви можете зробити щось подібне, зробивши процеси певного користувача чи групи, які ніхто не бачить, окрім root та цього користувача. Робити це за назвою процесу трохи складніше, але можливо. Погляньте на exe_from_mm()функцію. Зауважте, що використання його всередині може бути наслідком для продуктивності pid_getattr.


4

Здається, два основні варіанти.

  • Selinux працює, вкладаючи різних людей у ​​різні сфери безпеки, і в певному сенсі обробляє їх піском, щоб вони не могли бачити речі один одного. Це висвітлено в цьому питанні . Оскільки selinux швидко перетворюється на фактичну систему безпеки у світі Linux, це, мабуть, напрямок, який ви повинні шукати.

  • Інше - це безпека, про яку згадує маріоош, і про яку задається в цьому питанні . Деякі дистрибутиви мають альтернативні пакети ядра із застосованими патчами безпеки. Якщо у вас це є, ви можете розглянути їх використання.

Якщо ви з якоїсь причини хочете це зробити без додавання такої системи безпеки, як selinux або grsecurity, будь ласка, поясніть, як ви робите не написання root-kit.


1

Це не так просто в стандартній linux box. Подивіться на безпеку , але для цього потрібне виправлення ядра тощо.


2
Я думаю, що це стандартно з ядром selinux.
user606723


0

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


2
Заміна "топ" не зупиняє користувача робити те, що робить "top".
Тім Пост

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