Статья MuddyWater Operation Olalampo: эмуляция атаки через вредоносные макросы Office — Red Team playbook

Сгоревший контроллер USB-накопителя крупным планом на антистатическом коврике. Рядом распечатка обфусцированного VBA-кода с гравировкой названия уязвимости на корпусе.


Три варианта вредоносных документов, кастомные загрузчики на Rust и C#, Telegram-бот вместо классического C2 - и всё это летит в одну энергетическую компанию волна за волной на протяжении месяцев. Operation Olalampo, приписываемая иранской APT-группе MuddyWater (по данным отчёта Group-IB), - не абстрактный threat intelligence для красивых слайдов. Для Red Team оператора это воспроизводимый чертёж adversary simulation. Ниже - анатомия кампании и пошаговый playbook эмуляции ключевых TTPs MuddyWater.

Бизнес-логика атаки: зачем эмулировать MuddyWater APT​

MuddyWater (Boggy Serpens, Mango Sandstorm, TA450) - группировка под управлением Министерства разведки и безопасности Ирана (MOIS), активная с 2017 года (MITRE ATT&CK G0069). Цели - госучреждения, телеком, энергетика, оборонка, нефтегаз на Ближнем Востоке, в Азии, Африке и Европе. По данным Unit 42, в начале 2025 года зафиксированы операционные пересечения MuddyWater с группой Lyceum (Evasive Serpens) - координация ресурсов внутри иранского разведсообщества.

Финальная цель - не деструкция и не вымогательство. MuddyWater занимается кибершпионажем: эксфильтрация переписки, документов, картографирование сетей. По данным MITRE ATT&CK, собранные данные передаются другим иранским threat actor'ам для дальнейших операций.

Зачем это Red Team оператору: если заказчик работает в энергетике, ICS-сегменте, морской логистике или госсекторе - MuddyWater входит в список реалистичных угроз. Эмуляция их TTPs на engagement'е проверяет, обнаружит ли Blue Team конкретную цепочку - от макросового документа до C2 через Telegram. Это adversary simulation с привязкой к живой группировке, а не абстрактный прогон сканера.

Operation Olalampo: разбор кампании MuddyWater​

1783894516513.webp

Дисклеймер: все детали кампании - имена payload (CHAR, GhostFetch, HTTP_VIP, GhostBackDoor), drop-пути, C2-домены - основаны на отчётах Group-IB и Unit 42. Прямые ссылки на первоисточники в статье не приведены; данные требуют независимой верификации.

По данным Group-IB, Operation Olalampo была направлена на организации и физических лиц в регионе MENA. Кампания совпала с эскалацией геополитической напряжённости на Ближнем Востоке.

Unit 42 (Palo Alto Networks) описала несколько волн атак на одну и ту же энергетическую и морскую компанию на Ближнем Востоке (по имеющимся публикациям, требует верификации по первоисточнику). Каждая волна адаптировала приманки под конкретные отделы - от проектных инженеров до финансистов. Такой уровень persistence указывает на целенаправленный мандат по проникновению в инфраструктуру морской логистики.

Kill chain: spear phishing со скомпрометированного ящика -> Office-документ с VBA-макросом -> decode payload из скрытого элемента UI -> drop на диск -> execute -> C2.

Фишинговые документы: три варианта целевого фишинга Office​

Group-IB выделяет три варианта документов, каждый со своей темой и финальным payload:

Вариант 1 - Excel, бухгалтерские таблицы. Мимикрирует под финансовую отчётность энергетической и морской компании, ориентирован на инженеров и подрядчиков. Финальный payload - CHAR (по данным Group-IB), backdoor на Rust с C2 через Telegram Bot API. Drop path: C:\Users\Public\Downloads\novaservice.exe.

Вариант 2 - Excel, та же тематика. Аналогичная приманка, но доставляет GhostFetch (по данным Group-IB) - загрузчик первой стадии, подтягивающий GhostBackDoor. Drop path: C:\Users\Public\Documents\MicrosoftExcelUser.exe.

Вариант 3 - Word/Excel, авиабилеты и отчёты (Group-IB описывает макрос как Workbook_Open, характерный для Excel, при теме Word-документа - занятная нестыковка). По данным Unit 42, один из документов содержал персонализированную бронь Air Arabia - имя пассажира, маршрут, категория «Corporate Fare». Уровень детализации указывает на использование данных из предыдущей компрометации. Доставляет HTTP_VIP (по данным Group-IB) - загрузчик, устанавливающий AnyDesk (легитимный RMM). Drop path: C:\Users\Public\Documents\MicrosoftWordUser.exe.

OPSEC-замечание: доставка авиабилета как .docx вместо PDF - операционная аномалия. Unit 42 отмечает, что качественная социальная инженерия подрывается техническим форматом доставки. На engagement'е стоит учитывать: слишком специфичная приманка привлечёт внимание SOC-аналитика быстрее, чем сработает payload.

Макросы VBA: вредоносный код в деталях​

