Статья ATT&CK Navigator: от визуализации TTP до приоритизации детектирования

Планшет на тёмном антистатическом коврике отображает тепловую карту MITRE ATT&CK Navigator с ячейками в голубом, янтарном и красном цветах. Боковой свет подчёркивает глянцевый металлический корпус.


На 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 появляется трижды:
  1. До упражнения (планирование). Red team строит слой с техниками для эмуляции конкретной threat group - например, union техник APT29 и FIN7 для финансового сектора. Слой согласуется с blue team и фиксирует scope.
  2. Во время упражнения (трекинг). Blue team отмечает задетектированные техники с привязкой к конкретным SIEM-правилам через поле comment в слое.
  3. После упражнения (отчёт). Два слоя накладываются через layer expression - composite heat map: зелёное = задетектировано, красное = пропущено.
Для пентестера Navigator решает задачу структурированной отчётности. По данным CrowdStrike Global Threat Report 2025, среднее время lateral movement после initial access - 62 минуты, рекорд - 51 секунда. Когда показываешь заказчику, что 8 из 12 техник, наблюдаемых в этом окне, остались невидимыми для SOC, - SVG из Navigator работает убедительнее 40-страничного PDF. Но визуализация TTP - только верхушка. Настоящий смысл раскрывается на этапе gap-анализа ATT&CK и приоритизации детектирования, о которых дальше.

Преимущества и ограничения MITRE ATT&CK Navigator​

АспектПреимуществаОграниченияКогда использоватьКогда не использовать
ВизуализацияHeat map всей матрицы, SVG-экспорт для executive-отчётовСтатичная картинка, не real-time dashboardКвартальный coverage отчёт, debriefing после purple teamLive-мониторинг покрытия 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​

1784197147502.webp

Требования к окружению​

  • ОС: 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-зависимостей
Docker (рекомендуется для изолированных сред): 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) маппятся вручную. Три вопроса на каждое правило:
  1. Какое поведение атакующего детектирует?
  2. На каком этапе kill chain?
  3. Какая техника ATT&CK соответствует?
Правило на PowerShell с Base64-аргументами - T1059.001 (PowerShell). Правило на создание локального admin - T1136.001 (Local Account, Persistence). Правило на нетипичный логин admin-аккаунта - T1078 (Valid Accounts).

Для калибровки масштаба: в 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.4

Score от 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))))
Логика: максимальная threat-оценка (наиболее опасная группа) умножается на минимальную defense-оценку (самое слабое звено). Итог: 1 = high risk (техника активно используется, детекта нет), 5 = low risk. Шкала намеренно инвертирована относительно CVSS/DREAD - низкое число означает высокий риск, что удобно для сортировки gaps по возрастанию. Большинство значений попадает в диапазон 2-4 - зона "нужно разобраться", а не "всё горит".

Ограничение, которое стоит иметь в виду: при комбинировании мержатся только числовые score. Metadata (comments, links) не переносятся - для полного контекста выберите один из базовых слоёв как источник метаданных. Все комбинируемые слои должны таргетировать одну версию ATT&CK и один домен (enterprise-attack).

ATT&CK Navigator для пентестера: планирование и отчётность

1784197200398.webp

Для 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% - вы в хорошей компании, но теперь хотя бы знаете, с чего начать.
 
Последнее редактирование модератором:
Мы в соцсетях:

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

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab