Сегодня я познакомлю вас с еще одном форензик кейсом с площадки CyberDefenders Hacked. Мы будем извлекать артефакты из образа диска системы Linux, исследовать их, и по собранным данным попробуем разобраться, как хакер взломал систему.
Еще по теме: Расследование взлома компьютера Windows
Форензик кейс взлома веб-сервера с Linux Apache и Drupal
Поиск точки входа
Теперь нам нужно понять, как злоумышленник впервые получил доступ к скомпрометированной системе. Для этого проанализируем логи ОС. Все журналы событий Linux хранятся в каталоге:
1 |
/var/log |
Анализ этих файлов и сопоставление со временем начала инцидента позволит нам восстановить полную картину событий.
Первым делом глянем события веб‑сервера Apache. Для этого заходим в каталог:
1 |
/var/log/Apache2 |
Здесь нас интересуют журналы access.log и error.log, которые содержат события работы веб‑сервера. В файле access.log содержатся запросы к сервису Drupal http://192.168.210.135/jabc/ с IP-адреса 192.168.210.131.
5 октября 2019 года в 13:01:27 (UTC+2) обнаружен POST-запрос к веб‑сервису, в параметре name[#markup]. В URL запроса передается закодированная по алгоритму Base64 полезная нагрузка.
В Drupal версии 7.26 содержится уязвимость удаленного выполнения кода CVE-2018-7600, позже получившая название drupalgeddon2. В Metasploit существует модуль drupal_drupalgeddon2, который загружает расширенную многофункциональную нагрузку Meterpreter.
О том, как работает эта уязвимость, читай в этой статье. Мы подробно разбираем новую уязвимость в Drupal.
Давай декодируем полезную нагрузку, которая содержится в функции eval(base64_decode()), и посмотрим, что она делает.
Как видно на рисунке выше, код является полезной нагрузкой Meterpreter и содержит IP-адрес 192.168.210.131 и порт 4444 для обратного соединения. Отлично, мы теперь знаем, что злоумышленники проэксплуатировали CVE-2018-7600 в сервисе Drupal версии 7.26 и загрузили в память полезную нагрузку Meterpreter.
Теперь нам нужно найти признаки постэксплуатации. 5 октября 2019 года в 13:17:48 (UTC+2) обнаружен запрос к файлу update.php c параметром cmd=ls.
Этот файл мы исследуем чуть позже, а пока заглянем в auth.log в каталоге /var/log. Это один из самых важных артефактов в Linux. Здесь лежат события аутентификации в системе. Для временных отметок в auth.log используется системное время. В нашем случае временная зона выставлена по Брюсселю (UTC+2).
Начиная с 12:39:26 5 октября 2019 года выполнялся подбор пароля пользователя root службы SSH с IP-адреса 192.168.210.131.
В 13:06:38 в тот же день создан пользователь php с домашней директорией /usr/php. Далее пользователь php добавлен в группу sudo, что позволяет ему выполнять команды от имени администратора.
В 13:09:18 пользователь mail добавлен в группу sudo.
В 13:23:34 пользователь mail зашел c IP-адреса 192.168.210.131, порт 57708 службы SSH.
Эта сессия длилась одну минуту.
Файл /var/log/syslog содержит общие системные сообщения. В частности, в нем можно видеть запросы к серверу DHCP и получение IP-адреса: сервер 192.168.210.254 выделил IP-адрес исследуемому компьютеру 192.168.210.135.
Теперь заглянем в /var/log/lastlog — этот файл содержит информацию о последних сессиях пользователей. Находим два IP-адреса, с которых производилась авторизация в системе.
И наконец, смотрим /var/log/wtmp, этот файл тоже содержит информацию о входе пользователей в систему. Однако он бинарный, поэтому для его чтения используем утилиту utmpdump.
1 |
utmpdump wtmp |
Файл /var/log/btmp содержит информацию о неудачных попытках входа в систему. Для его чтения также воспользуемся утилитой utmpdump:
1 |
utmpdump btmp |
В этом файле находим следы попыток неудачного входа пользователя root c IP-адреса 192.168.210.131. Происходит подбор пароля к службе SSH.
Итак, на этом этапе мы с тобой нашли точку входа злоумышленников в систему. 05 октября 2019 в 13:01:27 (UTC+2) злоумышленники эксплуатировали уязвимость drupalgeddon2 (CVE-2018-7600) в CMS Drupal версии 7.26. Создали пользователя php, добавили пользователей php и mail в группу sudo. Далее авторизовались в системе от пользователя mail. Мы также выяснили, что источником компьютерной атаки был IP-адрес 192.168.210.131.
Поиск методов постэксплуатации
Получив доступ к системе, злоумышленник обычно ищет способы закрепиться в ней. Проанализируем действия пользователей root, php и mail, чтобы понять, как это происходило. Информация о выполненных командах хранится в файле .bash_history домашнего каталога каждого пользователя. Действия пользователя root хранится в файле /root/.bash_history.
От пользователя root выполнены следующие интересные команды:
- rm 37282.c — удаление файла 37282.c;
- vim scripts/update.php — создание файла.
Переходим к пользователю mail.
Пользователь mail выполнил команду sudo su — с целью повышения привилегий, а затем passwd php — для смены пароля пользователя php.
Мы с тобой просканировали виртуальный диск с помощью R-Studio. Теперь найдем стертый файл 37282.c. В R-Studio переходим на вкладку «Инструменты → Найти», выбираем «Файлы» и вводим название файла.
В каталоге /tmp обнаружен файл 37282.c, восстановим его и проанализируем.
Файл создан 5 октября 2019 года в 14:02:18 (UTC+3). Имей в виду, что R-Studio отображает временную метку файлов с учетом твоего системного времени.
Восстановленный файл — это эксплоит для уязвимости CVE-2015-1328, который позволяет локальным пользователям получить root-доступ. Автор его — rebel.
Найдем файл:
1 |
/var/www/html/jabc/scripts/update.php |
5 октября 2019 года в 14:17:48 (UTC+3) злоумышленники создали файл update.php.
Это PHP-шелл, который позволяет получать доступ к системе на постоянной основе. Для выполнения команд злоумышленники отправляют GET-запрос с параметром cmd=.
Построение таймлайна событий
У нас накопилось множество временных меток в разных форматах. Системное время операционной системы — Europe/Brussels. Во многих европейских странах остался переход с летнего времени на зимнее. Переход совершается 31 октября. Если события происходят до 31 октября, то формат будет UTC+2 — это летнее время, а после 31 октября — UTC+1. Приведем к общему формату UTC.
5 октября 2019 года 11:01:27 злоумышленники проэксплуатировали уязвимость CVE-2018-7600 в CMS Drupal версии 7.26, загрузили оболочку Meterpreter.
- В 11:02:18 загрузили файл 37282.c, скомпилировали систему и повысили свои привилегии до root.
- В 11:06:38 создали пользователя php и добавили его в группу sudo.
- В 11:09:31 добавили пользователя mail в группу sudo.
- В 11:17:48 создали файл update.php с целью сохранения постоянства в системе.
- В 11:23:34 авторизовались в системе под пользователем mail c IP-адреса 192.168.210.131, порт 57708.
Для создания таймлайнов удобно использовать Plaso. Там есть очень удобный скрипт Psteal, который умеет извлекать события из образа диска системы. Вот как его использовать:
1 |
python3 psteal.py --source Webserver.E01 -w timeline.csv |
Когда скрипт отработает, ты получишь файл CSV со всей последовательностью временных меток.
Заключение
Мы с тобой провели расследование киберинцидента, нашли точку входа злоумышленников, выявили дальнейшие действия после взлома веб‑сервера и построили таймлайн событий, который можно будет смело включать в отчет.
По результатам решения кейса на CyberDefenders необходимо ответить на ряд вопросов, но я покажу процесс решения и не буду подсвечивать ответы. Можешь повторить процесс и самостоятельно ответить на вопросы, чтобы закрепить материал.
Еще по теме: Анализ дампа памяти с помощью Volatility