Все три варианта используют одну логику с минимальными отличиями в реализации. Ключевые элементы, по данным Group-IB:

Workbook_Open() - точка входа. Макрос запускается автоматически при открытии документа на Windows с Microsoft Office, если макросы разрешены. Техника Malicious File (T1204.002, Execution).

wait() - sandbox evasion. Вместо WinAPI-вызова Sleep() используется вложенный цикл. Песочницы перехватывают Sleep/NtDelayExecution для ускорения анализа - вложенный цикл этот хук обходит, потому что к API вообще не обращается.

Payload в скрытом UserForm. Decimal-encoded строка хранится в UserForm1.TextBox1.Text - элементе формы, невидимом пользователю. Макрос считывает строку, декодирует и записывает PE-файл на диск. Техника Visual Basic (T1059.005, Execution) в связке с Command Obfuscation (T1027.010, Defense Evasion).
Код:
' Концептуальная схема макроса Operation Olalampo (pseudo-code)
' Размещается в модуле ThisWorkbook, НЕ в стандартном .bas-модуле
' НЕ рабочий exploit - требует адаптации
Private Sub Workbook_Open()
    Call wait  ' anti-sandbox: nested loop
    Load UserForm1  ' загрузка формы без отображения (.Show не вызывается)
    Dim enc As String
    enc = UserForm1.TextBox1.Text   ' decimal-encoded payload
    Dim parts() As String
    parts = Split(enc, ",")         ' разбор по разделителю
    ' decode bytes → write C:\Users\Public\Downloads\ -> execute
End Sub
Хранение payload в UserForm вместо открытого VBA-кода затрудняет статический анализ - стандартные YARA-правила ищут подозрительные функции (Shell, CreateObject), а не данные в элементах формы. Хитро.

Red Team playbook: пошаговая эмуляция MuddyWater TTPs​

1783894562706.webp

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Песочницы, перехватывающие Sleep/NtDelayExecution, не могут ускорить вложенный цикл напрямую. Но (и это важно) приём работает только против примитивных песочниц без CPU heuristics: на современном CPU 5M итераций DoEvents отрабатывают за доли секунды - реальной задержки нет. Коммерческие sandbox (WildFire, Falcon Sandbox) детектируют busy-loop через CPU heuristics. Код приведён концептуально по мотивам техники из отчёта Group-IB; для реальной задержки лучше использовать GetTickCount64 с проверкой delta времени в цикле.

Второй приём - hardware fingerprint через WMI (GetObject("winmgmts:")) для проверки RAM, CPU, USB. В песочницах эти значения часто ниже пороговых.

Ограничение техники: современные коммерческие sandbox (включая Palo Alto WildFire и CrowdStrike Falcon Sandbox) настраивают реалистичные аппаратные профили - простой hardware fingerprinting против них малоэффективен.

Payload drop, persistence и C2-каналы​

Место в цепочке: Execution -> Persistence -> Command and Control.

Пути drop, используемые MuddyWater:
  • C:\Users\Public\Downloads\ - не требует прав администратора
  • C:\Users\Public\Documents\ - аналогично
  • %LOCALAPPDATA%\microsoft\windows\burnutill\ - GhostFetch для persistence
GhostFetch копирует себя с минорной модификацией бинаря - изменённый hash обходит hash-based IoC, которые SOC получает из threat feeds. Persistence - через ключ реестра User Shell Folders\Startup. Техника Registry Run Keys / Startup Folder (T1547.001, Persistence).

C2-каналы Operation Olalampo:

PayloadC2-каналПротоколДетали
CHAR (Rust, по данным Group-IB)Telegram Bot APIHTTPSБот принимает команды, отправляет результаты
GhostFetch -> GhostBackDoor (по данным Group-IB)HTTP (promoverse[.]org)HTTPAES-encrypted PE, reflective loading в память
HTTP_VIP (по данным Group-IB)HTTPHTTPЗагрузка AnyDesk (легитимный RMM-инструмент)

Telegram как C2 - Web Protocols (T1071.001) - выбор со смыслом: TLS-шифрование, telegram.org нередко присутствует в whitelist корпоративных прокси, блокировка сервиса снята в ряде стран. На engagement'е можно эмулировать через Python-скрипт с Telegram Bot API или фреймворки с поддержкой Telegram C2.

Использование AnyDesk как финального payload (HTTP_VIP -> AnyDesk) - Living-off-the-Land в чистом виде: MuddyWater широко применяет легитимные RMM-инструменты (Atera, ScreenConnect, SimpleHelp) для пост-эксплуатации. По данным MITRE ATT&CK, группа использовала ScreenConnect, AteraAgent, SimpleHelp, Action1, Level и PDQ для эксфильтрации данных. Это Ingress Tool Transfer (T1105, C2). Зачем писать свой RAT, когда можно поставить AnyDesk и сказать SOC'у, что это "удалённая поддержка от подрядчика"?

MITRE ATT&CK маппинг Operation Olalampo​

