На purple team-проекте в финансовой организации мы свели 23 правила SIEM в единый coverage map. Результат: 19 техник покрыты из 201, которые MITRE атрибутирует APT-группам, релевантным для финсектора. Девяносто процентов - слепая зона. Менеджмент задал один вопрос: что закрывать первым. ATT&CK Navigator дал ответ за вечер - heat map с ранжированными gaps, которую CISO считал без переводчика. Ниже - полный workflow: от локального развёртывания до квартального gap-скоринга, с JSON-примерами и формулой приоритизации, которую можно натянуть на любой стек.
Место ATT&CK Navigator в рабочем процессе Purple Team
ATT&CK Navigator - client-side веб-приложение для аннотирования и визуализации матрицы MITRE ATT&CK. По сути это цветовая разметка ячеек, числовые оценки, комментарии, метаданные. Инструмент нейтрален - он не подключается к SIEM и не принимает решений. Вы подаёте JSON-слой, он рисует heat map. Всё. Подробнее - в нашем материале про обнаружение apt атак.В цепочке purple team Navigator появляется трижды:
- До упражнения (планирование). Red team строит слой с техниками для эмуляции конкретной threat group - например, union техник APT29 и FIN7 для финансового сектора. Слой согласуется с blue team и фиксирует scope.
- Во время упражнения (трекинг). Blue team отмечает задетектированные техники с привязкой к конкретным SIEM-правилам через поле
commentв слое. - После упражнения (отчёт). Два слоя накладываются через layer expression - composite heat map: зелёное = задетектировано, красное = пропущено.
Преимущества и ограничения MITRE ATT&CK Navigator
| Аспект | Преимущества | Ограничения | Когда использовать | Когда не использовать |
|---|---|---|---|---|
| Визуализация | Heat map всей матрицы, SVG-экспорт для executive-отчётов | Статичная картинка, не real-time dashboard | Квартальный coverage отчёт, debriefing после purple team | Live-мониторинг покрытия SOC |
| Автоматизация | JSON-слои генерируются программно из любого источника | Нет встроенного коннектора к SIEM - нужен скрипт | CI/CD pipeline для detection-as-code | Автоматический pull правил без промежуточного скрипта |
| Комбинирование | Арифметические выражения для composite-слоёв | Metadata (comments, links) не мержатся между слоями | Сведение offensive + defensive оценок | Детальная атрибуция с полным контекстом каждого правила |
| Безопасность данных | Client-side, слои не покидают браузер | Нет ролевой модели, нет аудита изменений | Работа с чувствительными coverage gaps | Командная работа без отдельного Git-репозитория |
| Совместимость | Layer format 4.x (текущая 4.5), все домены (Enterprise, Mobile, ICS) | Слои формата 3.x и ниже требуют миграции | Актуальные версии фреймворка | Legacy-данные до 2018 года |
Развёртывание и слои ATT&CK Navigator
Требования к окружению
- ОС: Windows, macOS, GNU/Linux - любая с Docker 20+ или Node.js 18+
- RAM: 2 ГБ минимум (Navigator - SPA, основная нагрузка на браузер)
- Браузер: Chrome, Firefox, Edge актуальных версий. Safari 14+ (старые версии могут зависать при переключении вкладок слоёв)
- Сеть: offline-работа возможна при локальном развёртывании с загруженными STIX-данными из MITRE CTI-репозитория
- Диск: ~200 МБ для Docker-образа, ~150 МБ для npm-зависимостей
git clone https://github.com/mitre-attack/attack-navigator && cd attack-navigator && docker build -t nav-app . && docker run -p 8080:80 nav-app - продакшн-сборка на http://localhost:8080. Для dev-режима с hot reload: cd nav-app && npm install && npm start.npm:
cd nav-app && npm install && npm start - dev-сервер на http://localhost:4200.Репозиторий mitre-attack/attack-navigator активно поддерживается, текущая версия Navigator 5.x (2024–2025, layer format 4.5) работает со всеми доменами ATT&CK (Enterprise, Mobile, ICS) с выбором домена при создании слоя. Файлы слоёв, загружаемые в hosted-версию на GitHub Pages, не уходят на сервер - Navigator полностью client-side. Но для чувствительных данных (coverage gaps, имена правил) я бы ставил собственный инстанс - MITRE тоже это рекомендует.
Формат JSON-слоёв для визуализации TTP
Каждый слой ATT&CK Navigator - JSON-файл с кастомным представлением матрицы. Слои можно создавать вручную в UI или генерировать программно - второй подход масштабируется. Минимальный слой для маппинга SIEM-покрытия:
JSON:
{
"name": "SIEM Coverage Q3",
"versions": {"attack": "17", "navigator": "5.1.0", "layer": "4.5"},
"domain": "enterprise-attack",
"techniques": [
{"techniqueID": "T1078", "score": 2,
"comment": "Rule: Admin Login from New Country"},
{"techniqueID": "T1059.001", "score": 1,
"comment": "Rule: PowerShell Encoded Command"}
],
"gradient": {"colors": ["#ffffff", "#ff6666"], "minValue": 0, "maxValue": 2}
}
score - числовая зрелость детекта: 0 = нет покрытия, 1 = частичное (ловит часть вариантов), 2 = сильное (low false positive rate). comment содержит имя конкретного SIEM-правила. gradient маппит score на цвета в UI: белый -> красный для gap-анализа, белый -> зелёный для coverage map - зависит от задачи.Дополнительные поля, которые повышают операционную ценность слоя:
tactic (shortname - initial-access, execution) привязывает правило к конкретной фазе kill chain; metadata - массив key-value для структурированных данных (maturity, false_positive_rate, owner, test_status); links - URL на detection-as-code или Sigma-правило в репозитории. Если одно правило покрывает несколько техник - создайте отдельный объект в массиве techniques для каждой. Это сохраняет traceability: из любой ячейки Navigator аналитик видит правило, зрелость и ссылку на код.Кастомное контекстное меню Navigator - штука удобная. В файле
nav-app/src/assets/config.json добавьте объект с label и url, используя подстановки: {{technique_attackID}} заменяется на ID техники (например, T1098), {{tactic_name}} - на shortname тактики. Пример: {"label": "Sigma Rules", "url": "https://github.com/SigmaHQ/sigma/search?q={{technique_attackID}}"} - по клику откроется поиск Sigma-правил для выбранной техники. На практике это экономит кучу времени при разборе gaps.Gap-анализ ATT&CK: от маппинга SIEM до coverage gaps
Экспорт и маппинг правил на техники ATT&CK
Первый шаг - получить machine-readable список ваших SIEM-правил. Для крупных инсталляций ручной маппинг сотен правил - потеря месяца.Microsoft Sentinel: Analytics Rules REST API (
GET .../alertRules?api-version=2023-11-01) возвращает поля tactics и techniques, если они заполнены автором правила. Правила из Content Hub обычно размечены, кастомные правила без явного ATT&CK-mapping возвращают пустые массивы.Splunk: в Splunk Enterprise Security correlation searches доступны через endpoint
/servicesNS/nobody/search/saved/searches и содержат поле action.correlationsearch.annotations с ATT&CK ID в JSON-формате {"mitre_attack": ["T1078", "T1059"]}. Для обычных saved searches без ES ATT&CK-теги хранятся в description или tags и требуют ручного парсинга.Результат экспорта - CSV:
rule_name, siem_platform, technique_ids, last_modified. Это входные данные для gap-анализа.Правила без ATT&CK-тегов (legacy, написанные до detection-as-code) маппятся вручную. Три вопроса на каждое правило:
- Какое поведение атакующего детектирует?
- На каком этапе kill chain?
- Какая техника ATT&CK соответствует?
Для калибровки масштаба: в SigmaHQ-репозитории по тегу T1027 (Obfuscated Files or Information) числится 157 правил, по T1587 (Develop Capabilities) - 17. Sigma-репозиторий тут как публичный бенчмарк: если ваш SIEM покрывает T1027 двумя правилами при 157 доступных в Sigma - это конкретный gap, и закрыть его можно импортом готовых правил.
Приоритизация детектирования через threat groups и скоринг gaps
Coverage map готов. Вопрос: какие gaps критичны именно для вашей организации?Ответ - в threat model. MITRE CTI-репозиторий (mitre/cti) содержит STIX 2.0 JSON для всех ATT&CK-групп. Для финсектора приоритетны FIN7 и Lazarus Group. Для госструктур - APT29, APT41. Для телекома - APT41 (некоторые актуальные акторы, например Salt Typhoon, ещё не имеют MITRE G-mapping и требуют ручного составления профиля). Постройте union техник ваших top-3 групп: загрузите
enterprise-attack.json, отфильтруйте relationship-объекты с relationship_type == "uses" и source_ref, указывающим на group ID нужной группы, затем разрешите target_ref в объекты техник. Техники, которые используют несколько групп из списка, получают наивысший приоритет. Наложите union на карту покрытия - gaps в высокоприоритетных техниках первыми попадают в бэклог.Почему это срочно: по данным Mandiant M-Trends 2025, exploits составляют 38% initial access, медианное время обнаружения злоумышленника - 11 дней. По данным IBM X-Force 2025, атаки с Valid Accounts (T1078) выросли на 71% за год, а в dark web ежедневно появляется более 6000 свежих учётных данных. Если ваша карта показывает score=0 для T1078 - это не теоретический risk, это дыра, через которую заходят прямо сейчас.
Формула gap score для каждой непокрытой техники из приоритетного union:
Gap = (threat_group_count / max_count) * 0.6 + (data_source_available ? 1 : 0) * 0.4Score от 0 до 1.
threat_group_count - сколько из ваших приоритетных групп используют технику. data_source_available - есть ли в SIEM логи, необходимые для детекта (используйте поле Data Sources в описании техники на сайте ATT&CK).Пример: T1059.001 (PowerShell) используется тремя из трёх приоритетных групп (count=3), Sysmon с event ID 1 настроен (data_source=1). Gap score = (3/3) * 0.6 + 1 * 0.4 = 1.0 - максимальный приоритет, правило нужно сегодня. T1005 (Data from Local System) используется одной группой (count=1), EDR не установлен (data_source=0). Gap score = (1/3) * 0.6 + 0 * 0.4 = 0.2 - низкий приоритет, пока не появится EDR. Формула простая, но она работает: сначала закрываешь то, что ломают чаще всего и где уже есть логи для детекта.
Для обогащения используйте D3FEND (d3fend.mitre.org): для T1027 рекомендуемые контрмеры - File Analysis (D3-FA), Dynamic Analysis (D3-DA), Emulated File Analysis (D3-EFA). Если gap score для T1027 высокий, а sandbox-решения нет - D3-DA подсказывает конкретную инвестицию. Для T1685 (Impair Defenses) D3FEND рекомендует Configuration Inventory (D3-CI) и System Vulnerability Assessment (D3-SYSVA) - это уже про hardening, не про детектирование.
Комбинирование слоёв ATT&CK Navigator
Navigator позволяет строить composite-слои через арифметические выражения. Загрузите несколько слоёв - каждому присваивается буква (a, b, c...). Через функцию Create Layer from Other Layers задайте формулу. Два defensive-слоя (SIEM = a, EDR = b) и два offensive из threat group profiles (c, d). Выражение для risk score от 1 до 5:
Код:
1 + 4 * (1 - (max((c-1)/4,(d-1)/4) * (1 - min((a-1)/4,(b-1)/4))))
Ограничение, которое стоит иметь в виду: при комбинировании мержатся только числовые score. Metadata (comments, links) не переносятся - для полного контекста выберите один из базовых слоёв как источник метаданных. Все комбинируемые слои должны таргетировать одну версию ATT&CK и один домен (enterprise-attack).
ATT&CK Navigator для пентестера: планирование и отчётность
Для offensive-специалиста Navigator закрывает две задачи, и обе лежат вне рамок визуализации TTP как таковой - в области операционного планирования.
Планирование scope. Перед внутренним пентестом создайте слой с техниками для эмуляции. Если заказчик хочет проверить покрытие против конкретной группы - загрузите STIX-профиль, отфильтруйте техники по доступным инструментам и согласуйте scope. Это структурирует engagement: red team не выходит за рамки, blue team знает, чего ожидать. На практике такой слой предотвращает скоуп-крип - ситуацию, когда red team начинает тестировать технику, которую заранее не обсуждали, и потом полдня разбираешься, почему SOC эскалировал инцидент на CISO в субботу утром.
Отчётность. После пентеста экспортируйте SVG с использованными техниками: зелёное = задетектировано SOC, красное = пропущено, серое = out of scope. Executive-отчёт сжимается до одной страницы. Обсуждение строится вокруг паттернов - "у вас пробел в Discovery целиком", "Execution покрыт, Persistence - ноль" - а не вокруг каждой находки по отдельности.
Для валидации детекта используйте Atomic Red Team (redcanaryco/atomic-red-team). Примеры тестов из публичного репозитория: для T1027 - Execute base64-encoded PowerShell (Windows); для T1005 - Search files of interest and save to zip (Windows), Find and dump sqlite databases (GNU/Linux); для T1098 (Account Manipulation) - Domain Account and Group Manipulate (Windows, Azure AD, AWS, GCP); для T1020 (Automated Exfiltration) - IcedID Botnet HTTP PUT, Exfiltration via Encrypted FTP (тесты T1020 в Atomic Red Team доступны только для Windows). Результат каждого теста маппится обратно на Navigator-слой: задетектировано -> score=2, частично -> 1, пропущено -> 0.
По данным IBM X-Force 2025, атаки с Valid Accounts (T1078) выросли на 71% за год - Defense Evasion и Credential Access остаются одними из наиболее эксплуатируемых тактик. Если SIEM не покрывает ни одной техники из Defense Evasion - через этот gap проходит значительная часть реальных атакующих. И они об этом знают.
Чеклист: gap-анализ ATT&CK Navigator за 10 шагов
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
На практике команды нередко открывают Navigator ровно один раз - генерируют heat map для отчёта и забывают до следующего аудита. Это как поставить Sysmon, но не настроить ни одного EventID для forwarding в SIEM: инструмент есть, толку ноль.
Реальная ценность ATT&CK Navigator раскрывается только в цикле: экспортировал правила -> построил heat map -> свёл с threat group profiles -> нашёл gaps -> закрыл top-10 -> через квартал повторил и сравнил с baseline. Без этого цикла Navigator остаётся раскраской для менеджеров. Угрозы меняются быстро: по данным Mandiant M-Trends 2025, медианное время обнаружения - 11 дней, а векторы атак смещаются между кварталами. Heat map полугодовой давности уже не отражает реальную картину.
Единственный способ не отстать - автоматизировать генерацию слоёв и привязать их к CI/CD pipeline вашего detection-as-code. Кто этого не делает, тот каждый квартал заново обнаруживает одни и те же gaps. И каждый квартал удивляется, что ничего не поменялось.
Попробуйте прогнать свои SIEM-правила через этот чеклист. Если coverage map покажет больше 50% - напишите, как добились. Если меньше 20% - вы в хорошей компании, но теперь хотя бы знаете, с чего начать.
Последнее редактирование модератором: