Linux

Как обнаружить скрытый процесс в Linux?

У нас есть система, которая, как мы подозреваем, была взломана на работе. Я не системный администратор, но меня взяли в команду для решения этой ситуации, и мне интересно, где можно найти хорошие места для поиска такой проблемы?

Причина, по которой мы подозреваем это, заключается в том, что мы заметили более высокую, чем обычно, загрузку сети на машине из-за высоких (которые кажутся случайными) портов. Что мы можем сделать, чтобы определить местонахождение проблемного компьютера? Что мы можем сделать для защиты от этого в будущем? Есть ли мониторинг, который мы можем запустить, чтобы узнать об этом в будущем (помимо мониторинга сети, над которым мы уже работаем, чтобы быть более внимательными)? 

Ответ 1

Вы не можете доверять никаким системным инструментам, установленным на машине. Руткиты заменят ps, netstat, ls и многое другое, чтобы скрыть свое присутствие. Вы должны отключить машину от сети, извлечь жесткий диск, сделать копию (думайте о dd), а затем работать с ней на seoncdary, машине для сканирования на наличие руткита. Если вы настаиваете на работе на живой машине (что обычно бесполезно), можно попробовать загрузить дистрибутив спасения на CD (очень важно, чтобы копия была только для чтения) и использовать его копии ps, lsmod и т. д. Даже это может не сработать, поскольку руткит может установить модули ядра, чтобы скрыть записи в /proc, где обычно работают такие инструменты, как ps.

Ответ 2

Проблема хорошо сконструированных руткитов заключается в том, что они изменяют команды вашей системы, такие как ps и top, чтобы не показывать процессы руткита и ls и не показывать файлы руткита. Поэтому вам нужно получить эти команды, возможно, из исходников или в виде бинарных файлов (убедитесь, что они хорошо подписаны). Но хитрость руткитов (я видел это) в том, что они могут повредить и ваш компилятор. Поэтому, когда компилятор знает, что он компилирует ls или ps, или любую другую команду, он заражает и их. 

Серьезно, если вы уверены, что в вашем сервере есть root kit, переустановите его!

Ответ 3

Лучший способ узнать, был ли ваш сервер «рутирован», – это использовать систему обнаружения вторжений на хосте (HIDS). К сожалению, если вы не используете HIDS сейчас, то уже слишком поздно ее устанавливать. Правильное время для установки HIDS – это время первой установки сервера перед включением его в сеть.

Вкратце: большинство HIDS работают путем вычисления криптографических хешей всех системных двоичных файлов и хранения этих хешей (наряду с многочисленными другими статистическими данными о файлах) в базе данных, называемой базовой базой данных. Затем периодически HIDS проверяет вашу систему, сравнивая все файлы в базе данных с реальными системными файлами.

Да, конечно, руткит может изменить вашу базовую базу данных, вот почему вам нужно сделать копию этой базы данных и хранить ее отдельно от сервера до того, как вы включите сервер в сеть. Затем, если вы подозреваете, что вы «рутированы» (и подозреваете, что ваша базовая база данных также была изменена), вы можете загрузить систему с установочного носителя, восстановить известную базу данных из резервной копии, а затем запустить сканирование против известной базы данных. Однако гораздо более вероятно, что руткит не ожидает, что ему придется победить ваш конкретный HIDS, и поэтому вы получите уведомление от HIDS о том, что системные файлы изменились, что указывает на вероятное вторжение в систему. Поскольку вы не использовали HIDS, у вас нет быстрого способа точно определить, были ли вы рутированы или какие системные файлы были изменены. Вы можете потратить уйму времени на сравнение системных файлов с известными файлами, извлеченными с известных установочных носителей, но это время, скорее всего, лучше потратить на переустановку системы с этого носителя. Если вы хотите исследовать, как вы были взломаны после того, как это произошло, лучше всего сделать образ системы перед тем, как стереть ее и переустановить.

Ответ 4

Если вы видите признаки компрометации, вы должны предположить, что вся система скомпрометирована. Вот почему все советуют переустановить систему, а не тратить много времени на поиски. Я сталкивался с несколькими ситуациями, когда машина была скомпрометирована, а системные администраторы думали, что уже все убрали, и впоследствии жалели об этом. Очень часто руткиты заменяют системные двоичные файлы, такие как ps, top, netstat. Также часто трояны заменяют ssh. Поэтому поиск странностей контрольных сумм в этих файлах является основным подходом. Если вы работаете с системой на базе rpm, то rpm -V обычно является хорошим инструментом или dpkg-verify в Debian/Ubuntu. Или вы можете проверить контрольные суммы напрямую (но остерегайтесь prelink, который меняет двоичные файлы на лету по соображениям скорости). Это ненадежно, но многие атаки скрипт-кидди не перекрывают эти следыругими словами, если вы что-то нашли хорошо; если вы ничего не нашли, это не доказывает, что вы чисты).

Другие вещи, на которые следует обратить внимание: порты, показанные открытыми с помощью внешнего nmap, которые не выглядят открытыми через netstat на машине, и pids в /proc, которые не отображаются в ps. И если у вас включен удаленный syslog, ищите логины ssh, которые не имеют записей в lastlog.

Ответ 5

Реальное решение для системы, которая может быть взломана руткитом, – это переустановка из безопасных источников, например, с установочных компакт-дисков. Затем восстановите данные только из резервной копии. Любые двоичные файлы или сценарии в вашей резервной копии могли быть скомпрометированы и сохранены в резервной копии. Чтобы найти руткит в работающей системе, один из способов – скомпилировать модуль ядра, предназначенный для обнаружения руткитов. Скомпилируйте его на другой машине с той же версией ОС. Затем скопируйте его и вставьте в систему. Детектор руткитов будет иметь встроенные в модуль ядра инструменты для дампа таблицы запущенных процессов, проверки таблицы syscall (для поиска перехвата syscall) и других функций. У него могут быть скрипты, которые берут вывод из модуля и сравнивают его с результатами ps, netstat, ls и т. д. Или он может сканировать память в пространстве ядра на наличие известных сигнатур руткитов и сообщать об этом.

Схожие статьи

Linux

Как узнать, взломан ли мой Linux-сервер?

Linux

Зачем нужна запись awverify CNAME для Azure?

Linux

Обеспечение безопасности нового сервера Ubuntu

Linux

Как предотвратить случайное использование rm -rf ?