Поиск руткита на Linux сервере

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

Сначала изолируем сервер от внешнего мира, оставив только SSH подключение. В данном случае это было требование датацентра, на которой он размещен т.к. данный сервер генерировал огромное количество трафика. Поэтому было принято решение заблокировать все подключения, кроме относительно безопасных и необходимых, чтобы разблокировали доступ к нему (крайне неудобно искать вредоносное ПО через KVM).

Для блокировки используем iptables и создадим в нем набор правил, которые запрещают все лишнее.

iptables -F
iptables -t nat -F
iptables -X
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

посмотрим список подозрительных процессов (для удобного просмотра больших списков лучше еще использовать обработчик less, чтобы можно было листать список):

ps -aux

Список процессов

Мы видим несколько подозрительных процессов:
/usr/bin/.sshd – путь запуск стандартный, на какое-то подозрительное имя.
/tmp/Sav – подозрительное имя и подозрительное расположение для исполняемого файла
/boot/.IptabLex – подозрительное имя и подозрительное расположение для исполняемого файла

теперь посмотрим что эти процессы делают:

netstat -avnp

Список сетевых соединений

Netstat выдает подозрительную активность.

.IptabLex – пытается создать соединение с сервером 222.186.21.48 по порту 7000
Sav – пытается создать соединение с сервером 222.186.34.177 по порту 25000

Интересующие нас процессы имеют PID: 12419, 12445, 12515, 21795 (бывший 19710. Оказывается процесс .IptabLex периодически перезапускется).

Посмотрим какие файлы в системе они открывают и используют:

lsof -p 12419
lsof -p 12445
lsof -p 12515
lsof -p 21795

Список открытых файлов

Сверхинтересного ничего не найдено, вредоносное ПО в данных файлах хранит собственные PID, но в файле /.mylisthbx.pid был найден еще один PID (3257), который я пропустил, это окзался еще один вредоносный процесс /boot/.IptabLex. В нем тоже не было ничего интересного.

Далее сравним найденные файлы (по размеру и контрольной сумме каждого) и сохраним размеры и контрольные суммы (они в дальнейшем пригодятся).

Контрольные суммы:

md5sum /usr/bin/.sshd
md5sum /tmp/Sav
md5sum /boot/.IptabLex

Размер:

ls -lia /usr/bin/.sshd
ls -lia /tmp/Sav
ls -lia /boot/.IptabLex

Контрольные суммы

и увидим, что два файла идентичны, а третий отличается.

Собственно основные запущенные файлы выявлены.
Теперь посмотрим что у них внутри. Для этого воспользуемся утилитой strings, используемую для поиска печатаемых строк в бинарных файлах

strings /boot/.IptabLex

Интересные строки 1

Тут мы видим странные строки с публичными сайтами (декомпиляция в дальнейшем показала, что по ним определяется доступность выхода в интернет), а так же некоторый набор путей.

strings /tmp/Sav

Интересные строки 2

На этом скриншоте записи, которые нам говорят о некоторых параметрах (или переменных), которые имеют вполне красноречивые названия

Интересные строки 3

Далее мы видем список каких-то IP. Скорее всего это сервера управления ботнетом.

Интересные строки 4

И подозрительные локальные пути. Дальнейший поиск по файловой системе показал, что это пути куда дополнительно копируется вирус.

В принципе вирус найден. Осталось его удалить.

Первый будем искать по имени:

find / -type f -name возможные_имена_вируса

пример:

find / -type f -name .IptabLex

В данном случае ищем все файлы с именем .IptabLex

Далее пройдемся поиском по размеру файла со сравнением контрольной суммы, для исключения ложных срабатываний.

Посмотрим размер файла вируса:

ls -lia /boot/.IptabLex

запустим поиск по размеру:

find / -size размер_файлаc -type f -exec md5sum {} \; | grep ^контрольная_сумма | awk '{print $2}'

пример:

find / -size 12800c -type f -exec md5sum {} \; | grep ^6b1af22a53c8f23f9cf8635f1658094f | awk '{print $2}'

будет произведен поиск всех файлов с размером 121800 байт и сравнение с контрольной суммой найденного образца вируса, а параметр c указывает, что ищем файл с нужным количеством байт.

И последний поиск сделаем по контрольной сумме (он самый долгий и шанс коллизии слишком низкий, поэтому для параноиков):

find / -type f -exec md5sum {} \; | grep ^контрольная_сумма_файла | awk '{print $2}'

пример:

find / -type f -exec md5sum {} \; | grep ^6b1af22a53c8f23f9cf8635f1658094f | awk '{print $2}'

Объясню некоторые параметры поиска:

-type f – указывает что искать нужно файлы
-exec md5sum {} \; – выполнить команду (exec) вычисления контрольной суммы md5sum над найденным файлом {} и закрывем команду exec символами \;
grep ^ – фильтруем строки, ^ означает, что строка с этого должна начинаться.
awk ‘{print $2}’ – выводим второе значение (путь и имя файла)

После нахождения всех файлов, убиваем процессы командой:

kill -9 PID1 PID2 PID3

пример:

kill -9 12419 12445 12515 21795

Проверяем все ли процессы завершены и удаляем все найденные файлы командой rm.

Остается проверить все места, из которых возможен автозапуск (cron, init.d и т.д.).

После окончания проверки – перезапускаем систему и смотрим на наличие вредоносных процессов. Если все чисто – то очистка закончена.
Если процессы остались, то значит вычистили вредоносный код не целиком или его части находятся гораздо глубже, например в initramfs или в виде модуля ядра и требует более глубокого исследования системы.

Заказать Аудит Безопасности или Пентест Вашей IT-инфраструктуры

Быть уверенным в своей IT-инфраструктуре – это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Заполните форму обратной связи и мы обязательно с вам свяжемся:
Форма обратной связи
Позвоните нам по телефону:
+7(909)952-44-33
Напишите нам на электронную почту:
order@blackdiver.net
Напишите нам в Telegram:
Telegram
Другие способы связи Вы сможете найти в разделе Контакты.

Please Login to Comment.