По данным IBM X-Force Threat Intelligence Index 2025, инфостилеры заняли первое место среди всех категорий малвари за 2024 год - 32% обнаруженных образцов. Основной канал доставки не изменился: фишинговое письмо с вложением .docm или .pdf. А по данным CrowdStrike Global Threat Report 2025, вредоносное использование GenAI для фишинга удвоилось за год - атакующие клепают убедительные приманки быстрее, чем аналитики успевают их разбирать. На практике это означает одно: подозрительных вложений на столе у аналитика всё больше, а времени на каждое - всё меньше. Дальше - пошаговый workflow анализа вредоносных документов: от определения типа угрозы до извлечения payload и C2-адресов.
Место вредоносного документа в цепочке атаки
Вредоносный документ - не самостоятельная угроза, а точка входа в инфраструктуру жертвы. Если остановиться на извлечении макроса и не дойти до реального импакта - считай, работу не сделал.
Типовая kill chain для document-based атаки по MITRE ATT&CK:
- Initial Access - доставка документа через Spearphishing Attachment (T1566.001). Жертва получает письмо с вложением.
- Execution- жертва открывает файл. Варианты срабатывания:
- Malicious File (T1204.002): пользователь включает макросы по запросу документа
- Visual Basic (T1059.005): VBA-макрос запускает вредоносный код
- Exploitation for Client Execution (T1203): эксплойт срабатывает без действий пользователя помимо открытия (например, CVE-2021-40444)
- PowerShell (T1059.001): макрос вызывает
powershell.exeдля загрузки следующего stage - Windows Command Shell (T1059.003): макрос использует
cmd.exeдля выполнения команд, загрузки файлов (T1105) или сокрытия данных в NTFS-потоках (T1564.004)
- Defense Evasion - payload скрыт внутри документа через Embedded Payloads (T1027.009) и требует Deobfuscation/Decode (T1140) при выполнении.
- Command and Control - загрузка основного импланта через Ingress Tool Transfer (T1105).
Бизнес-логика: злоумышленник использует документ как дешёвый масштабируемый вектор initial access. По данным Verizon DBIR 2025, 68% утечек включают человеческий фактор - социальная инженерия через документ эксплуатирует именно это. Конечная цель варьируется: от установки инфостилера для продажи credentials на маркетплейсах до развёртывания ransomware (медианный выкуп - $46,000 по данным того же отчёта).
Требования к окружению для maldoc анализа
Прежде чем трогать файл - подготовь рабочее место:- ОС: REMnux 7.0 (Ubuntu-based дистрибутив для reverse engineering, активно поддерживается) или любой Linux с Python 3.8+
- RAM: минимум 4 ГБ для VM анализа, рекомендуется 8 ГБ при параллельном запуске sandbox
- Сеть: строго изолированная - host-only или internal network в VirtualBox/VMware. NAT запрещён: вредоносный документ при детонации может обратиться к реальному C2, и тогда вместо анализа получишь инцидент
- oletools (версия 0.60.2, проект активно поддерживается на GitHub):
pip3 install oletools- даётolevba,oleid,olemeta,oleobj,mraptor - PDF-инструменты:
pdfidиpdf-parser(Didier Stevens, активно обновляются),peepdf - Дополнительно: CyberChef (GCHQ, offline-версия), YARA,
xorsearch, Wireshark
Статический анализ вредоносных Office файлов с oletools
Статический анализ вредоносных файлов - первый этап, и часто он даёт достаточно IoC без запуска образца. Для Office-документов основной рабочий инструмент - пакет oletools.
Форматы и что в них опасно
Перед разбором - ключевое различие форматов. Бинарные файлы (.doc, .xls) используют формат OLE2 (Structured Storage). OOXML-файлы (.docx, .xlsx) - ZIP-архивы. VBA-макросы в OOXML хранятся внутри вложенного OLE2-файла, который лежит в этом ZIP-архиве. Файлы с поддержкой макросов имеют расширение с суффиксомm: .docm, .xlsm, .pptm. Файлы .docx и .xlsx не могут содержать VBA-макросы по спецификации OOXML, но могут содержать Excel 4.0 (XLM) макросы в формулах листов - без OLE2-контейнера. RTF-файлы макросы не поддерживают, зато могут содержать вредоносные встроенные OLE-объекты и эксплойты парсера.Workflow: oleid, olemeta, mraptor, olevba
Последовательность действий на реальном образце:Шаг 1.
oleid suspicious.docm - определяет формат файла, наличие VBA-макросов, зашифрованных данных, XLM-макросов и внешних связей (External Relationships).Шаг 2.
olemeta suspicious.docm - извлекает метаданные: автор, дата создания и модификации, компания, путь к шаблону. Метаданные могут содержать артефакты атакующего - реальное имя пользователя, название организации, путь к файлу на машине разработчика. Бывает, что в поле Author торчит Иван Петров с путём C:\Users\ivan.petrov\Desktop\payload_builder\ - и это уже полдела. Время создания через oletimes уточняет хронологию.Шаг 3.
mraptor suspicious.docm - быстрый triage: проверяет наличие авто-триггеров (AutoOpen, AutoExec, Document_Open, Workbook_Open). Если находит автоматический запуск + запись в файловую систему + выполнение внешних команд - помечает файл как SUSPICIOUS. Удобно для сортировки больших объёмов образцов, когда на столе 50 вложений из утреннего фишинга.Шаг 4.
olevba -a suspicious.docm - центральный инструмент. Флаг -a запускает анализ и выводит таблицу подозрительных ключевых слов. Типичный вывод:
Код:
+----------+--------------------+---------------------------------------------+
| Type | Keyword | Description |
+----------+--------------------+---------------------------------------------+
| AutoExec | AutoOpen | Runs when the Word document is opened |
| Suspicious | Shell | May run an executable or system command |
| Suspicious | powershell | May run PowerShell commands |
| Suspicious | CreateObject | May create an OLE object |
| Suspicious | MSXML2.XMLHTTP | May download files from the Internet |
| IOC | http://evil[.]com | URL (potential C2 or download) |
+----------+--------------------+---------------------------------------------+
olevba -c suspicious.docm > macro_dump.vba. Это даёт сырой код для ручного разбора обфускации.На что обращать внимание в выводе olevba:
| Ключевое слово | Значение | Риск |
|---|---|---|
| AutoOpen / Document_Open | Автоматический запуск при открытии | Высокий |
| Shell / WScript.Shell | Выполнение команд ОС | Высокий |
| CreateObject | Создание COM-объектов (WMI, Shell, XMLHTTP) | Средний |
| microsoft.xmlhttp | Загрузка файлов из сети | Высокий |
| powershell / cmd.exe | Вызов системного интерпретатора | Высокий |
| Chr() / ChrW() | Посимвольная обфускация строк | Средний |
| Environ / Temp | Работа с файловой системой | Средний |
[Ограничения oletools: инструменты работают только с валидной OLE2/OOXML-структурой. Сильно повреждённые файлы или нестандартные контейнеры (например, password-protected ZIP с .doc внутри - типичный приём Qakbot) требуют предварительной распаковки вручную.]
Разбор вредоносных макросов VBA: обфускация и деобфускация
Малварь в макросах Office практически никогда не приходит в чистом виде. Разбор вредоносных макросов VBA - это на 80% деобфускация и на 20% трассировка потока выполнения. Оставшиеся 0% - надежда, что автор малвари забыл обфусцировать (бывает, но редко).Типовые техники обфускации
Chr() и ChrW() цепочки - каждый символ строки заменяется вызовом функции. Строка"powershell" превращается в Chr(112) & Chr(111) & Chr(119) & Chr(101) & Chr(114) & Chr(115) & Chr(104) & Chr(101) & Chr(108) & Chr(108). Деобфускация в CyberChef: рецепт From Charcode (Decimal).Конкатенация строк - разбиение на фрагменты:
"pow" & "er" & "she" & "ll". Часто комбинируется с Chr() для усложнения.Base64-кодирование - полезная нагрузка кодируется в Base64 и декодируется в рантайме. Характерный маркер в olevba: вызов
powershell -enc [base64_blob] или функция FromBase64String. Для ручного декодирования: echo "[base64]" | base64 -d в терминале. Нюанс, на котором спотыкаются: PowerShell -EncodedCommand использует UTF-16LE, поэтому для таких строк нужно printf '%s' '[base64]' | base64 -d | iconv -f UTF-16LE -t UTF-8.XOR-шифрование строк - макрос содержит XOR-функцию и массив зашифрованных байтов. Пример деобфускации:
Python:
data = b'\x82\x85\x8c\x8c\x8f' # зашифрованные байты из макроса
key = 0xED # ключ, найденный через xorsearch
result = bytes([b ^ key for b in data])
print(result.decode()) # "Hello"
xorsearch из набора REMnux, подставляя известные строки: http://, .exe, cmd.Хранение payload в свойствах документа - атакующий записывает вредоносный код в поле Author, Comments или Custom Properties, а макрос извлекает данные оттуда через
ActiveDocument.BuiltInDocumentProperties. Через olemeta это видно, но olevba не всегда связывает свойство с макросом - приходится копать вручную. Один из реальных кейсов: Base64-закодированный PowerShell прятался в поле Author, а макрос декодировал его и запускал через msbuild.exe - классический Living off the Land для обхода мониторинга powershell.exe.Переименование переменных - осмысленные имена заменяются на случайные:
Sub AutoOpen() вызывает xQ3kL(), которая вызывает pR9mN(). Тут помогает только ручной разбор - садишься и трассируешь поток выполнения, переименовывая функции по мере понимания.Когда статический разбор VBA недостаточен
Современные кампании используют многостадийную загрузку: первый stage - только downloader, который тянет второй stage из сети. Статический анализ покажет URL загрузки, но не финальный payload. В таких случаях без динамического анализа вредоносных документов в sandbox не обойтись.PDF эксплойт анализ: ключевые слова и извлечение скриптов
PDF-файлы - второй по распространённости вектор document-based атак. В отличие от Office, PDF не использует VBA. Атакующие работают через встроенный JavaScript, эксплойты парсера PDF-ридера и встроенные объекты.
Первичная оценка с pdfid
pdfid (Didier Stevens, активно поддерживается) сканирует PDF и подсчитывает опасные ключевые слова. Запускаем: pdfid suspicious.pdf.Список опасных ключевых слов (по данным Lenny Zeltser, Analyzing Malicious Documents Cheat Sheet):
| Ключевое слово | Что означает |
|---|---|
| /OpenAction, /AA | Автоматический запуск скрипта при открытии |
| /JavaScript, /JS | Наличие JavaScript-кода |
| /AcroForm, /XFA | Формы с потенциальным скриптом |
| /URI | Обращение к внешнему URL (фишинг) |
| /SubmitForm, /GoToR | Отправка данных на внешний сервер |
| /ObjStm | Скрытие объектов внутри потока объектов |
| /Launch | Запуск внешнего приложения |
Обфускация ключевых слов - распространённый приём:
/JavaScript записывается как /J#61vaScript (hex-кодирование символов). pdfid обрабатывает часть таких вариаций, но не все - держите это в голове.Глубокий разбор с pdf-parser
Еслиpdfid показал подозрительные ключевые слова, переходим к извлечению содержимого конкретных объектов: pdf-parser --search javascript suspicious.pdf находит все объекты с JavaScript. Получив номер объекта: pdf-parser --object 10 --filter --raw suspicious.pdf извлекает и декодирует его содержимое.Внутри JavaScript-кода PDF часто обнаруживается шеллкод или вызовы системных команд через
cmd.exe. Для анализа извлечённого JavaScript - SpiderMonkey или box-js в изолированной среде.[Ограничения: pdfid и pdf-parser работают только с валидной PDF-структурой. Сильно повреждённые или специально crafted файлы с нестандартными cross-reference таблицами могут потребовать ручного hex-анализа или альтернативного инструмента peepdf.]
CVE-2021-40444: анализ эксплойта без макросов в Office документе
CVE-2021-40444 - пример атаки, где вредоносный документ не содержит макросов. Стандартные проверки через olevba тут бесполезны. Эксплойт использует уязвимость в MSHTML для удалённого выполнения кода через вредоносный ActiveX-контроль.Верифицированные данные NVD:
- CVSS: 8.8 (HIGH)
- Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:L - сетевой вектор (AV:N), низкая сложность (AC:L), привилегии не нужны (PR:N), но требуется действие пользователя (UI:R) - открытие документа
- CWE: CWE-22 (Path Traversal) - классификация NVD; по анализу исследователей (NCC Group и др.), path traversal используется в цепочке эксплуатации на этапе размещения INF-файла из CAB-архива; корневая уязвимость - небезопасная обработка ActiveX-контента в MSHTML при парсинге OOXML-документа
- Затронутые продукты: все поддерживаемые версии Windows с уязвимым MSHTML (Windows 10, Windows Server, Windows 11 до сентябрьского патча 2021). NVD CPE явно перечисляет Windows 10 1507/1607/1809/1909/2004
- Включена в каталог CISA KEV (активно эксплуатируется в дикой среде), связана с ransomware-кампаниями
word/_rels/document.xml.rels, которая указывает на URL с вредоносным ActiveX-контролем. При открытии документа MSHTML-движок обрабатывает эту ссылку и загружает эксплойт. Пользователю не нужно включать макросы - уязвимость эксплуатирует парсинг HTML-контента (T1203). По данным Microsoft MSTIC и Mandiant, CVE-2021-40444 использовалась для доставки Cobalt Strike Beacon в целевых кампаниях - для срабатывания требовалось открытие документа (UI:R), но включение макросов не требовалось. Эксплойт обходил механизм контроля доступа к активному контенту, что концептуально близко к проблеме Broken Access Control (OWASP A01:2021).Обнаружение через oleobj
Для анализа:oleobj -r suspicious.docx - скрипт извлекает все external relationships и отображает подозрительные URL. Альтернативный ручной метод: распаковать OOXML как ZIP (unzip suspicious.docx -d extracted/), найти файл word/_rels/document.xml.rels и проверить атрибуты TargetMode="External" - любой внешний URL здесь подозрителен.[Применимо: DFIR-расследование инцидентов на непропатченных Windows 10 legacy-системах. На обновлённых системах эксплойт не работает.]
Извлечение payload из документов и переход к динамическому анализу
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
olevba принимает путь к файлу и даёт программный доступ к макросам, подозрительным ключевым словам и IoC. Это позволяет встроить maldoc triage в конвейер SOC без ручного запуска каждой команды.Ещё один момент, который редко обсуждают в русскоязычных материалах: атакующие всё чаще внедряют вредоносный контент не через макросы и не через эксплойты парсера, а через механизмы, которые по сути - injection-атаки на уровне документа. DDE-инъекция в Excel - классический пример: атакующий вставляет формулу вида
=cmd|'/C calc'!A0 в ячейку, и при открытии файла Excel запускает DDE-процесс (отключён по умолчанию с 2017 г. после Microsoft ADV170021). Отдельная техника - CSV/formula injection - использует =HYPERLINK, =WEBSERVICE для эксфильтрации данных. Оба паттерна концептуально близки к Injection (OWASP A03:2021): пользовательские данные попадают в интерпретатор без валидации и выполняются как команды.Microsoft заблокировала интернет-макросы в Office в середине 2022 года, и часть сообщества решила, что document-based malware мертва. Реальность сложнее. Атакующие мгновенно переключились на альтернативные контейнеры - OneNote-вложения с .hta-файлами, ISO/IMG-образы с LNK внутри, external relationships вроде CVE-2021-40444. Формат доставки меняется каждые несколько месяцев, но суть та же: заставить пользователя открыть файл и получить выполнение кода. При этом legacy-инфраструктуры - а в ряде корпоративных сред это реальность - до сих пор работают на версиях Office без блокировки макросов из интернета. Навык ручного разбора VBA через oletools - не устаревший скилл из 2019 года, а ежедневная необходимость для аналитика, который работает с реальной инфраструктурой, где Exchange 2016 и Office 2016 - стандарт, а не исключение. Автоматизация через sandbox помогает с объёмом, но когда дело доходит до написания YARA-правил, извлечения конфигурации C2 или атрибуции кампании - ручной разбор макроса с olevba, CyberChef и блокнотом ничем не заменить.
Попробуйте взять любой образец с MalwareBazaar (тег maldoc), прогнать через описанный workflow и дойти до C2-адреса. На курсе WAPT эту цепочку разбирают на реальных семплах с лабами - от фишингового вложения до извлечения конфигурации импланта.
Последнее редактирование модератором: