
AttackGen — это инструмент тестирования реагирования на инциденты кибербезопасности, использующий возможности больших языковых моделей и комплексный фреймворк MITRE ATT&CK. Инструмент генерирует адаптированные сценарии реагирования на инциденты на основе выбранных пользователем групп угроз и данных о вашей организации.
# AttackGen AttackGen — это инструмент для тестирования реагирования на киберинциденты, использующий возможности больших языковых моделей и всеобъемлющие фреймворки MITRE ATT&CK и ATLAS. Инструмент генерирует индивидуальные сценарии реагирования на инциденты на основе выбранных пользователем групп субъектов угроз, тематических исследований атак ИИ и сведений о вашей организации. ## Содержание - [Поставьте звезду репозиторию](#star-the-repo) - [Возможности](#features) - [Релизы](#releases) - [Требования](#requirements) - [Установка](#installation) - [Настройка LangSmith](#langsmith-setup) - [Настройка данных](#data-setup) - [Запуск AttackGen](#running-attackgen) - [MCP-сервер](#mcp-server) - [Навыки агента](#agent-skills) - [Использование](#usage) - [Лучшие практики безопасности](#security-best-practices) - [Участие в разработке](#contributing) - [Лицензия](#licence) ## Поставьте звезду репозиторию Если вы находите AttackGen полезным, пожалуйста, поставьте звезду репозиторию на GitHub. Это помогает большему числу людей узнать об инструменте. Ваша поддержка очень ценится! ⭐ ## Возможности - Генерирует уникальные сценарии реагирования на инциденты на основе выбранных групп угроз или тематических исследований ATLAS. - Позволяет указать размер и отрасль вашей организации для адаптации сценария. - Поддерживает фреймворки MITRE ATT&CK Enterprise, ICS (Industrial Control Systems) и ATLAS (Adversarial Threat Landscape for AI Systems). - Отображает подробный список техник, используемых выбранной группой угроз или тематическим исследованием. - Создавайте собственные сценарии на основе выбранных техник ATT&CK или ATLAS. - Используйте шаблоны сценариев для быстрой генерации собственных сценариев на основе распространённых типов киберинцидентов, включая специфичные для AI/ML паттерны атак. - Генерируйте **сценарии внутренней угрозы со стороны ИИ** — учения по реагированию на инциденты, в которых передовой ИИ-агент, развёрнутый внутри вашей организации, ведёт себя как внутренний нарушитель, на основе модели угроз из [*Actions Speak Louder Than Tokens: An Insider Threat Model for Frontier AI Agents*](https://ai-insider-threat.matt-adams.co.uk). Сценарии формируются с учётом архетипа развёртывания агента (уровня автономности), категории угроз, угроз STRIDE и необязательного свободного текстового зерна сценария. - AttackGen Assistant — чат-интерфейс для обновления и/или вопросов о сгенерированных сценариях с прямым переходом обратно на страницу, с которой пришёл сценарий. - Пошаговая настройка: каждая страница показывает одну и ту же боковую панель **Setup**, перечисляет все невыполненные требования в единой сводке готовности и держит кнопку **Generate** отключённой, пока рабочий процесс не готов. - Результаты сохраняются в течение сессии: каждая страница сценария хранит свой последний результат, введённые данные и загрузки между повторными запусками и переходами, и только явные **Regenerate** или **Clear result** заменяют или удаляют его. - Длинные сценарии сопровождаются компактной сводкой и навигацией по разделам, включая быстрые ссылки на инъекции, критерии успеха, метрики, артефакты и правила ведения учений, по которым фасилитатор проводит упражнение. - Собирайте отзывы пользователей о качестве сгенерированных сценариев. - Компаньон Detection & Response: для техник сценария AttackGen перечисляет соответствующие стратегии обнаружения ATT&CK, аналитики, источники логов и меры защиты, доступные для скачивания в виде отдельного файла `_detection.md`. - Загрузка слоя ATT&CK Navigator для сценариев Threat Group и Custom, чтобы вы могли просматривать техники сценария в [ATT&CK Navigator](https://mitre-attack.github.io/attack-navigator/). - Необязательные переключатели на страницах Threat Group и Custom: **AI-enhanced adversary** переосмысливает ту же цепочку атаки как ускоренную ИИ, а **Purple-team narrative** добавляет пошаговый разбор с точки зрения защитника, построенный на предоставленных обнаружениях и мерах защиты. - Скачиваемые сценарии в формате Markdown, а также отчёт об обнаружении и слой Navigator. - MCP-сервер (`attackgen-mcp`), который предоставляет цепочки атак, отчёты об обнаружении, слои Navigator и генерацию сценариев агентным клиентам, а также Agent Skill `attackgen-tabletop` для превращения этого вывода в готовое к проведению настольное учение. - Используйте OpenAI API, Anthropic API (модели Claude), Google AI API, Mistral API, Groq API или любую совместимую с OpenAI конечную точку (Ollama, LM Studio, Azure OpenAI, OpenRouter и т. д.) для генерации сценариев реагирования на инциденты. Все провайдеры маршрутизируются через [LiteLLM](https://github.com/BerriAI/litellm) за единой внутренней обёрткой, поэтому добавление новой модели — это изменение в одну строку. - Доступен в виде образа Docker-контейнера для простого развёртывания. - Необязательная интеграция с [LangSmith](https://docs.smith.langchain.com/) для мощной отладки, тестирования и мониторинга производительности модели. - Безопасное управление учётными данными с помощью файла .env для API-ключей и секретов.  ## Releases ### v0.17 | Что нового? | Чем это полезно? | | ----------- | ----------------- | | Применение уточнений Ассистента к загрузкам | - Изменения доходят до файлов: чат Ассистента раньше служил только для уточнения беседы, поэтому загрузки сценария и Detection & Response никогда не менялись. Новая кнопка **Apply changes to downloads** переписывает их на основе беседы в отдельном вызове модели, который возвращает полный пересмотренный документ. В режиме **Scenario + Detection & Response** она пересматривает оба документа, передавая каждому текущий текст другого, чтобы они оставались согласованными.<br><br>- Раздел справочника остаётся точным: применение к Detection & Response переписывает только повествовательную часть. Детерминированный справочник по обнаружению и мерам противодействия, построенный на данных ATT&CK, переносится байт в байт. Слой Navigator не перегенерируется и сопровождается подписью о том, что он отражает техники исходного сценария.<br><br>- Безопасно пробовать: пустой ответ модели отклоняется без внесения изменений. Страница сценария и Ассистент сопровождают уточнённый результат подписью со временем последнего применения, а **Revert to original** восстанавливает сценарий и повествование вместе.<br><br>- Скачивайте там, где редактируете: Ассистент теперь предлагает те же кнопки **Download Scenario** и **Download Detection & Response**, что и страница сценария.<br><br>- Одна беседа на сценарий: каждый чат принадлежит сценарию, о котором он идёт, поэтому новый сгенерированный сценарий начинает новую беседу, а вся история остаётся видимой после применения. | | Управляемый и устойчивый рабочий процесс сценария | - Готовность до нажатия: каждая страница теперь перечисляет, чего ещё не хватает — сначала собственный выбор страницы, затем любое незаполненное поле Setup — и держит **Generate** отключённой, пока что-то не заполнено, чтобы нажатие никогда не тратилось на обнаружение ошибки валидации.<br><br>- Опции до действия: переключатели AI-enhanced adversary и purple-team расположены над **Generate**, причём опция purple-team сообщает, что она вызывает модель второй раз.<br><br>- Подтверждение до затрат: перед началом генерации показывается однострочная сводка фреймворка, профиля организации, выбора и модификаторов.<br><br>- Результаты, переживающие навигацию: каждая страница сохраняет свой последний результат, входные данные, которые его породили, и имена загрузок на время сессии — откройте Ассистент и вернитесь, и сценарий, его слой Navigator и отчёт Detection & Response по-прежнему на месте. Редактирование формы оставляет результат на месте с пометкой, что ваши выборы изменились; **Regenerate** и **Clear result** — явные действия.<br><br>- Ориентация в длинном сценарии: компактная сводка и индекс разделов расположены над полным Markdown, с быстрыми ссылками на инъекции, вопросы для обсуждения, критерии успеха, метрики, артефакты и правила взаимодействия.<br><br>- Полезные пустые состояния: без сценария Ассистент ссылается на все три способа его создания; со сценарием он называет сценарий, который обсуждает, и ссылается обратно на страницу, которая его сгенерировала. | | Восстановление после неудачного или медленного повествования | - Сохраните то, что сработало: если необязательное повествование purple-team завершается ошибкой или останавливается, базовый сценарий, его загрузки, слой Navigator и детерминированный справочник Detection & Response остаются полностью работоспособными, с сообщением о том, что именно не удалось.<br><br>- Повторяйте только то, что не удалось: **Retry purple-team narrative** повторно запускает только повествование, без второго вызова базового сценария, и объединяет его с представлением и загрузкой Detection & Response. Неудачный базовый сценарий предлагает собственный повторный запуск с использованием входных данных, зафиксированных при **Generate**.<br><br>- Таймер, который продолжает идти: прошедшее время теперь увеличивается во время ожидания первого токена модели, поэтому долгое ожидание больше не выглядит как зависание. | | Более понятные сбои при загрузке техник | - Сбои сообщаются как сбои: группа угроз, для которой не удалось найти техники, больше не отображается как группа без техник, а Custom Scenarios больше не скрывает свой выбор техник и не просит выбрать техники, когда список не удалось загрузить.<br><br>- Следующий шаг, а не тупик: оба блокирующих сообщения теперь говорят, что можно сделать с этим сбоем. | | Доступность и более лаконичный текст | - Дружелюбность к клавиатуре и экранным дикторам: элементы управления только с иконками имеют осмысленные доступные имена, метки форм уникальны, а порядок обхода клавиатурой и фокус видимы и логичны. Макет больше не выходит за границы по горизонтали при ширине телефона, а пустые предупреждения консоли о цвете темы исчезли.<br><br>- Проверяется в CI: дымовые тесты в реальном браузере на чистоту консоли и доступность теперь запускаются при каждом pull request и служат шлюзом для релизного образа.<br><br>- Меньше чтения: страницы сценариев больше не повторяют сводку предварительной проверки во втором раскрывающемся блоке и не объясняют собственное управление состоянием. | | Обновление реестра моделей | - Актуальные модели: список моделей обновлён в соответствии с текущей документацией каждого провайдера — **GPT-6 Astra** возглавляет список OpenAI, **Claude Opus 5.5**, **Claude Opus 5** и **Claude Fable 5.1** присоединяются к списку Anthropic, а Google получает **Gemini 3.8 Flash** наряду с **Gemini 3.5 Flash Lite**, причём в каждом случае для преемственности сохранено одно предыдущее поколение. Список Anthropic теперь возглавляет **Claude Opus 5.5** — значение по умолчанию в боковой панели, если вы не выбрали модель, — а не более дорогая Fable 5.1.<br><br>- Удалены устаревшие записи: убраны идентификаторы, которые провайдеры заменили или отключили — Claude Opus 4.7 и 4.8 (более чем на одно поколение Opus назад, как только появится Opus 5.5) и `llama-3.3-70b-versatile` и `llama-3.1-8b-instant` от Groq (оба отключены 16 августа 2026 г.) — чтобы боковая панель не предлагала модель, которая выдаёт ошибку только после нажатия **Generate**. Уровень рассуждающих моделей Groq с открытыми весами теперь `qwen/qwen3.8-27b`.<br><br>- Правило температуры приведено в соответствие: `supports_temperature` устанавливается исходя из фактического поведения сэмплирования каждой модели Anthropic — все Claude начиная с 4.7 отклоняют пользовательскую температуру, и Haiku 4.5 остаётся единственной моделью в списке, которая её принимает. Тест, проверяющий это, теперь падает, когда новая запись Anthropic опускает флаг, а не только когда кто-то устанавливает его вручную. | | Платформа и безопасность | - Минимум Python 3.11: Python 3.10 больше не поддерживается. LiteLLM 1.98.0 и более поздние версии импортируют функцию типизации, которая существует только начиная с 3.11.<br><br>- Обновлён базовый образ: Docker-образ пересобран на актуальном `python:3.14-slim`, что устраняет CVE базового образа Debian, выявленные Trivy, включая три критические в `perl-base`.<br><br>- Реальные ошибки при неудачных вызовах: теперь объявлена зависимость `tenacity`, поэтому неудачный вызов модели сообщает фактическую ошибку провайдера (например, недействительный ключ API), а не инструкцию установить `tenacity`.<br><br>- Отзыв остаётся при своём сценарии: оценка записывается для запуска, который породил сценарий на экране, а не для последнего запуска другой страницы. | <details> <summary>Предыдущие выпуски (v0.16 и старше)</summary> ### v0.16 | Что нового? | Чем это полезно? | | ----------- | ----------------- | | Генерация сначала базового сценария | - Сценарий до ожидания: генерация теперь выполняется по фазам — базовый сценарий отображается первым, а его кнопки **Download Scenario** и **Download ATT&CK Navigator Layer** уже доступны, после чего потоком подгружается необязательное описание purple-team. Если второй проход медленный или вам он не нужен, сценарий можно использовать сразу, а не ждать, пока всё завершится.<br><br>- Входные данные фиксируются при генерации: каждый запуск работает со снимком, сделанным в момент нажатия **Generate**, поэтому изменение боковой панели во время выполнения не может наполовину переписать создаваемый сценарий.<br><br>- Честный прогресс: работающий счётчик прошедшего времени и именованные фазы — подготовка входных данных, генерация базового сценария, построение детерминированных экспортов, генерация описания purple-team — показывают, на каком этапе на самом деле находится длительный запуск. | | Нейтральные селекторы без тупиковых вариантов | - Только работающие варианты: селекторы групп угроз и тематических исследований теперь предлагают только те варианты, которые действительно создают сценарий, поэтому выбор больше не может привести в тупик.<br><br>- Естественный порядок: группы сортируются в естественном числовом порядке, поэтому APT3 идёт перед APT28 и APT30, а не сортируется как текст и не оказывается между ними. | | Общая боковая панель настройки на каждой странице | - Настройка один раз: провайдер, модель, фреймворк, отрасль и размер компании теперь находятся в единой общей боковой панели **Setup** на каждой странице сценария — Threat Group, Custom и AI Insider Threat — вместо повторного ввода на каждой из них.<br><br>- Сохраняется при навигации: несекретные выборы сохраняются при переходе между страницами и отражаются в URL, а API-ключи намеренно не попадают в строку запроса. | | Платформа и безопасность | - MCP на SDK 2.x: сервер MCP переведён на SDK `mcp` 2.x.<br><br>- Более новый базовый образ: Docker-образ теперь собирается на `python:3.14-slim`.<br><br>- CI блокирует, а не предупреждает: сканирования безопасности теперь проваливают сборку при обнаружении проблем, а не только сообщают о них — pip-audit и Bandit блокируют сборку, Trivy больше не ошибочно считает вендорный SBOM pip установленными пакетами, а устранимые CVE образа устранены. GitHub Actions переведены с рантайма Node 20, а Dependabot теперь отслеживает сами действия workflow. | ### v0.15 | Что нового? | Чем это полезно? | | ----------- | ----------------- | | Пресет побега из среды оценки и зерно сценария | - Репетиция конкретного инцидента: новый шаблон угрозы инсайдера с ИИ репетирует агента оценки, достигающего реальных систем из среды, которая предполагается изолированной, — что требует локализации, ротации учётных данных, уведомления третьих сторон и сохранения доказательств. Он охватывает раскрытия июля 2026 года о выходе агентов оценки за пределы своих песочниц, где граница изоляции *предполагалась*, а не обеспечивалась.<br><br>- Шаблоны теперь доходят до промпта: шаблоны быстрого старта ранее лишь предзаполняли виджеты страницы и никогда не влияли на генерируемый сценарий. Теперь они несут повествовательный `brief` и `required_decisions`, которые обязаны форсировать вопросы для обсуждения, и оба встраиваются в промпт — так шаблон порождает пригодный настольный учёбный сценарий с таймингом, а не набор случайных вопросов. Это разделяет их на два класса: шесть исходных шаблонов **архетипа** задают только решения, поэтому модель придумывает предпосылку, и повторный запуск даёт свежее упражнение для того же профиля угрозы; шаблоны **инцидента** также задают brief, фиксируя ситуацию.<br><br>- Свободное зерно сценария: необязательное поле для зерна на странице AI Insider Threat направляет повествование любого сценария. Выбор шаблона предзаполняет его, и вы можете отредактировать его или написать свой с нуля.<br><br>- Таксономия расширена до 27 угроз / 6 категорий: добавлена шестая категория угроз (**Containment & Third-Party Impact**) и четыре угрозы STRIDE, на которых держится упражнение — `S5` повторное использование многоразовых учётных данных рабочей нагрузки, `R4` подавление телеметрии на стороне агента, `I5` компрометация третьих сторон и нижестоящих систем и `E5` отказ в обеспечении границы локализации. AttackGen теперь *расширяет* опубликованную модель угроз, а не зеркалит её.<br><br>- Шаблоны доступны через MCP: `get_ai_insider_prompt` и `generate_ai_insider_scenario` принимают `template=` и `scenario_seed=`, а `list_ai_insider_options` возвращает каждый шаблон с выборами и brief, которые он применяет, — так клиент может выбрать пресет по существу и вызвать с указанием только шаблона, отрасли и размера компании. Ранее имена шаблонов перечислялись, но ни один инструмент их не принимал. | | Навык attackgen-tabletop: путь угрозы инсайдера с ИИ | - Второй путь упражнения: [Agent Skill](https://github.com/mrwadams/attackgen/blob/main/skills) теперь строит настольный учёбный сценарий как из модели угрозы инсайдера с ИИ, так и из цепочки убийства MITRE. Выберите шаблон быстрого старта (или архетип развёртывания и категории угроз), и он превращает полезную нагрузку `get_ai_insider_prompt` в MSEL.<br><br>- Та же форма, другой хребет: упражнение сохраняет те же шесть разделов, но таблица цепочки убийства становится профилем агента и областью угроз STRIDE, карта оценки обнаружения оценивается по состоянию обнаружения архетипа развёртывания — так строки, которые *не* сработали бы, становятся находкой, — а обязательные решения шаблона становятся обязательными вопросами для обсуждения.<br><br>- Путь выбирается за вас: описание навыка теперь срабатывает на формулировки о неконтролируемом агенте, поэтому запрос «настольный сценарий угрозы инсайдера с ИИ» попадает на правильный путь. Внешний злоумышленник с ускоренной ИИ тактикой остаётся на пути MITRE.<br><br>- Реагирование, а не эксплуатация: оба пути явно ограничены репетицией решений, которые должна принять команда реагирования, — без кода эксплуатации, полезных нагрузок или реальных неисправленных уязвимостей, — а путь ИИ приписывает поведение агента конфигурации, доступу и цели, а не человеческому мотиву. | --- [Read more](https://github.com/mrwadams/attackgen)