В этой статье мы про­ведем рас­сле­дова­ние инци­ден­та на при­мере лабора­тор­ной работы MrRobot с ресур­са CyberDefenders. Мы научим­ся извле­кать основные арте­фак­ты из обра­зов опе­ратив­ной памяти Windows и вос­ста­новим про­цесс ата­ки.

Сце­нарий в задании такой: сот­рудник ком­пании сооб­щил, что ему приш­ло элек­трон­ное пись­мо с обновле­нием безопас­ности, он запус­тил вло­жение и пос­ле это­го компь­ютер начал вес­ти себя стран­но. Груп­па реаги­рова­ния на инци­ден­ты получи­ла дам­пы опе­ратив­ной памяти с подоз­ритель­ных машин. Наша задача — иссле­довать их, най­ти то самое пись­мо, выявить заг­ружен­ные вре­донос­ные прог­раммы и методы боково­го переме­щения по сети.

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

Итак, заг­рузим файл ар­хива с арте­фак­тами и прис­тупим к их иссле­дова­нию.

 

Используемые утилиты

  1. Volatility Framework 2.6.1 — инс­тру­мент, реали­зован­ный на Python вер­сии 2 и пред­назна­чен­ный для извле­чения арте­фак­тов из образцов энер­гозави­симой памяти.
  2. Bulk extractor — инс­тру­мент для извле­чения струк­туриро­ван­ной информа­ции, к при­меру адре­сов элек­трон­ной поч­ты, URL, доменов.
  3. YARA Editor — прог­рамма для тес­тирова­ния и соз­дания пра­вил YARA.
 

Используемые плагины Volatility2 для извлечения данных

  1. Imageinfo — пла­гин для опре­деле­ния опе­раци­онной сис­темы, пакета обновле­ний и аппа­рат­ной архи­тек­туры иссле­дуемо­го обра­за.
  2. Pstree — поз­воля­ет прос­матри­вать спи­сок про­цес­сов в виде дерева.
  3. Handles — показы­вает откры­тые дес­крип­торы к фай­лам, раз­делам реес­тра, мьютек­сам, име­нован­ным каналам, спря­тан­ным в про­цес­сах. Так­же поз­воля­ет отоб­разить дес­крип­торы для кон­крет­ного про­цес­са и кон­крет­ного типа объ­екта.
  4. Consoles — пла­гин для поис­ка команд, которые зло­умыш­ленни­ки вве­ли в окне cmd.exe. Основное его пре­иму­щес­тво — пла­гин не толь­ко показы­вает вве­ден­ные зло­умыш­ленни­ками коман­ды, но и собира­ет весь экранный буфер (ввод и вывод).
  5. Memdump — извле­кает все резиден­тные стра­ницы памяти в про­цес­се.
  6. Filescan — пла­гин для поис­ка объ­ектов FILE_OBJECT в памяти с помощью ска­ниро­вания тегов пула. Най­дет все откры­тые фай­лы.
  7. Dumpfiles — извле­кает кеширо­ван­ные фай­лы из обра­за памяти.
  8. Netscan — ищет сетевые арте­фак­ты в 32- и 64-раз­рядных дам­пах памяти. Пла­гин находит конеч­ные точ­ки TCP, UDP, локаль­ные и уда­лен­ные IP-адре­са.
  9. Printkey — ищет зна­чения в ука­зан­ном раз­деле реес­тра Windows.
  10. Userassist — поз­воля­ет получить информа­цию из клю­ча реес­тра UserAssist.
  11. Mftparser — ска­ниру­ет записи глав­ной таб­лицы фай­лов (MFT) в памяти и выводит информа­цию о вре­мен­ных мет­ках фай­лов.
  12. Autoruns — под­клю­чаемый пла­гин, который ищет точ­ки сох­ранения исполня­емых фай­лов в сис­теме. Для его под­клю­чения необ­ходимо добавить пла­гин в каталог plugins инс­тру­мен­та volatility.
  13. Malfind — пла­гин для поис­ка скры­того или внед­ренно­го в память про­цес­сов кода.

Рас­паковы­ваем архив с задани­ем и получа­ем три фай­ла, которые содер­жат обра­зы памяти ском­про­мети­рован­ных хос­тов: Target1, Target2 и POS. Фай­лы име­ют рас­ширение .vmss, то есть пред­став­ляют собой момен­таль­ные сним­ки вир­туаль­ной машины VMware. Если Volatility не может извлечь арте­фак­ты из этих фай­лов, мож­но вос­поль­зовать­ся пла­гином raw2dmp, который пре­обра­зует дамп памяти при­оста­нов­ленной вир­туаль­ной машины VMware в фор­мат, при­год­ный для ана­лиза. Так­же мож­но вос­поль­зовать­ся инс­тру­мен­том vmss2core.

Ис­сле­дова­ние обра­зов опе­ратив­ной памяти мож­но раз­делить на два эта­па: вос­ста­нов­ление дей­ствий поль­зовате­ля и поиск приз­наков вре­донос­ной активнос­ти. На пер­вом эта­пе необ­ходимо про­ана­лизи­ровать запущен­ные про­цес­сы, откры­тые докумен­ты, вос­ста­новить исто­рию бра­узе­ра. Эта информа­ция поможет опре­делить вре­мя ком­про­мета­ции сис­темы, а так­же выяс­нить, какие дей­ствия поль­зовате­ля при­вели к инци­ден­ту. А про­ана­лизи­ровав активность зло­умыш­ленни­ка, нуж­но най­ти исполь­зован­ные вре­донос­ные модули, спо­соб их зак­репле­ния в сис­теме, а так­же обна­ружить методы боково­го переме­щения по сети орга­низа­ции.

 

