Уроки форензики. Ищем неизвестный вредонос и восстанавливаем данные из памяти

Содержание статьи

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

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

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

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

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

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

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

 

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

  • imageinfo — пла­гин для опре­деле­ния опе­раци­онной сис­темы, пакета обновле­ний и аппа­рат­ной архи­тек­туры иссле­дуемо­го обра­за.
  • pstree — пла­гин для прос­мотра спис­ка про­цес­сов в виде дерева.
  • handles — пла­гин для прос­мотра откры­тых дес­крип­торов к фай­лам, раз­делам реес­тра, мьютек­сам, име­нован­ным каналам, событи­ям в про­цес­сах. Так­же мож­но отоб­разить дек­срип­торы для кон­крет­ного про­цес­са или отфиль­тро­вав их по кон­крет­ному типу объ­екта.
  • consoles — пла­гин для поис­ка команд, которые зло­умыш­ленни­ки вве­ли в cmd.exe. Основным пре­иму­щес­твом это­го пла­гина явля­ется то, что он не толь­ко выводит коман­ды, вве­ден­ные зло­умыш­ленни­ками, но и собира­ет весь экранный буфер (ввод и вывод).
  • memdump — пла­гин для извле­чения всех резиден­тных стра­ниц памяти в про­цес­се.
  • filescan — пла­гин для поис­ка объ­ектов FILE_OBJECT в памяти с помощью ска­ниро­вания тегов пула. Дан­ный пла­гин най­дет все откры­тые фай­лы.
  • dumpfiles — пла­гин для извле­чения кеширо­ван­ных фай­лов из обра­за памяти.
  • printkey — пла­гин для поис­ка зна­чений в ука­зан­ном раз­деле реес­тра Windows.
  • userassist — пла­гин для получе­ния информа­ции из клю­ча реес­тра UserAssist.
  • mftparser — этот пла­гин ска­ниру­ет записи глав­ной таб­лицы фай­лов (MFT) в памяти и выводит информа­цию о вре­мен­ных мет­ках фай­лов.
  • malfind — пла­гин для поис­ка скры­того или внед­ренно­го кода в память про­цес­сов.
  • timeliner — пла­гин для соз­дания вре­мен­ной шка­лы событий опе­раци­онной сис­темы из раз­личных арте­фак­тов памяти.
  • 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 'ControlSet001ControlComputerNameActiveComputerName'

    Имя компь­юте­ра

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

    python2.7 vol.py -f /mnt/c/Users/DonNod/Downloads/c79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 printkey -K 'ControlSet001ServicesTcpipParametersInterfaces'

    Иден­тифика­торы сетевых интерфей­сов

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

    python2.7 vol.py -f c79-BE/CYBERDEF-567078-20230213-171333.raw --profile=WinXPSP2x86 printkey -K 'ControlSet001ServicesTcpipParametersInterfaces{B35F0A5F-EBC3-4B5D-800D-7C1B64B30F14}'

    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

    Ана­лизи­руя дерево про­цес­сов, мож­но заметить про­цесс с инте­рес­ным име­нем 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. Далее отсорти­руем дан­ные по дате и прис­тупим к ана­лизу.

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

    Источник: xakep.ru

    Ответить

    Ваш адрес email не будет опубликован. Обязательные поля помечены *