
Привет, Хабр! На связи команда UserGate uFactor. У нас — новое исследование: в этом материале продолжим тему предыдущей статьи, где мы рассматривали вредоносные скрипты на языке AutoIt. В этот раз на примере зараженного документа Microsoft Office разберем старую, но до сих пор актуальную уязвимость CVE-2017-11882, связанную с работой компонента Microsoft Equation Editor (EQNEDT32.EXE).
Для эксплуатации уязвимости CVE-2017-11882 в документах Word злоумышленники обычно используют следующие техники:
переименование расширения RTF-документа, содержащего эксплойт, — с .rtf на .doc;
загрузку из интернета RTF-документа, содержащего эксплойт, при помощи метода для загрузки шаблонов.
Мы же рассмотрим документ Excel — XML-файл, сжатый в ZIP-архив. Расширения, характерные для таких документов Excel: .xlsx, .xlsm, .xlam. Также документы Excel могут быть бинарными, их формат — Compound Binary File Format. К бинарным форматам относятся Excel 97-2003, Excel 5.0/95.
На рисунке 1 представлен фрагмент содержимого исследуемого вредоносного образца в hex-редакторе. Сигнатура 50 4B, выделенная красным, как раз указывает на то, что это формат архивации файлов ZIP.

Таким образом, для просмотра содержимого документа Excel достаточно переименовать расширение на .zip и извлечь файлы с помощью разархиватора.
Для первичного анализа воспользуемся утилитой OfficeMalScanner. Команда Inflate показывает содержимое документа и сохраняет файлы в директорию C:\Users\<username>\AppData\Local\Temp\DecompressedMsOfficeDocument.


На рисунке 3 видно, что в нашем образце RFQPC25-1301.xlsx есть подозрительный файл Q5.8ZIBJ. Хотя утилита OfficeMalScanner сохранила содержимое исследуемого файла, для примера мы продемонстрируем извлечение с помощью другого способа, уже упомянутого выше. Сохраним файл RFQPC25-1301.xlsx и изменим его расширение на .zip, чтобы просмотреть вложенное содержимое, а именно файл Q5.8ZIBJ.


Для просмотра содержимого файла Q5.8ZIBJ используем hex-редактор.

На рисунке 6 выделена сигнатура D0 CF 11 E0 A1 B1 1A E1 (Compound Binary File Format), которую мы упоминали ранее. Именно файл Q5.8ZIBJ эксплуатирует уязвимость CVE-2017-11882, связанную с работой Microsoft Equation Editor (EQNEDT32.EXE).
Поскольку уязвимость CVE-2017-11882 связана с переполнением буфера стека и позволяет выполнить произвольный код (шеллкод), нам необходимо найти его точку входа (адрес) и понять, какие команды он будет выполнять. Вернемся к утилите OfficeMalScanner и проведем поиск точки входа, а также попробуем применить перебор ключей XOR для расшифровки основного тела шеллкода (классический шеллкод состоит из «головы» и «тела»; одна из функций «головы» — расшифровка «тела»).

Утилита на рисунке 7 указывает на то, что есть две точки входа в шеллкод (выделены красным). Перебор ключей не дал результатов — скорее всего, ключ и шифрование не самые простые.
Для отладки шеллкода используем примитивную самописную программу («подсобку»), которая открывает файл download.dat, считывает его и переходит посредством call на начальный адрес считанных байт. Переименовав файл Q5.8ZIBJ в download.dat, запускаем в отладчике подсобку. Чтобы попасть на точку входа в шеллкод, необходимо перед переходом пересчитать адрес. Прибавим к начальному адресу адрес, полученный при помощи OfficeMalScanner (рис. 7, адреса ee554, ee593). Стоит отметить, что результат выполнения и данные одинаковы вне зависимости от того, какой адрес мы выберем.



После анализа кода становится понятно, что к основной части применен XOR, ключ которого рассчитывается через сложение и умножение для 4 байт и сдвигается на 4 байта.




Для более быстрой расшифровки поставим точку останова на финальную команду перед исполнением и запустим код в отладчике. На рисунке 15 зеленым цветом выделены следующие строки расшифрованного шеллкода:
LoadLibraryW
GetProcAddress
ExpandEnvironmentStringsW
%APPDATA%\word.exe
UrlMonURLDownloadToFileW
http://combo.s3.eu-north-1[.]amazonaws.com/jekonbary2.1.exe
WideCharToMultiByte
WinExec
ExitProcess

Шеллкод работает следующим образом:
Получает адреса WinAPI-функций GetProcAddress и LoadLibraryW.
При помощи этих функций получает адреса других необходимых API.
Выполняет функцию ExpandEnvironmentStringsW. Передав ей аргумент %APPDATA%\word.exe, получает значение %APPDATA%\Roaming\word.exe.
При помощи UrlMonURLDownloadToFileW скачивает основной модуль, расположенный по адресу http://combo.s3.eu-north-1[.]amazonaws.com/jekonbary2.1.exe, и сохраняет его под именем word.exe.
Запускает скачанный модуль с помощью WinExec.
Основной модуль — это скомпилированный скрипт на AutoIt, схожий с тем, что мы разобрали в предыдущей статье (в ней мы рассказали о языке AutoIt и о том, как в кибератаках используются написанные на нем скрипты).

Файл word.exe — это скомпилированный скриптовый сценарий AutoIt. После извлечения скрипта мы установили следующее:
В коде содержится шеллкод, обфусцированный путем добавления в строку 561840652.
В теле скрипта размещена основная бинарная нагрузка, которая расшифровывается при помощи шеллкода с использованием ключа XOR 9A6VBEF324RR3VT3Z8.
Сам бинарный файл копируется в директорию C:\Users\<username>\AppData\Local\Temp с именем Mazatl, после этого шеллкод запускает легитимные процессы и переписывает секцию .code вредоносным расшифрованным кодом.
Заключение
Как и в одном из наших предыдущих материалов, реверс-инжиниринг вредоносного файла помог нам выявить техники, применяемые злоумышленниками при внедрении ВПО. В исследовании также оказалась полезной утилита OfficeMalScanner, а в качестве промежуточного звена для отладки шеллкода в OllyDbg мы использовали простую самописную программу, написанную на ассемблере. Основной алгоритм шеллкода был зашифрован XOR-ключом. Этот шеллкод загружал API-функции, скачивал скомпилированный AutoIt-скрипт и запускал его через WinExec.
IoC
RFQPC25-1301.xlsx
e15cba1287fd9a0d755685df0c8d24e2
39be11722c3417a9e330dd265cae7d30c2b23c32
46bcde824114484f405e35827ddd2a1520ba1349644cd0bd7d9bead3f3d83730
Q5.8zIBj
b4069cb4680a4afa9b731cb00cabc2de
d23c049f96065cd80179637785bf058a3aee94c0
ffafee394e6c8ffe1f2ae22814e28f62da7d07fbf1477055e6004c3336825118
Payload
http://combo.s3.eu-north-1[.]amazonaws.com/jekonbary2.1.exe
%APPDATA%\Roaming\word.exe
47b4b12ff498d2620dd824b86ba20e98
c563ff933dd402ed4734c5f2030bf0bc8afd46c6
4af879a5ba55d1f85555bef2423b273f87df5db31d540934572ab4439e062545
script.txt
465549239ceee16f7cce3823d661df4e
6c29e5616bee2dd6d8426afcd7bbc5c2fd2e27f6
44f29491f7360b935ab5bf9dfabdde610cc54ef4a2566b8950aec8fc3291b271
%APPDATA%\ Local\Temp\Mazatl
2b979fcf1a407db7c664252d69691d01
e431c249c5c010fab93c4f7ddb2a630c6fc0aabb
064cd6ba5fafefaaf52e9c85b01bcff5a13a5070898b05a6e826d5a450d04e7d
DecryptMazatl
4dcf2f4ef3be73303a072b16151231df
c7551b3eac204282420644de13977c6584a48849
2d3926520c8990c3709e079198e2c54006cea8f965f4fe07670d597fee42779f