Иногда случаются крайне неприятные ситуации, когда сервер заражен вредоносным ПО (трояны, руткиты и т.д.)
И возникает вопрос как это исправить. Лучше всего помогает ручное сканирование системы на подозрительные процессы и источники их появления, хотя и автоматическими системами скнирования не стоит пренебрегать.
Попробуем найти на зараженном сервере вредоносное ПО.
Сначала изолируем сервер от внешнего мира, оставив только 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-инфраструктуре – это быть уверенным в завтрашнем дне. Для того, чтобы сделать заказ:
|