Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Один из самых распространенных векторов атак на организации и простых пользователей — социальная инженерия. Злодеи присылают жертве электронное письмо с вложением, очень часто — документ Microsoft Office с опасным содержимым. В этой статье мы разберемся, как анализировать такие документы и как искать в их недрах вредоносный код.
Согласно матрице MITRE ATT&CK, атака, в которой злоумышленники используют документы Microsoft Office, называется Spearphising Attachment. Чтобы рассказать о методах анализа применяемых в таких атаках файлов, я воспользуюсь двумя заданиями с ресурса CyberDefenders. Первое из них — Obfuscated — позволит нам исследовать вредоносный документ в формате DOC. С помощью второго, под названием Emprisa Maldoc, мы разберем, как злоумышленники используют документ RTF для выполнения шелл‑кода.
Существуют следующие методы выполнения вредоносного кода в документах Microsoft Office.
Для нашей работы мы будем использовать следующий набор утилит:
info
Исследование мы будем проводить в лаборатории для анализа вредоносов, подробно описанной в статье «Код под надзором. Создаем виртуальную лабораторию для анализа малвари».
Все необходимые для анализа вредоносных документов утилиты находятся в каталоге FLAREOffice
виртуальной машины под управлением Windows 10. А описание общего подхода к этому самому анализу можно найти в памятке Ленни Зельцера.
Итак, приступим к изучению файлов с сайта CyberDefenders. Я не буду приводить ответы на вопросы из заданий — повторив все описанные ниже эксперименты, ты сможешь найти их сам.
Загрузим с сайта архив с заданием. Первым делом посчитаем хеш MD5 содержащегося в архиве файла (в результате получится значение 49b367ac261a722a7c2bbbc328c32545
) и проверим его на VirusTotal.
Теперь получим информацию о структуре вредоносного документа. Для этого воспользуемся утилитой oleid.
oleid 49b367ac261a722a7c2bbbc328c32545
Информация об объекте исследования
Тулза определила, что это документ Microsoft Office Word и в нем есть VBA-макрос. Его нам предстоит вытащить наружу. Для начала воспользуемся утилитой oledump и посмотрим, в каком потоке OLE содержится VBA-макрос.
oledump 49b367ac261a722a7c2bbbc328c32545
Потоки исследуемого документа
Макрос спрятался в восьмом потоке данных. Выгрузим его при помощи инструмента olevba с ключом -a
.
olevba -a 49b367ac261a722a7c2bbbc328c32545
Результат работы утилиты olevba
В потоке Macros/VBA/Module1
сосредоточена основная функциональность вредоносного скрипта. Из вывода утилиты видно, какие функции он использует. Давай извлечем этот скрипт и начнем исследовать код.
olevba -c 49b367ac261a722a7c2bbbc328c32545
Участок обфусцированного кода вредоносного 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
. После каждого преобразования байта изменяется и сам ключ.
Источник: xakep.ru