ТактикаТехникаIDПрименение
Initial AccessSpearphishing AttachmentT1566.001Office-документы со скомпрометированных ящиков
ExecutionMalicious FileT1204.002Пользователь открывает .xlsm/.docm, включает макросы
ExecutionVisual BasicT1059.005VBA-макросы декодируют и запускают payload
ExecutionPowerShellT1059.001PowerShell-стейджеры в пост-эксплуатации
Defense EvasionCommand ObfuscationT1027.010Decimal-encoding payload в UserForm, Base64 в PowerShell-скриптах
PersistenceRegistry Run KeysT1547.001User Shell Folders\Startup
C2Web ProtocolsT1071.001HTTP для GhostFetch, Telegram API для CHAR
C2Ingress Tool TransferT1105Загрузка AnyDesk, GhostBackDoor

CVE-2017-0199 - уязвимость Microsoft Office, позволяющая удалённое выполнение кода через специально сформированный документ (CVSS 7.8, HIGH, вектор AV:L/AC:L/PR:N/UI:R - требуется действие пользователя), внесена в CISA KEV как активно эксплуатируемая и связанная с ransomware. Ряд публикаций связывает эксплуатацию CVE-2017-0199 с MuddyWater, однако атрибуция требует подтверждения по MITRE ATT&CK G0069.

CVE-2020-0688 - уязвимость Microsoft Exchange Server с некорректной обработкой объектов в памяти (CVSS 8.8, HIGH, вектор AV:N/AC:L/PR:L/UI:N - сетевой доступ, низкие привилегии) - использовалась несколькими иранскими APT-группами для lateral movement; атрибуция конкретно к MuddyWater не подтверждена в MITRE ATT&CK G0069 и требует верификации. Модуль Metasploit - exploit/windows/http/exchange_ecp_viewstate (EDB-48168), проверено на Metasploit Framework 6.x.

Ограничения эмуляции и детект по вендорам​

Макросовый initial access - техника с известным потолком. Понимание ограничений критично при планировании adversary simulation.

Microsoft ASR (Attack Surface Reduction). С Office 2016+ правила ASR блокируют создание дочерних процессов из Office-приложений и запуск Win32 API из VBA-макросов. При включённом ASR в block mode макросовый вектор мёртв. Эмуляция релевантна только для сред без ASR или с ASR в audit mode.

MOTW block (Mark of the Web). С 2022 года Office блокирует макросы в документах с MOTW-флагом - файлах, полученных из интернета. MuddyWater обходит это через рассылку с внутренних скомпрометированных ящиков: документы из внутренних источников MOTW не получают.

EDR-специфика детекта:
  • CrowdStrike Falcon - детектирует Office-процесс, порождающий подозрительный дочерний процесс. Правило "Office application spawning child process" срабатывает на execute-фазе.
  • SentinelOne - behavior-based анализ цепочки процессов EXCEL.EXE -> cmd.exe -> payload.exe.
  • Elastic Security 8.x+ с kernel ETW-TI - фиксирует syscall-цепочки записи PE на диск из контекста Office-процесса.
  • Kaspersky EDR Expert - heuristic engine детектирует VBA с обращением к WMI и файловой системе.
ПараметрЗначение
РаботаетLegacy Office без ASR, доставка через internal mail, отсутствие EDR
Не работаетOffice 365 с MOTW block, ASR в block mode, modern EDR с behavior analysis
OPSEC-уровеньСредний - Office → child process заметен для EDR
Альтернативные векторыISO/LNK delivery, HTML smuggling, прямой abuse RMM-инструментов

MuddyWater уже движется в сторону альтернатив: по данным MITRE ATT&CK, группа активно использует RMM-инструменты для initial access вместо макросов, а также ищет возможности эксплуатации уязвимостей на публично доступных серверах.



Множественные волны атак на одну организацию - вот что отличает MuddyWater от типичного сценария на Red Team engagement'е. Мы привыкли к формату "одна попытка, закрепились, отчёт через три недели". MuddyWater работает иначе: первая волна провалилась на инженерах - через пять месяцев прилетает вторая, адаптированная под финансовый отдел. Параллельно летит третья - персонализированный авиабилет конкретному сотруднику, собранный по данным из предыдущей компрометации. Это операционный persistence, который мало кто из заказчиков готов тестировать.

Переход группы на Rust (backdoor CHAR) и AI-ассистированную генерацию кода (по данным Unit 42) - тренд, который усилит разрыв между атакующими и защитниками на legacy-инфраструктуре. Rust-имплант с anti-analysis, Telegram C2 и AES-encrypted staging - против стандартных сигнатур AV без EDR результат предсказуем. Если заказчик до сих пор считает, что макросы - "угроза из 2018 года", покажите ему Operation Olalampo: три варианта payload, несколько волн, одна жертва. Группировки этого уровня не изобретают новые attack surface - они оптимизируют старые до тех пор, пока те работают.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →

Популярный контент

🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab