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

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

info

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

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

 

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

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

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

  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 — пла­гин для поис­ка скры­того или внед­ренно­го в память про­цес­сов кода.
  14. Editbox — пла­гин для извле­чения тек­ста из эле­мен­тов управле­ния Windows Edit.
 

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

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

python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" imgeinfo

Вер­сия ОС — Win7SP1x64. Мы будем ее ука­зывать при поис­ке дру­гих арте­фак­тов в качес­тве про­филя в Volatility.

По­лучим имя компь­юте­ра, для это­го про­верим сле­дующий ключ реес­тра:

SYSTEM\ControlSet001\Control\ComputerName\ComputerName
python2 vol.py -f ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem \
--profile=Win7SP1x64 printkey -K "ControlSet001\Control\ComputerName\ComputerName"
Имя компьютера исследуемого образа
Имя компь­юте­ра иссле­дуемо­го обра­за

Имя компь­юте­ра: WIN-191HVE3KTLO.

Вы­ясним сетевой адрес. Для это­го про­верим ключ, в котором содер­жатся иден­тифика­торы сетевых адап­теров. Здесь же мож­но най­ти и информа­цию о сети.

python2 vol.py -f ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem \
--profile=Win7SP1x86_23418 printkey \
-K "ControlSet002\Services\Tcpip\Parameters\Interfaces\{360E0CDC-9C78-4D3B-A0Af-69CC45DE6D70}"
Сетевая информация о хосте
Се­тевая информа­ция о хос­те

IP-адрес иссле­дуемой машины — 10.1.1.122.

Про­ана­лизи­руем запущен­ные про­цес­сы в сис­теме, их спи­сок выг­рузим в файл pstree.txt.

python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 pstree > ecorpoffice/pstree.txt
Список процессов
Спи­сок про­цес­сов

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

python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 handles -p 2692 -t FILE > ecorpoffice/FILE_OUTLOOK

В резуль­тате ана­лиза объ­ектов FILE обна­руже­но имя поч­тового ящи­ка поль­зовате­ля:

\Device\HarddiskVolume1\Users\phillip.price\AppData\Local\Microsoft\Outlook\phillip.price@e-corp.biz.pst

Поп­робу­ем выг­рузить этот кон­тей­нер из памяти про­цес­са. Най­дем физичес­кий адрес фай­ла, исполь­зуя пла­гин filescan.

python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 filescan > ecorpoffice/filescan`
Адрес почтового ящика пользователя в системе
Ад­рес поч­тового ящи­ка поль­зовате­ля в сис­теме

Выг­ружа­ем най­ден­ный файл, даем ему рас­ширение .ost и заг­ружа­ем в ути­литу OST Extractor.

python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 dumpfiles -Q 0x000000007d4d9450 -u -D ecorpoffice/

Не забыва­ем про аргу­мент -u, который поз­воля­ет выг­рузить боль­шее количес­тво дан­ных.

По­луча­ем файл file.None.0xfffffa80042dcf10.dat. Тоже меня­ем ему раз­решение на .ost и заг­ружа­ем в OST Extractor.

Конвертирование почтового контейнера
Кон­верти­рова­ние поч­тового кон­тей­нера

Пос­ле кон­верти­рова­ния OST в ука­зан­ной пап­ке появит­ся сооб­щение поль­зовате­ля в фор­мате EML. Перехо­дим в пап­ку сооб­щений и смот­рим его.

Заголовок письма
За­голо­вок пись­ма
Содержимое сообщения
Со­дер­жимое сооб­щения

Пись­мо отправ­лено с поч­тового ящи­ка karenmiles@t-online.de. В атта­че — документ bank_statement_088452.doc. IP-адрес поч­тового сер­вера — 31.6.35.122. Пись­мо пос­тупило 4 октября 2016 года в 12:02:04 (UTC).

Что­бы извлечь вло­жение, мож­но вос­поль­зовать­ся блок­нотом, для это­го декоди­руем аттач из Base64 и сох­раня­ем файл с рас­ширени­ем .doc. Либо можешь открыть EML с помощью поч­тового кли­ента (того же Outlook).

info

Ис­сле­довать вре­донос­ные фай­лы необ­ходимо в изо­лиро­ван­ной сре­де. Как соз­дать лабора­торию для ана­лиза вре­доно­сов, под­робно рас­ска­зано в статье «Код под над­зором. Соз­даем вир­туаль­ную лабора­торию для ана­лиза мал­вари».

Итак, берем файл bank_statement_088452.doc и начина­ем изу­чать. Его MD5:

c2dbf24a0dc7276a71dd0824647535c9

Про­верим наличие мак­роса в получен­ном вло­жении с помощью ути­литы olevba.

olevba bank_statement_088452.doc
Результат работы утилиты olevba
Ре­зуль­тат работы ути­литы olevba

Мак­рос силь­но обфусци­рован, и по‑быс­тро­му его про­ана­лизи­ровать не получит­ся, поэто­му откро­ем документ в Microsoft Word и нач­нем отла­живать скрипт на Visual Basic.

Содержимое вредоносного документа
Со­дер­жимое вре­донос­ного докумен­та

Пе­рей­дем в «Вид → Мак­росы» и наж­мем кноп­ку «Отла­дить». Находим сле­дующий учас­ток кода.

Содержимое макроса
Со­дер­жимое мак­роса

В фун­кции xvkBjM выпол­няет­ся запуск содер­жимого в перемен­ной UsoJar. Най­дем мес­то в коде, где фор­миру­ется эта перемен­ная, пос­тавим точ­ку оста­нова и запус­тим скрипт.

Отладка скрипта
От­ладка скрип­та

Пос­ле выпол­нения это­го учас­тка кода в перемен­ной UsoJar появит­ся коман­да на PowerShell, которая декоди­рует дан­ные и исполня­ет их.

Пре­обра­зуем дан­ные из Base64 и пос­мотрим содер­жимое.

Преобразованные данные
Пре­обра­зован­ные дан­ные

Как видим, скрипт на PowerShell находит и запус­кает исполня­емые фай­лы вот из этой пап­ки:

C:\Users\<user>\AppData\Local\Temp

Пе­ред тем как запус­кать вре­донос­ный документ, нач­нем записы­вать сетевой тра­фик, для это­го запус­тим в вир­туаль­ной машине Wireshark.

Сетевая активность вредоносного документа
Се­тевая активность вре­донос­ного докумен­та

Как видим, до запус­ка скрип­та на PowerShell про­исхо­дит заг­рузка полез­ной наг­рузки с IP-адре­са 54.174.131.235.

Заголовок сетевого пакета
За­голо­вок сетево­го пакета

Вре­донос­ный скрипт на VBA заг­ружа­ет полез­ную наг­рузку со сле­дующе­го адре­са:

http://54.174.131.235/files/tv_x64.exe

Наг­рузка будет сох­ранена в файл

C:\Users\<user>\AppData\Local\Temp\SkypeC2AutoUpdate.exe

За­тем этот файл запус­кает­ся.

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

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

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

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

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


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

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

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии