Категория > Новости > Уроки форензики. Исследуем вредоносные документы Microsoft Office - «Новости»

Уроки форензики. Исследуем вредоносные документы Microsoft Office - «Новости»


21-12-2021, 00:01. Автор: Игорь
мат­рице MITRE ATT&CK, ата­ка, в которой зло­умыш­ленни­ки исполь­зуют докумен­ты Microsoft Office, называ­ется Spearphising Attachment. Что­бы рас­ска­зать о методах ана­лиза при­меня­емых в таких ата­ках фай­лов, я вос­поль­зуюсь дву­мя задани­ями с ресур­са CyberDefenders. Пер­вое из них — Obfuscated — поз­волит нам иссле­довать вре­донос­ный документ в фор­мате DOC. С помощью вто­рого, под наз­вани­ем Emprisa Maldoc, мы раз­берем, как зло­умыш­ленни­ки исполь­зуют документ RTF для выпол­нения шелл‑кода.

Су­щес­тву­ют сле­дующие методы выпол­нения вре­донос­ного кода в докумен­тах Microsoft Office.



  1. Вы­пол­нение кода, встро­енно­го в мак­рос VBA.

  2. Вы­пол­нение jаvascript в докумен­тах Microsoft Office.

  3. Вы­пол­нение полез­ной наг­рузки с исполь­зовани­ем уяз­вимос­тей в при­ложе­ниях Microsoft Office.


Для нашей работы мы будем исполь­зовать сле­дующий набор ути­лит:




  • oleid — для ана­лиза OLE-фай­лов;


  • olevba — для извле­чения и ана­лиза исходно­го кода мак­росов VBA из докумен­тов MS Office (OLE и OpenXML);


  • oledump — для ана­лиза потоков дан­ных OLE-фай­ла;


  • rtfdump — для ана­лиза фай­лов фор­мата RTF;


  • rtfobj — для извле­чения встро­енных объ­ектов из фай­лов RTF;


  • scdbg — для ана­лиза шелл‑кода, ути­лита пос­тро­ена на осно­ве биб­лиоте­ки для эму­ляции libemu.


info


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



Все необ­ходимые для ана­лиза вре­донос­ных докумен­тов ути­литы находят­ся в катало­ге FLAREOffice вир­туаль­ной машины под управле­нием Windows 10. А опи­сание обще­го под­хода к это­му самому ана­лизу мож­но най­ти в памят­ке Лен­ни Зель­цера.


Итак, прис­тупим к изу­чению фай­лов с сай­та CyberDefenders. Я не буду при­водить отве­ты на воп­росы из заданий — пов­торив все опи­сан­ные ниже экспе­римен­ты, ты смо­жешь най­ти их сам.


 

Obfuscated


Заг­рузим с сай­та ар­хив с задани­ем. Пер­вым делом пос­чита­ем хеш MD5 содер­жащего­ся в архи­ве фай­ла (в резуль­тате получит­ся зна­чение 49b367ac261a722a7c2bbbc328c32545) и про­верим его на VirusTotal.


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


oleid 49b367ac261a722a7c2bbbc328c32545
Уроки форензики. Исследуем вредоносные документы Microsoft Office - «Новости»
Ин­форма­ция об объ­екте иссле­дова­ния

Тул­за опре­дели­ла, что это документ Microsoft Office Word и в нем есть VBA-мак­рос. Его нам пред­сто­ит вытащить наружу. Для начала вос­поль­зуем­ся ути­литой oledump и пос­мотрим, в каком потоке OLE содер­жится VBA-мак­рос.


oledump 49b367ac261a722a7c2bbbc328c32545
По­токи иссле­дуемо­го докумен­та

Мак­рос спря­тал­ся в вось­мом потоке дан­ных. Выг­рузим его при помощи инс­тру­мен­та olevba с клю­чом -a.


olevba -a49b367ac261a722a7c2bbbc328c32545
Ре­зуль­тат работы ути­литы olevba

В потоке Macros/VBA/Module1 сос­редото­чена основная фун­кци­ональ­ность вре­донос­ного скрип­та. Из вывода ути­литы вид­но, какие фун­кции он исполь­зует. Давай извле­чем этот скрипт и нач­нем иссле­довать код.


olevba -c49b367ac261a722a7c2bbbc328c32545
Учас­ток обфусци­рован­ного кода вре­донос­ного VBA-мак­роса

Фун­кция AutoOpen() запус­кает выпол­нение скрип­та, ког­да документ откры­вают. Что­бы усложнить нам работу, зло­умыш­ленни­ки обфусци­рова­ли код VBA-мак­роса: име­на перемен­ных пред­став­лены в фор­мате Base64. Мы будем вруч­ную деоб­фусци­ровать код и раз­берем его фун­кци­ональ­ность.



info


Для деоб­фуска­ции VBA-мак­роса мож­но вос­поль­зовать­ся ути­литой ViperMonkey, которая эму­лиру­ет выпол­нение сце­нария, но сегод­ня про­ведем руч­ной ана­лиз.



Нач­нем с фун­кции AutoOpen().


Учас­ток кода фун­кции AutoOpen

На кар­тинке ты видишь выделен­ный фраг­мент кода, содер­жащий нес­коль­ко очень инте­рес­ных фун­кций. Фун­кция FileLen(ActiveDocument.FullName) получа­ет раз­мер докумен­та Word и записы­вает его в перемен­ную N18Eoi6OG6T2rNoVl41W. Фун­кция Open(ActiveDocument.FullName) откры­вает документ в бинар­ном фор­мате, затем записы­вает его содер­жимое в перемен­ную E2kvpmR17SI и пре­обра­зует счи­тан­ные стро­ки в кодиров­ку Unicode.


Во вто­ром выделен­ном бло­ке с исполь­зовани­ем объ­екта vbscript.regexp выпол­няет­ся поиск такой стро­ки в откры­том фай­ле:


MxOH8pcrlepD3SRfF5ffVTy86Xe41L2qLnqTd5d5R7Iq87mWGES55fswgG84hIRdX74dlb1SiFOkR1Hh

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


Про­дол­жение учас­тка кода фун­кции AutoOpen

Об­фусци­рован­ный вре­донос­ный код рас­положен пос­ле обна­ружен­ной нами стро­ки, его раз­мер сос­тавля­ет 16 827 байт.


На­чало полез­ной наг­рузки

Из фай­ла счи­тыва­ется информа­ция начиная с бай­та 0x503c, далее декоди­рует­ся по алго­рит­му, который мы раз­берем ниже, и сох­раня­ется в файл %appdata%MicrosoftWindowsmaintools.js. Затем с помощью WScript.Shell выпол­няет­ся JS-скрипт maintools.js с парамет­ром EzZETcSXyKAdF_e5I2i1.


Да­вай раз­берем алго­ритм декоди­рова­ния и напишем неболь­шую прог­рамму на Python для получе­ния исходно­го JS-скрип­та.


Фун­кция декоди­рова­ния полез­ной наг­рузки

Для удобс­тва чте­ния кода я пере­име­новал перемен­ные. Алго­ритм декоди­рова­ния очень прост. С каж­дым бай­том выпол­няет­ся опе­рация XOR (исклю­чающее «или») с клю­чом, который хра­нит­ся в перемен­ной KEY. Пос­ле каж­дого пре­обра­зова­ния бай­та изме­няет­ся и сам ключ.



Перейти обратно к новости