Форензик кейс взлома веб-сервера с Linux Apache и Drupal

Форензик кейс

Сегодня я познакомлю вас с еще одном форензик кейсом с площадки CyberDefenders Hacked. Мы будем извле­кать арте­фак­ты из обра­за дис­ка сис­темы Linux, исследовать их, и по собранным дан­ным попробуем разобраться, как хакер взломал сис­тему.

Еще по теме: Расследование взлома компьютера Windows

Форензик кейс взлома веб-сервера с Linux Apache и Drupal

Поиск точки входа

Те­перь нам нуж­но понять, как зло­умыш­ленник впер­вые получил дос­туп к ском­про­мети­рован­ной сис­теме. Для это­го про­ана­лизи­руем логи ОС. Все жур­налы событий Linux хра­нят­ся в катало­ге:

Ана­лиз этих фай­лов и сопос­тавле­ние со вре­менем начала инци­ден­та поз­волит нам вос­ста­новить пол­ную кар­тину событий.

Пер­вым делом гля­нем события веб‑сер­вера Apache. Для это­го заходим в каталог:

Здесь нас инте­ресу­ют жур­налы 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
Зап­росы к Drupal 7.26

В 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.

Зап­рос в веб‑шел­лу update.php
Зап­рос в веб‑шел­лу update.php

Этот файл мы иссле­дуем чуть поз­же, а пока заг­лянем в auth.log в катало­ге /var/log. Это один из самых важ­ных арте­фак­тов в Linux. Здесь лежат события аутен­тифика­ции в сис­теме. Для вре­мен­ных отме­ток в auth.log исполь­зует­ся сис­темное вре­мя. В нашем слу­чае вре­мен­ная зона выс­тавле­на по Брюс­селю (UTC+2).

На­чиная с 12:39:26 5 октября 2019 года выпол­нялся под­бор пароля поль­зовате­ля root служ­бы SSH с IP-адре­са 192.168.210.131.

Не­удач­ная попыт­ка под­бора пароля поль­зовате­ля root
Не­удач­ная попыт­ка под­бора пароля поль­зовате­ля root

В 13:06:38 в тот же день соз­дан поль­зователь php с домаш­ней дирек­тори­ей /usr/php. Далее поль­зователь php добав­лен в груп­пу sudo, что поз­воля­ет ему выпол­нять коман­ды от име­ни адми­нис­тра­тора.

Соз­дание поль­зовате­ля php и добав­ление в груп­пу sudo
Соз­дание поль­зовате­ля php и добав­ление в груп­пу sudo

В 13:09:18 поль­зователь mail добав­лен в груп­пу sudo.

До­бав­ление поль­зовате­ля mail в груп­пу sudo
До­бав­ление поль­зовате­ля mail в груп­пу sudo

В 13:23:34 поль­зователь mail зашел c IP-адре­са 192.168.210.131, порт 57708 служ­бы SSH.

Вход поль­зовате­ля mail на ском­про­мети­рован­ный компь­ютер
Вход поль­зовате­ля mail на ском­про­мети­рован­ный компь­ютер

Эта сес­сия дли­лась од­ну минуту.

Файл /var/log/syslog содер­жит общие сис­темные сооб­щения. В час­тнос­ти, в нем мож­но видеть зап­росы к сер­веру DHCP и получе­ние IP-адре­са: сер­вер 192.168.210.254 выделил IP-адрес иссле­дуемо­му компь­юте­ру 192.168.210.135.

Вза­имо­дей­ствие с сер­вером DHCP
Вза­имо­дей­ствие с сер­вером DHCP

Те­перь заг­лянем в /var/log/lastlog — этот файл содер­жит информа­цию о пос­ледних сес­сиях поль­зовате­лей. Находим два IP-адре­са, с которых про­изво­дилась авто­риза­ция в сис­теме.

Информация из файла lastlog
Информация из файла lastlog

И наконец, смот­рим /var/log/wtmp, этот файл тоже содер­жит информа­цию о вхо­де поль­зовате­лей в сис­тему. Одна­ко он бинар­ный, поэто­му для его чте­ния исполь­зуем ути­литу utmpdump.

Информация о пользователях, авторизованных 5 октября 2019 года
Информация о пользователях, авторизованных 5 октября 2019 года

Файл /var/log/btmp содер­жит информа­цию о неудач­ных попыт­ках вхо­да в сис­тему. Для его чте­ния так­же вос­поль­зуем­ся ути­литой utmpdump:

Со­дер­жимое фай­ла /var/log/btmp
Со­дер­жимое фай­ла /var/log/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.

Со­дер­жимое фай­ла .bash_history поль­зовате­ля root
Со­дер­жимое фай­ла .bash_history поль­зовате­ля root

От поль­зовате­ля root выпол­нены сле­дующие инте­рес­ные коман­ды:

  • rm 37282.c — уда­ление фай­ла 37282.c;
  • vim scripts/update.php — соз­дание фай­ла.

Пе­рехо­дим к поль­зовате­лю mail.

Со­дер­жимое фай­ла .bash_history поль­зовате­ля mail
Со­дер­жимое фай­ла .bash_history поль­зовате­ля 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 отоб­ража­ет вре­мен­ную мет­ку фай­лов с уче­том тво­его сис­темно­го вре­мени.

Со­дер­жимое фай­ла 37282.c
Со­дер­жимое фай­ла 37282.c

Вос­ста­нов­ленный файл — это экс­пло­ит для уяз­вимос­ти CVE-2015-1328, который поз­воля­ет локаль­ным поль­зовате­лям получить root-дос­туп. Автор его — rebel.

Най­дем файл:

Да­та соз­дания фай­ла update.php
Да­та соз­дания фай­ла update.php

5 октября 2019 года в 14:17:48 (UTC+3) зло­умыш­ленни­ки соз­дали файл update.php.

Со­дер­жимое фай­ла update.php
Со­дер­жимое фай­ла 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, который уме­ет извле­кать события из обра­за дис­ка сис­темы. Вот как его исполь­зовать:

Ког­да скрипт отра­бота­ет, ты получишь файл CSV со всей пос­ледова­тель­ностью вре­мен­ных меток.

Заключение

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

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

Еще по теме: Анализ дампа памяти с помощью Volatility

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий