Как стать автором
Поиск
Написать публикацию
Обновить
83.71

Внедрение шеллкода в Microsoft Office, или как злоумышленники эксплуатируют старую уязвимость в новых атаках

Время на прочтение5 мин
Количество просмотров627

Привет, Хабр! На связи команда 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.


Рисунок 1. Фрагмент содержимого вредоносного файла
Рисунок 1. Фрагмент содержимого вредоносного файла

Таким образом, для просмотра содержимого документа Excel достаточно переименовать расширение на .zip и извлечь файлы с помощью разархиватора.

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

Рисунок 2. Набор утилит для анализа Microsoft Office
Рисунок 2. Набор утилит для анализа Microsoft Office
Рисунок 3. Получение сведений о содержимом вредоносного файла
Рисунок 3. Получение сведений о содержимом вредоносного файла

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

Рисунок 4. Оригинальный файл и копия с измененным расширением
Рисунок 4. Оригинальный файл и копия с измененным расширением
Рисунок 5. Файл Q5.8ZIBJ
Рисунок 5. Файл Q5.8ZIBJ

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

Рисунок 6. Содержимое файла Q5.8ZIBJ
Рисунок 6. Содержимое файла Q5.8ZIBJ

На рисунке 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. Результат выполнения команд scan и brute
Рисунок 7. Результат выполнения команд scan и brute

Утилита на рисунке 7 указывает на то, что есть две точки входа в шеллкод (выделены красным). Перебор ключей не дал результатов — скорее всего, ключ и шифрование не самые простые.

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

Рисунок 8. Пересчитываем точку входа в шеллкод
Рисунок 8. Пересчитываем точку входа в шеллкод
Рисунок 9. Заменяем значение в регистре EAX новым результатом
Рисунок 9. Заменяем значение в регистре EAX новым результатом
Рисунок 10. Точка входа в шеллкод
Рисунок 10. Точка входа в шеллкод

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

Рисунок 11. Операция сложения
Рисунок 11. Операция сложения
Рисунок 12. Операция умножения
Рисунок 12. Операция умножения
Рисунок 13. Финальный XOR
Рисунок 13. Финальный XOR
Рисунок 14. Смещение на 4 байта
Рисунок 14. Смещение на 4 байта

Для более быстрой расшифровки поставим точку останова на финальную команду перед исполнением и запустим код в отладчике. На рисунке 15 зеленым цветом выделены следующие строки расшифрованного шеллкода:

LoadLibraryW

GetProcAddress

ExpandEnvironmentStringsW

%APPDATA%\word.exe

UrlMonURLDownloadToFileW

http://combo.s3.eu-north-1[.]amazonaws.com/jekonbary2.1.exe

WideCharToMultiByte

WinExec

ExitProcess
Рисунок 15. Расшифрованный шеллкод
Рисунок 15. Расшифрованный шеллкод

Шеллкод работает следующим образом:

  1. Получает адреса WinAPI-функций GetProcAddress и LoadLibraryW.

  2. При помощи этих функций получает адреса других необходимых API.

  3. Выполняет функцию ExpandEnvironmentStringsW. Передав ей аргумент %APPDATA%\word.exe, получает значение %APPDATA%\Roaming\word.exe.

  4. При помощи UrlMonURLDownloadToFileW скачивает основной модуль, расположенный по адресу http://combo.s3.eu-north-1[.]amazonaws.com/jekonbary2.1.exe, и сохраняет его под именем word.exe.

  5. Запускает скачанный модуль с помощью WinExec.

Основной модуль — это скомпилированный скрипт на AutoIt, схожий с тем, что мы разобрали в предыдущей статье (в ней мы рассказали о языке AutoIt и о том, как в кибератаках используются написанные на нем скрипты).

Рисунок 16. Фрагмент скрипта, извлеченного из word.exe
Рисунок 16. Фрагмент скрипта, извлеченного из word.exe

Файл 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

Теги:
Хабы:
+8
Комментарии0

Публикации

Информация

Сайт
www.usergate.com
Дата регистрации
Дата основания
2001
Численность
201–500 человек
Местоположение
Россия