Як ви могли запустити процес і зробити його невидимим для top
команди? Процес запускається звичайним користувачем (не root) і не повинен бути видимим для інших звичайних користувачів.
Як ви могли запустити процес і зробити його невидимим для top
команди? Процес запускається звичайним користувачем (не root) і не повинен бути видимим для інших звичайних користувачів.
Відповіді:
Ядро Linux з 3.3 містить підтримку приховування процесів для інших користувачів.
Це робиться за допомогою hidepid=
і gid=
монтує параметри для / proc, як описано у відповідній комісії та Documentation / filesystems / proc.txt .
Debian Wheezy також включає цю функцію.
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
.
Здається, два основні варіанти.
Selinux працює, вкладаючи різних людей у різні сфери безпеки, і в певному сенсі обробляє їх піском, щоб вони не могли бачити речі один одного. Це висвітлено в цьому питанні . Оскільки selinux швидко перетворюється на фактичну систему безпеки у світі Linux, це, мабуть, напрямок, який ви повинні шукати.
Інше - це безпека, про яку згадує маріоош, і про яку задається в цьому питанні . Деякі дистрибутиви мають альтернативні пакети ядра із застосованими патчами безпеки. Якщо у вас це є, ви можете розглянути їх використання.
Якщо ви з якоїсь причини хочете це зробити без додавання такої системи безпеки, як selinux або grsecurity, будь ласка, поясніть, як ви робите не написання root-kit.
Це не так просто в стандартній linux box. Подивіться на безпеку , але для цього потрібне виправлення ядра тощо.
ви можете замінити аргумент [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
?