Исследование хоста Target1

По­лучим пер­вичную информа­цию об иссле­дуемой машине, выяс­ним про­филь опе­раци­онной сис­темы, сетевой адрес и имя хос­та.

python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 imageinfo`
Информация о профиле операционной системы
Ин­форма­ция о про­филе опе­раци­онной сис­темы

В клю­че реес­тра SYSTEM\ControlSet001\Control\ComputerName\ComputerName содер­жится информа­ция об име­ни компь­юте­ра.

python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 printkey -K "ControlSet001\Control\ComputerName\ComputerName"
Имя компьютера
Имя компь­юте­ра

Имя компь­юте­ра — FRONT-DESK-PC.

По­лучим сетевой адрес хос­та: в клю­че реес­тра SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces содер­жатся иден­тифика­торы сетевых адап­теров, в одном из которых хра­нит­ся информа­ция о сети.

python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 printkey -K "ControlSet001\Services\Tcpip\Parameters\Interfaces\{9C3710A4-77FE-48CB-911B-742A81DE38BA}"
IP-адрес хоста
IP-адрес хос­та

Про­филь ском­про­мети­рован­ной машины Win7SP1x86_23418, IP-адрес — 10.1.1.20, имя хос­та — FRONT-DESK-PC.

Нач­нем вос­ста­нав­ливать дей­ствия поль­зовате­ля в сис­теме. Пер­вым делом получим информа­цию о запущен­ных про­цес­сах и сох­раним ее в файл для удобс­тва ана­лиза.

python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 pstree > pstree.txt
Дерево запущенных процессов
Де­рево запущен­ных про­цес­сов

Мы видим запущен­ный про­цесс OUTLOOK.EXE с иден­тифика­тором 3196, в адресном прос­транс­тве которо­го содер­жится информа­ция об элек­трон­ных сооб­щени­ях и откры­тых фай­лах. Получим перепис­ку авто­ризо­ван­ного в Outlook поль­зовате­ля. Для это­го выг­рузим все фай­лы дан­ного про­цес­са и про­ана­лизи­руем их: в дес­крип­торе откры­того про­цес­са с иден­тифика­тором 3196 най­дем все объ­екты FILE.

python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 handles -p 3196 -t FILE > handles_3196.txt
Открытые файлы процесса OUTLOOK.exe
От­кры­тые фай­лы про­цес­са OUTLOOK.exe

Мы обна­ружи­ли файл с рас­ширени­ем .ost, который содер­жит кеширо­ван­ные (сох­ранен­ные в памяти сис­темы) сооб­щения элек­трон­ного поч­тового ящи­ка поль­зовате­ля. Поп­робу­ем вос­ста­новить этот файл, исполь­зуя пла­гин dumpfiles, но сна­чала нам необ­ходимо узнать физичес­кий адрес дан­ного фай­ла в памяти. Запус­тим пла­гин filescan, най­дем инте­ресу­ющий нас файл и получим его физичес­кий адрес.

python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 handles -p 3196 -t FILE > filescan.txt
Физический адрес файла outlook2.ost
Фи­зичес­кий адрес фай­ла outlook2.ost

Ад­рес фай­ла outlook2.ost — 0x000000003ecec2b0. Теперь мож­но вос­ста­новить сам файл. В парамет­ре -Q пла­гина dumpfiles ука­зыва­ем адрес фай­ла, который нуж­но выг­рузить.

python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 dumpfiles -Q 0x000000003ecec2b0 -D dumpfiles/

Я поп­робовал вос­ста­новить все фай­лы кон­тей­нера outlook, но они ока­зались пус­тыми. Вос­поль­зуем­ся дру­гим методом выг­рузки сооб­щений. Для это­го получим дамп адресно­го прос­транс­тва про­цес­са OUTLOOK.EXE с помощью пла­гина memdump.

python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 memdump -p 3196 -D ./

Мы получи­ли дамп адресно­го прос­транс­тва, поп­робу­ем в нем най­ти сооб­щения. Откро­ем получен­ный файл в шес­тнад­цатерич­ном редак­торе и най­дем стро­ку From, а так­же Content-Type.

Обнаруженный заголовок письма
Об­наружен­ный заголо­вок пись­ма
Содержимое электронного письма
Со­дер­жимое элек­трон­ного пись­ма

Про­ана­лизи­руем его заголо­вок: нас инте­ресу­ют поля Subject, From и Received.

info

Как ана­лизи­ровать заголов­ки элек­трон­ных писем, рас­ска­зыва­ется в одной из наших ста­тей.

Пись­мо приш­ло от поль­зовате­ля th3wh1t3r0s3@gmail.com и име­ло тему Обновите ваш VPN клиент. Поле Received харак­теризу­ет адрес отпра­вите­ля, а так­же показы­вает, через какие узлы сооб­щение прош­ло.

На­ходим пер­вое поле Received и узна­ем, что сооб­щение отправ­лено с IP-адре­са 10.114.2.82. Как вид­но из содер­жимого, там при­сутс­тву­ет ссыл­ка http://180.76[.]254[.]120/AnyConnectInstaller.exe для заг­рузки фай­ла AnyConnectInstaller.exe.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии