Как злоумышленники маскируют вредоносные документы: техники обфускации, социальная инженерия и способы защиты

Вредоносные документы остаются одним из самых надёжных векторов начального доступа в корпоративные сети и на личные устройства. Форматы, которые пользователи открывают ежедневно — .docx, .xlsx, .pdf, .rtf — имеют сложную внутреннюю структуру, поддерживают активное содержимое (макросы, скрипты, встроенные объекты) и успешно проходят через почтовые шлюзы и антивирусы, если атакующий грамотно их подготовил. Понимание того, как именно злоумышленники маскируют полезную нагрузку, позволяет не полагаться только на сигнатуры защитных средств, а распознавать подозрительные признаки уже на этапе получения файла.

Почему документы — удобный контейнер для атак

Любой современный формат документа — это не просто текст с форматированием, а контейнер, способный хранить исполняемый код, ссылки на внешние ресурсы, встроенные объекты (OLE) и метаданные. Microsoft Office (OOXML), PDF, RTF и ODF позволяют встраивать:

  • макросы на VBA / JavaScript / Python (в LibreOffice);
  • ActiveX-объекты и COM-компоненты;
  • внешние ссылки (DDE, OLE, гиперссылки, связанные изображения);
  • эксплойты для уязвимостей парсеров формата (CVE в Equation Editor, Font Parsing, PDF-рендерерах);
  • скрытые потоки данных (Alternate Data Streams в ZIP-контейнере OOXML);
  • полиглотные структуры — файлы, валидные сразу для нескольких парсеров.

При этом пользователь привык доверять документам: они выглядят как рабочие материалы, счета, договоры, резюме. Социальная инженерия делает остальное — заставляет включить макросы, нажать «Включить редактирование», открыть вложение из «важного» письма.

Основные техники маскировки полезной нагрузки

1. Обфускация макросов и скриптов

Классический вектор — VBA-макрос в .docm, .xlsm, .pptm. Чтобы обойти статический анализ антивирусов и YARA-правила, атакующие применяют:

  • Строковую обфускацию: разбивку строк на части, конкатенацию через Chr(), ChrW(), Base64, XOR, ROT13, пользовательские функции-декодеры.
  • Мёртвый код и ловушки для анализатора: бессмысленные циклы, условия, которые никогда не выполняются, вызов несуществующих API — чтобы запутать эмулятор.
  • Динамическое разрешение API: вместо прямого вызова CreateObject(«WScript.Shell») — получение объектов через GetObject, Application.GetObject, реестр, WMI.
  • Хранение кода вне модулей VBA: в свойствах документа (CustomDocumentProperties), в скрытых листах Excel, в текстовых полях формы, в комментариях, в XML-части vbaProject.bin в виде сжатых/зашифрованных блобов.
  • Использование AutoOpen, Document_Open, Workbook_Open, AutoClose и менее известных триггеров: события форм, Window_Activate, SheetChange.

Пример признака: в редакторе VBA (Alt+F11) модули пусты или содержат лишь обфускарованные строки, а реальный код загружается из свойств документа при открытии.

2. Эксплойты «нулевого дня» и известных CVE в парсерах

Файл может не содержать макросов вообще. Уязвимость срабатывает при парсинге самого формата:

  • Equation Editor (CVE-2017-11882, CVE-2018-0802): встроенный объект EQNEDT32.EXE парсит вредоносный MTEF-блок в OLE-объекте.
  • Уязвимости шрифтов (CVE-2019-0938, CVE-2020-0938): специально созданный встроенный шрифт (Embedded OpenType) вызывает переполнение в atmfd.dll / fontsub.dll.
  • Парсеры RTF (CVE-2017-0199, CVE-2017-8759): манипуляция объектами objdata, objupdate, \objsect для загрузки внешнего HTA/HTML через Moniker.
  • PDF — уязвимости в JavaScript-движке, парсере JBIG2, JPEG2000, шрифтах: CVE-2021-21017, CVE-2023-26369 и др.

Маскировка здесь — в структуре файла: вредоносный объект выглядит как легальный встроенный компонент (формула, шрифт, картинка), но содержит специфические байтовые последовательности, запускающие код в контексте уязвимого парсера.

3. Полиглот-файлы (Polyglots)

Файл, который одновременно валиден для нескольких парсеров. Классический пример — HTA/HTML + DOCX или PDF + ZIP.

  • Файл имеет расширение .doc или .docx, но начинается с корректного HTML/HTA-заголовка (,