Макросы в Microsoft Office — это скрипты на языке VBA (Visual Basic for Applications), созданные для автоматизации рутинных задач: форматирования документов, расчётов, генерации отчётов. Та же гибкость делает их удобным инструментом для злоумышленников: макрос получает полноценный доступ к объектам приложения, файловой системе, реестру, сети и может запускать произвольный код на компьютере жертвы. Понимание того, как именно происходит атака, позволяет не полагаться только на антивирус, а распознавать подозрительные файлы и правильно настраивать политики безопасности.
- Почему макросы остаются популярным вектором атаки
- Типичная цепочка атаки через макрос
- Частые техники обхода защиты и обфускации
- Как Microsoft и антивирусы пытаются блокировать атаки
- Практические признаки подозрительного документа
- Как безопасно проверить подозрительный файл
- Настройка защиты на уровне организации Для корпоративной среды защита «по умолчанию» недостаточна. Рекомендуемый базовый набор политик (Group Policy / Intune / Cloud Policy): Блокировка макросов в файлах из интернета (политика Block macros from running in Office files from the Internet — Enabled). Это единственный способ гарантированно предотвратить выполнение, даже если пользователь нажмёт «Включить содержимое». Отключение VBA там, где оно не нужно. Если отдел бухгалтерии не использует макросы — запретите их через Disable VBA for Office applications для соответствующих ОU/групп. Для отделов, где макросы нужны (финмоделирование, автоматизация) — выделите отдельную политику с включённым VBA, но обязательным подписыванием макросов. Требование цифровой подписи макросов. Политика Require macro signature / Trust access to the VBA project object model = Disabled. Только макросы, подписанные доверенным сертификатом (корпоративным CA или публичным EV-сертификатом), будут выполняться без предупреждений. Неподписанные — блокируются или требуют явного подтверждения админом. Настройка Trusted Locations (Доверенные папки). Только конкретные сетевые папки / SharePoint-библиотеки, откуда разрешены макросы. Не добавляйте корень диска C:, профиль пользователя, папку Downloads. Включение Application Guard для недоверенных файлов (если лицензии позволяют). Аудит и алерты. Включите логирование событий Office (Event ID 3000-3009 в Microsoft-Windows-Office/Operational) и пересылайте в SIEM. События «Macro execution blocked», «Protected View exited», «Macro signature validation failed» — повод для расследования. Обучение сотрудников. Регулярные фишинг-тренировки с реальными примерами документов, требующих «Включить макросы». Люди должны понимать: легальный внутренний документ никогда не просит включить макросы для просмотра текста.
- Что делать, если макрос всё-таки выполнился
- Частые ошибки, которые повышают риск
- Сценарии: как действовать в типичных ситуациях
- Ситуация 1: Пришло письмо от «бухгалтерии» со счётом в .xlsm
- Ситуация 2: Коллега скинул «шаблон с макросами» для отчёта через мессенджер
- Ситуация 3: Пользователь жалуется, что «Excel просит включить макросы, а я не умею»
- Ситуация 4: В организации используются легальные сложные макросные решения (ценники, закупки, расчёт зарплат)
- Альтернативы макросам: как снизить зависимость
- Чек-лист для самопроверки перед открытием файла
- Резюме: главное, что нужно запомнить
Почему макросы остаются популярным вектором атаки
Несмотря на годы борьбы с макровирусами, этот вектор сохраняет актуальность по трём причинам:
- Легитимность и доверие. Документы Office — стандарт де-факто в бизнес-коммуникациях. Пользователи привыкли открывать вложения из писем с темами «Счёт», «Договор», «Акт сверки» без лишних сомнений.
- Мощный API без дополнительных зависимостей. VBA имеет прямой доступ к WMI, PowerShell, CMD, WinHTTP, Windows Script Host, COM-объектам. Злоумышленнику не нужно тащить в систему сторонние утилиты — всё необходимое уже есть в ОС.
- Простота обфускации. Код макроса хранится внутри документа в сжатом и часто зашифрованном виде. Статические анализаторы и антивирусы сложнее доходят до сути логики, особенно если используются динамическая генерация строк, кодирование Base64, XOR, разбиение кода на множественные модули и формы.
Типичная цепочка атаки через макрос
Атака редко ограничивается самим макросом. Обычно это многостадийный процесс:
- Доставка (Initial Access). Файл приходит по почте (фишинг), через заражённый файловый обменник, подменённый легаitimate-ресурс (watering hole) или на флешке. Расширения: .docm, .xlsm, .pptm, реже — старые .doc, .xls с макросами в формате OLE.
- Обход Protected View. Файлы из интернета или вложений открываются в «Защищённом представлении» (Protected View) — песочнице с отключёнными макросами. Задача атакующего — заставить пользователя нажать «Включить редактирование» / «Включить содержимое». Для этого используются социальные уловки: фальшивые сообщения «Для просмотра включите макросы», имитация ошибки кодировки, логотипы Microsoft, предупреждения о «повреждённом файле».
- Исполнение кода (Execution). После нажатия кнопки макрос запускается. Часто используется событие AutoOpen, Document_Open, Workbook_Open или обработчики событий форм (UserForm_Initialize).
- Этап загрузки (Stager / Downloader). Макрос редко содержит полный вредонос. Обычно он скачивает следующую стадию: PowerShell-скрипт, DLL, EXE, shellcode. Загрузка идёт через WinHttp.WinHttpRequest.5.1, MSXML2.XMLHTTP, URLDownloadToFile, вызов powershell.exe -EncodedCommand … или certutil.exe -decode.
- Установка и пост-эксплуатация. Загруженный полезный груз устанавливает персистентность (запуск через реестр, задачи планировщика, WMI, ярлыки), собирает данные, движется по сети, разворачивает рен섬вэр, стилер, RAT или криптомайнер.
Частые техники обхода защиты и обфускации
Понимание этих приёмов помогает распознать вредоносный код при ручном анализе или настроить правила обнаружения:
- Строковая обфускация. Вместо понятных строк («powershell», «download», «http://») используются конкатенация (Chr(112) & Chr(111) …), массивы байт, Base64, XOR с ключом, хранящимся в ячейке листа или свойстве документа.
- Динамическое создание кода. Макрос генерирует новый VBA-модуль во время выполнения через VBProject.VBComponents.Add и выполняет его — статический анализ не видит итоговый код.
- Использование свойств документа. Полезная нагрузка или URL спрятаны в BuiltInDocumentProperties / CustomDocumentProperties, в скрытых листах Excel, в текстовых полях (TextBox) на листе, в альтернативном тексте фигур.
- Living-off-the-land бинарники (LOLBins). Вместо powershell.exe вызывают mshta.exe, wscript.exe, cscript.exe, regsvr32.exe, rundll32.exe, certutil.exe, bitsadmin.exe — они подписаны Microsoft и часто в белых списках.
- AMSI Bypass. Попытки отключить Antimalware Scan Interface через патч памяти amsi.dll (функция AmsiScanBuffer), установку переменной окружения AMSI_RESULT или использование .NET-рефлексии.
- Многостадийность внутри документа. Первый макрос безвреден — он только проверяет среду (виртуальная машина, песочница, наличие антивируса, язык ОС, время работы системы). Если проверки пройдены — скачивает и запускает второй макрос или скрипт.
- Эксплойты уязвимостей Equation Editor / OLE. Старые форматы .doc могут содержать эксплойты CVE-2017-11882, CVE-2018-0802 и др., запускающие код без включения макросов. Важно: это не макровирусы, а уязвимости парсера, но вектор доставки — тот же документ.
Как Microsoft и антивирусы пытаются блокировать атаки
За последние годы защита существенно усилилась. Главные механизмы, которые нужно знать, чтобы не считать их «магией» и не отключать ради удобства:
- Блокировка макросов из интернета по умолчанию (с 2022 года). В актуальных версиях Office (Microsoft 365, Office 2021, LTSC 2024) макросы в файлах, скачанных из интернета (помеченных Mark-of-the-Web — MotW), блокируются жестко. Пользователь видит жёлтую полоску с текстом «Макросы заблокированы», кнопка «Включить содержимое» неактивна. Снять метку MotW можно только вручную через свойства файла («Разблокировать») или через PowerShell (Unblock-File), что требует осознанного действия.
- Protected View (Защищённое представление). Изолированный процесс с низкими правами, без доступа к сети, файловой системе, реестру. Макросы там не выполняются. Выход из него — осознанный клик пользователя.
- Application Guard (Defender Application Guard). Открытие недоверенных файлов в изолированном контейнере Hyper-V (требует Enterprise/Education и настройки). Макрос выполняется внутри контейнера, не затрагивая хост.
- AMSI (Antimalware Scan Interface). Интерфейс, через который Office передаёт скрипты (VBA, PowerShell, JScript, VBS) в установленный антивирус/EDR до выполнения. Современные защитники видят обфусцированный код после деобфускации в памяти.
- VBA Macro Blocking Policy (Group Policy / Cloud Policy). Администраторы могут полностью запретить выполнение VBA в Word/Excel/PowerPoint для всех или для конкретных папок/сетевых путей. Политика: Disable VBA for Office applications / Block macros from running in Office files from the Internet.
- Office Macro Runtime / Script Lab — не установлены по умолчанию. Устаревшие компоненты вроде mscomctl.ocx, mscomct2.ocx часто используются эксплойтами — их отсутствие снижает поверхность атаки.
Практические признаки подозрительного документа
Не нужно быть аналитиком вредоносного ПО, чтобы заметить «красные флаги». Достаточно привыкнуть проверять входящие файлы по этому чек-листу:
- Расширение с «m» на конце (.docm, .xlsm, .pptm, .dotm, .xltm) — это формат с поддержкой макросов. Обычные рабочие документы в современном Office почти всегда .docx, .xlsx, .pptx (макросы в них сохранять нельзя). Если вам прислали счёт в .xlsm — повод насторожиться.
- Файл из интернета / почты открывается в Protected View. Это нормально. Если документ требует «Включить редактирование» для простого просмотра текста/таблицы — подозрительно. Легальные шаблоны с макросами обычно не требуют этого для чтения.
- Навязчивые просьбы включить макросы. Текст в теле документа: «Нажмите «Включить содержимое» для корректного отображения», «Ошибка кодировки, включите макросы», «Документ защищён, для просмотра разрешите скрипты». Легальные файлы так не делают.
- Скрытые листы, очень мелкий шрифт, белый текст на белом фоне. В Excel злоумышленники прячут полезную нагрузку на листах с Visible = xlSheetVeryHidden (невидимы через UI, только через VBA).
- Множественные модули VBA с бессмысленными именами (Module1, Module2, Class1, UserForm1) и отсутствие понятных комментариев. Легальные макросы обычно имеют говорящие имена: modExportToPDF, clsInvoiceCalculator.
- Ссылки на системные библиотеки в References (Tools → References): Microsoft Scripting Runtime (FileSystemObject), Microsoft WinHTTP Services, Microsoft XML, WMI Scripting Library. Их наличие не гарантирует вредоносность, но резко повышает риск — макрос умеет работать с файлами, сетью, системой.
Как безопасно проверить подозрительный файл
Если документ вызывает сомнения, не открывайте его на рабочей машине. Порядок действий:
- Проверка расширения и MotW. Правый клик → Свойства → вкладка «Общие» → внизу галочка «Разблокировать». Если она есть — файл скачан из интернета. Не снимайте галочку до анализа.
- Открытие в «Защищённом представлении» (Read-Only). В настройках Office (Файл → Параметры → Центр управления безопасностью → Защищённое представление) включите все три пункта. Откройте файл — макросы не запустятся. Посмотрите содержимое: есть ли реальные данные или только картинка с просьбой включить макросы.
- Просмотр кода макросов без выполнения. В Protected View вкладка «Разработчик» недоступна. Сохраните копию файла (Файл → Сохранить как) на локальный диск, откройте копию, нажмите Alt+F11 — откроется редактор VBA. Проверьте модули (ThisDocument, Sheet1, Module1…), References, свойства документа. Не нажимайте F5 (Run).
- Онлайн-песочницы. Загрузите файл в Any.run, Hybrid Analysis, Joe Sandbox, CAPE, VirusTotal (Behavior таб). Они покажут сетевые соединения, запущенные процессы, записанные файлы, ключи реестра. Не загружайте конфиденциальные внутренние документы в публичные песочницы.
- Статический анализ инструментами. olevba (из пакета oletools) извлекает и деобфусцирует VBA-код, показывает подозрительные ключевые слова (AutoOpen, Shell, WinHttp, PowerShell, Base64, WScript.Shell). oleid показывает структуру OLE, наличие флеш-объектов, эксплойтов. msoffcrypto-tool проверяет шифрование файла.
- Проверка хешей и IOC. SHA256 файла — в VirusTotal, MalwareBazaar, ThreatFox. Если файл известен — вы увидите детекты и описание поведения.
Настройка защиты на уровне организации
Для корпоративной среды защита «по умолчанию» недостаточна. Рекомендуемый базовый набор политик (Group Policy / Intune / Cloud Policy):
- Блокировка макросов в файлах из интернета (политика Block macros from running in Office files from the Internet — Enabled). Это единственный способ гарантированно предотвратить выполнение, даже если пользователь нажмёт «Включить содержимое».
- Отключение VBA там, где оно не нужно. Если отдел бухгалтерии не использует макросы — запретите их через Disable VBA for Office applications для соответствующих ОU/групп. Для отделов, где макросы нужны (финмоделирование, автоматизация) — выделите отдельную политику с включённым VBA, но обязательным подписыванием макросов.
- Требование цифровой подписи макросов. Политика Require macro signature / Trust access to the VBA project object model = Disabled. Только макросы, подписанные доверенным сертификатом (корпоративным CA или публичным EV-сертификатом), будут выполняться без предупреждений. Неподписанные — блокируются или требуют явного подтверждения админом.
- Настройка Trusted Locations (Доверенные папки). Только конкретные сетевые папки / SharePoint-библиотеки, откуда разрешены макросы. Не добавляйте корень диска C:, профиль пользователя, папку Downloads.
- Включение Application Guard для недоверенных файлов (если лицензии позволяют).
- Аудит и алерты. Включите логирование событий Office (Event ID 3000-3009 в Microsoft-Windows-Office/Operational) и пересылайте в SIEM. События «Macro execution blocked», «Protected View exited», «Macro signature validation failed» — повод для расследования.
- Обучение сотрудников. Регулярные фишинг-тренировки с реальными примерами документов, требующих «Включить макросы». Люди должны понимать: легальный внутренний документ никогда не просит включить макросы для просмотра текста.
Что делать, если макрос всё-таки выполнился
Если пользователь открыл файл, включил макросы, и вы подозреваете компрометацию:
- Изолируйте хост от сети (отключите кабель/вай-фай, блокируйте на коммутаторе/файрволе) — остановите возможный C2-трафик и латеральное движение.
- Соберите артефакты до перезагрузки: дамп памяти (WinPMEM, DumpIt), список процессов и сетевых соединений (netstat -ano, Get-Process), Prefetch, Amcache, Shimcache, журналы PowerShell (Operational, 4104), журналы Office, временные файлы (%TEMP%, %APPDATA%\Microsoft\Office\Recent).
- Проверьте персистентность: ключи Run/RunOnce в реестре (HKCU/HKLM), задачи планировщика (schtasks /query /fo LIST /v), WMI-подписки (Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding), ярлыки в Startup, службы, драйверы.
- Смените пароли для учётных записей, которые использовались на этой машине (особенно если был запущен стилер или keylogger).
- Проведите полную проверку EDR/антивирусом в офлайн-режиме (Windows Defender Offline или загрузочная флешка вендора).
- Проанализируйте документ-вектор (как описано выше), чтобы понять, какой полезный груз был загружен, и проверить остальные хосты на IOC (IP, домены, хеши, имена файлов, ключи реестра).
- Отчётность. Если это корпоративный инцидент — оформите по процессу IR (Incident Response), уведомите заинтересованные стороны, при необходимости — регулятор (152-ФЗ, GDPR, PCI DSS и т.д.).
Частые ошибки, которые повышают риск
| Ошибка | Почему это опасно | Правильный подход |
|---|---|---|
| Отключение Protected View «чтобы не мешало» | Файлы из интернета открываются с полными правами сразу, макросы запускаются без лишних кликов | Оставьте Protected View включённым для всех трёх источников (файлы из интернета, вложения, небезопасные папки) |
| Добавление папки Downloads или корня диска в Trusted Locations | Любой скачанный файл получает право выполнять макросы без предупреждений | Доверенные папки — только контролируемые сетевые ресурсы с проверкой контента |
| Разрешение выполнения неподписанных макросов для всех пользователей | Один клик на «Включить содержимое» — и код запускается | Требовать цифровую подпись, блокировать неподписанные через политику |
| Игнорирование метки Mark-of-the-Web (снятие галочки «Разблокировать» массово) | Снимается главный маркер происхождения файла, Office считает его локальным и доверенным | Не снимайте MotW без анализа. Используйте скрипты очистки только для проверенных внутренних файлов |
| Отсутствие обучения: пользователи не знают, как выглядит запрос на включение макросов | Социальная инженерия работает почти гарантированно | Регулярные тренировки с примерами: «Этот экран — ловушка, не нажимайте» |
Сценарии: как действовать в типичных ситуациях
Ситуация 1: Пришло письмо от «бухгалтерии» со счётом в .xlsm
Не открывайте сразу. Проверьте адрес отправителя (не отображаемое имя, а реальный SMTP-адрес), домен, SPF/DKIM/DMARC. Свяжитесь с бухгалтерией по известному каналу (внутренний чат, телефон). Если файл неожиданен — отправьте в ИБ/админов на проверку в песочнице. Откройте только в Protected View для оценки содержимого.
Ситуация 2: Коллега скинул «шаблон с макросами» для отчёта через мессенджер
Файл не из корпоративной библиотеки шаблонов / SharePoint. Сохраните, проверьте расширение (.xlsm). Откройте в Protected View. Посмотрите код (Alt+F11) — есть ли подозрительные вызовы (Shell, WinHttp, PowerShell, Base64). Если макрос просто форматирует таблицу — подпишите его корпоративным сертификатом и положите в доверенную библиотеку. Если код непонятный — не используйте, попросите коллегу выложить в официальное хранилище.
Ситуация 3: Пользователь жалуется, что «Excel просит включить макросы, а я не умею»
Это правильная реакция пользователя. Инструкция: «Не нажимайте «Включить содержимое». Закройте файл. Напишите в службу поддержки / перешлите письмо в ИБ». Поощряйте такую осторожность, а не ругайте за «неумение».
Ситуация 4: В организации используются легальные сложные макросные решения (ценники, закупки, расчёт зарплат)
Выделите их в отдельные доверенные папки (Trusted Locations) с ограниченным доступом на запись. Подпишите все модули корпоративным сертификатом. Настройте политику: только подписанные макросы выполняются. Запретите VBA для всех остальных пользователей. Ведите реестр утверждённых макросных решений с ответственными лицами и датами перепроверки.
Альтернативы макросам: как снизить зависимость
Лучшая защита — убрать вектор атаки там, где это возможно. Современные инструменты Office позволяют заменить большинство VBA-решений:
- Power Query (Get & Transform) — загрузка, очистка, объединение данных из баз, API, файлов без кода. Работает в .xlsx, макросы не нужны.
- Office Scripts (TypeScript/JavaScript) в Excel Online — облачные скрипты, выполняются в песочнице Microsoft 365, не имеют доступа к локальной файловой системе и реестру. Подходят для автоматизации в браузере и Power Automate.
- Power Automate / Logic Apps — процессыapproval, уведомления, перемещение файлов, вызовы API. Выносят логику из документа в управляемый облачный workflow.
- Python в Excel (Public Preview / Microsoft 365 Insiders) — выполнение Python-кода в изолированном контейнере Azure, результаты возвращаются на лист. Нет доступа к хосту.
- Надстройки (Office Add-ins) на платформе Office.js — веб-приложения в боковой панели/ленте, изолированные от документа, деплоятся через манифест, обновляются централизованно.
Постепенный переход на эти технологии снижает поверхность атаки и упрощает управление: не нужно подписывать макросы, контролировать Trusted Locations, бояться обфускации.
Чек-лист для самопроверки перед открытием файла
- Расширение файла: .docx/.xlsx/.pptx (без макросов) или .docm/.xlsm/.pptm (с макросами)?
- Файл из интернета / почты / флешки / сетевой папки?
- Есть ли галочка «Разблокировать» в свойствах файла (Mark-of-the-Web)?
- Открывается ли файл в Protected View (жёлтая полоска сверху)?
- Требует ли документ «Включить редактирование» / «Включить содержимое» для простого просмотра?
- Есть ли в тексте документа просьбы нажать кнопки включения макросов, предупреждения о кодировке, логотипы Microsoft?
- Если нужно посмотреть код: открыл копию в редакторе VBA (Alt+F11) — есть ли вызовы Shell, WinHttp, PowerShell, WScript, Base64, обфускация строк?
- Есть ли в References подозрительные библиотеки (Scripting Runtime, WinHTTP, MSXML, WMI)?
- Файл проверен в песочнице / VirusTotal / olevba?
- Соответствует ли файл корпоративной политике (подписан, лежит в Trusted Location, утверждён ИБ)?
Резюме: главное, что нужно запомнить
Макросы Office — мощный инструмент автоматизации, который десятилетиями эксплуатируется злоумышленниками. Современная защита работает по принципу «по умолчанию запрещено»: файлы из интернета открываются в песочнице, макросы в них блокируются, выполнение разрешено только для подписанного кода из доверенных мест. Ваша задача — не отключать эти защиты ради удобства, а выстроить процессы так, чтобы легальные макросные решения работали безопасно (подпись, доверенные папки, реестр решений), а всё остальное — блокировалось до анализа.
На практике это значит: не нажимайте «Включить содержимое» в файлах извне, не добавляйте Downloads в доверенные папки, требуйте цифровые подписи для внутренних макросов, обучайте коллег распознавать социальную инженерию («Нажмите, чтобы просмотреть»), и используйте современные альтернативы (Power Query, Office Scripts, Power Automate) там, где макросы не обязательны. Если макрос всё же выполнился подозрительно — изолируйте хост, собирайте артефакты, анализируйте вектор, меняйте пароли.
Материал носит информационный характер и не заменяет профессиональную оценку безопасности вашей инфраструктуры. При обнаружении инцидента или подозрении на компрометацию обратитесь к специалистам по информационной безопасности (SOC, CERT, ИБ-отдел) для проведения расследования и реагирования в соответствии с корпоративными политиками и нормативными требованиями.
