Согласно матрице MITRE ATT&CK, атака, в которой злоумышленники используют документы Microsoft Office, называется Spearphising Attachment. Чтобы рассказать о методах анализа применяемых в таких атаках файлов, я воспользуюсь двумя заданиями с ресурса CyberDefenders. Первое из них — Obfuscated — позволит нам исследовать вредоносный документ в формате DOC. С помощью второго, под названием Emprisa Maldoc, мы разберем, как злоумышленники используют документ RTF для выполнения шелл‑кода.
Существуют следующие методы выполнения вредоносного кода в документах Microsoft Office.
- Выполнение кода, встроенного в макрос VBA.
- Выполнение JavaScript в документах Microsoft Office.
- Выполнение полезной нагрузки с использованием уязвимостей в приложениях Microsoft Office.
Для нашей работы мы будем использовать следующий набор утилит:
- oleid — для анализа OLE-файлов;
- olevba — для извлечения и анализа исходного кода макросов VBA из документов MS Office (OLE и OpenXML);
- oledump — для анализа потоков данных OLE-файла;
- rtfdump — для анализа файлов формата RTF;
- rtfobj — для извлечения встроенных объектов из файлов RTF;
- scdbg — для анализа шелл‑кода, утилита построена на основе библиотеки для эмуляции libemu.
info
Исследование мы будем проводить в лаборатории для анализа вредоносов, подробно описанной в статье «Код под надзором. Создаем виртуальную лабораторию для анализа малвари».
Все необходимые для анализа вредоносных документов утилиты находятся в каталоге FLARE\
виртуальной машины под управлением Windows 10. А описание общего подхода к этому самому анализу можно найти в памятке Ленни Зельцера.
Итак, приступим к изучению файлов с сайта CyberDefenders. Я не буду приводить ответы на вопросы из заданий — повторив все описанные ниже эксперименты, ты сможешь найти их сам.
Obfuscated
Загрузим с сайта архив с заданием. Первым делом посчитаем хеш MD5 содержащегося в архиве файла (в результате получится значение 49b367ac261a722a7c2bbbc328c32545
) и проверим его на VirusTotal.
Теперь получим информацию о структуре вредоносного документа. Для этого воспользуемся утилитой oleid.
oleid 49b367ac261a722a7c2bbbc328c32545
Тулза определила, что это документ Microsoft Office Word и в нем есть VBA-макрос. Его нам предстоит вытащить наружу. Для начала воспользуемся утилитой oledump и посмотрим, в каком потоке OLE содержится VBA-макрос.
oledump 49b367ac261a722a7c2bbbc328c32545
Макрос спрятался в восьмом потоке данных. Выгрузим его при помощи инструмента olevba с ключом -a
.
olevba -a 49b367ac261a722a7c2bbbc328c32545
В потоке Macros/
сосредоточена основная функциональность вредоносного скрипта. Из вывода утилиты видно, какие функции он использует. Давай извлечем этот скрипт и начнем исследовать код.
olevba -c 49b367ac261a722a7c2bbbc328c32545
Функция AutoOpen(
запускает выполнение скрипта, когда документ открывают. Чтобы усложнить нам работу, злоумышленники обфусцировали код VBA-макроса: имена переменных представлены в формате Base64. Мы будем вручную деобфусцировать код и разберем его функциональность.
info
Для деобфускации VBA-макроса можно воспользоваться утилитой ViperMonkey, которая эмулирует выполнение сценария, но сегодня проведем ручной анализ.
Начнем с функции AutoOpen(
.
На картинке ты видишь выделенный фрагмент кода, содержащий несколько очень интересных функций. Функция FileLen(
получает размер документа Word и записывает его в переменную N18Eoi6OG6T2rNoVl41W
. Функция Open(
открывает документ в бинарном формате, затем записывает его содержимое в переменную E2kvpmR17SI
и преобразует считанные строки в кодировку Unicode.
Во втором выделенном блоке с использованием объекта vbscript.
выполняется поиск такой строки в открытом файле:
MxOH8pcrlepD3SRfF5ffVTy86Xe41L2qLnqTd5d5R7Iq87mWGES55fswgG84hIRdX74 dlb1SiFOkR1Hh
В переменной Y5t4Ul7o385qK4YDhr
хранится указатель на первый символ найденной строки в исходном документе.
Обфусцированный вредоносный код расположен после обнаруженной нами строки, его размер составляет 16 827 байт.
Из файла считывается информация начиная с байта 0x503c
, далее декодируется по алгоритму, который мы разберем ниже, и сохраняется в файл %appdata%\
. Затем с помощью WScript.
выполняется JS-скрипт maintools.
с параметром EzZETcSXyKAdF_e5I2i1
.
Давай разберем алгоритм декодирования и напишем небольшую программу на Python для получения исходного JS-скрипта.
Для удобства чтения кода я переименовал переменные. Алгоритм декодирования очень прост. С каждым байтом выполняется операция XOR
(исключающее «или») с ключом, который хранится в переменной KEY
. После каждого преобразования байта изменяется и сам ключ.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»