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

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

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

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

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

Для ана­лиза памяти вос­поль­зуем­ся ути­литой Volatility Framework 2.6.1 — этот инс­тру­мент написан на Python вер­сии 2 и пред­назна­чен для извле­чения арте­фак­тов из образцов энер­гозави­симой памяти.

 

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

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

Исследование образа памяти

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

python2.7 vol.py -f CYBERDEF-567078-20230213-171333.raw imageinfo

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

python2.7 vol.py -f c79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 printkey -K 'ControlSet001\Control\ComputerName\ActiveComputerName'
Имя компьютера
Имя компь­юте­ра

Имя компь­юте­ра иссле­дуемой сис­темы — CYBERDEF-567078. Получим сетевой адрес, для это­го необ­ходимо опре­делить иден­тифика­торы сетевых интерфей­сов.

python2.7 vol.py -f /mnt/c/Users/DonNod/Downloads/c79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 printkey -K 'ControlSet001\Services\Tcpip\Parameters\Interfaces'
Идентификаторы сетевых интерфейсов
Иден­тифика­торы сетевых интерфей­сов

Те­перь про­верим каж­дый сетевой интерфейс и получим сетевые нас­трой­ки машины.

python2.7 vol.py -f c79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 printkey -K 'ControlSet001\Services\Tcpip\Parameters\Interfaces\{B35F0A5F-EBC3-4B5D-800D-7C1B64B30F14}'
IP-адрес сетевого интерфейса
IP-адрес сетево­го интерфей­са

Се­тевой адрес иссле­дуемой машины 192.168.8.195 выдан динами­чес­ки DHCP-сер­вером 192.168.8.1.

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

python2.7 vol.py -f c79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 pslist > pslist.txt
Список запущенных процессов
Спи­сок запущен­ных про­цес­сов

Ана­лизи­руя вывод пла­гина pslist, мож­но заметить, что на момент сня­тия обра­за памяти в сис­теме работа­ло 19 про­цес­сов. В стол­бце Exit ука­зано вре­мя завер­шения про­цес­сов, 6 про­цес­сов завер­шили свою работу.

Про­ана­лизи­руем про­цес­сы с помощью пла­гина pstree.

python2.7 vol.py -f c79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 pstree > pstree.txt
Вывод плагина pstree
Вы­вод пла­гина pstree

Ана­лизи­руя дерево про­цес­сов, мож­но заметить про­цесс с инте­рес­ным име­нем rootkit.exe (иден­тифика­тор 964), а так­же про­цесс cmd.exe (иден­тифика­тор 1960), который явля­ется дочер­ним.

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

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

python2.7 vol.py -f c79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 filescan > c79-BE/filescan.txt

По­иск исполня­емо­го фай­ла rootkit.exe в спис­ке фай­лов не дал резуль­татов. Поп­робу­ем пос­тро­ить вре­мен­ную шка­лу событий опе­раци­онной сис­темы и вос­ста­новим дей­ствия поль­зовате­ля. Для это­го вос­поль­зуем­ся пла­гином timeliner, вывод работы пла­гина сох­раним в файл timeline.txt.

python2.7 vol.py -fc79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 timeliner > c79-BE/timeline.txt

Для удобс­тва ана­лиза заг­рузим файл событий в Excel. Откро­ем прог­рамму MS Office Excel, перей­дем на вклад­ку «Дан­ные → Из тек­сто­вого фай­ла» и выберем файл timeline.txt. Далее отсорти­руем дан­ные по дате и прис­тупим к ана­лизу.

Временная шкала событий
Вре­мен­ная шка­ла событий

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

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

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

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

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


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

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

    Подписаться

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