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

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

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

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

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

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

search_rootkit_1

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

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

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

search_rootkit_2

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

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

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

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

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

search_rootkit_3

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

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

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

Размер:

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

search_rootkit_4

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

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

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

search_rootkit_5

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

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

search_rootkit_6

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

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

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

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

search_rootkit_8

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

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

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

пример:

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

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

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

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

пример:

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

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

пример:

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

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

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

пример:

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

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

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

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

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

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

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