Меня зовут Антон Станкевичус, я старший специалист по тестированию безопасности программного обеспечения в компании «Гарда».
Моделирование угроз (Threat modeling) — уже давно не задача из серии «если дойдут руки», а важное требование по безопасности для российских разработчиков ПО. Мы тоже подходим к такой работе максимально тщательно.
Недавно я выбирал инструмент для автоматизации Threat modeling. Было важно, чтобы он соответствовал ГОСТу по защите информации. Требовалось предоставить руководству обзор рынка и доступных решений, чтобы согласовать оптимальный вариант.
Забегая вперед, Threat modeling редко выполняется единственным инструментом. Одни решения помогают формализовать архитектуру, другие — автоматически находить уязвимости, третьи удобно встраиваются в конвейер CI/CD. Для наглядности я решил не только сравнить между собой рассматриваемое ПО и подходы, но и оценить, насколько каждое из них соответствует требованиям регулятора, а также разложить их по функциональным группам.
Итак, поехали!
Семь главных требований к инструментам Threat modeling
Прежде чем переходить к инструментам, обрисую в общих чертах требования. В конце 2024 года вступила в силу новая редакция стандарта «Защита информации. Разработка безопасного программного обеспечения. Общие требования», которая заменила предыдущую версию 2016 года. Если раньше моделированию угроз посвящался небольшой раздел с обобщенным описанием данного процесса, то теперь этой теме отведен целый раздел с указанными конкретными требованиями и итоговыми артефактами.
В стандарте зафиксированы две основные цели:
-
снижение количества недостатков, связанных с архитектурой ПО, и выработка мер по нейтрализации связанных с ней угроз (код 5.7.1.1);
-
уточнение модели угроз и описания поверхности атаки по результатам разработки кода и его изменений (код 5.7.1.2).
Еще в разделе прописаны семь требований к выполнению Threat modeling и семь конкретных артефактов. Всё это служит отправной точкой при подборе конкретных рабочих инструментов.
|
Код в ГОСТе |
Требование/артефакт |
|
5.7.2.1 (требование) |
Первичное моделирование угроз, разработка модели угроз и перечня мер по их нейтрализации |
|
5.7.2.2 (требование) |
Первичное описание поверхности атаки |
|
5.7.2.3 (требование) |
Формирование перечня целей, функциональных подсистем и интерфейсов для дальнейших исследований |
|
5.7.2.4 (требование) |
Периодическое уточнение модели угроз при изменениях кода |
|
5.7.2.5 (требование) |
Периодическое уточнение описания поверхности атаки |
|
5.7.2.6 (требование) |
Анализ поверхности атаки методом идентификации интерфейсов ПО |
|
5.7.2.7 (требование) |
Уточнение перечня целей на основе архитектуры и результатов моделирования |
|
5.7.3.2 (артефакт) |
Приоритизированный перечень мер по нейтрализации угроз |
Если у вас возник вопрос, куда же делись остальные шесть артефактов, — поздравляю, вы прошли тест на внимательность. Дело в том, что все они зеркально повторяют смысл соответствующих требований из списка (если инструмент закрывает первичное моделирование, он же дает и артефакт «модель угроз»). Лишь у одного включенного в нашу таблицу артефакта нет прямого «требования-двойника» — поэтому он и указывается отдельно.
Так или иначе, у разработчиков ПО больше не выйдет отделаться нарисованной «на коленке» диаграммой по основным уязвимостям. Модель угроз должна закрывать целый ряд требований и обновляться вместе с кодом.
Соответствие инструментов требованиям ГОСТа
С основными требованиями стандарта в общих чертах разобрались — пришло время взглянуть на сами решения для моделирования угроз. Выборка получилась небольшой — всего 16 инструментов исключительно в открытом доступе. К сожалению, собственный рынок подобных решений в нашей стране пока находится на начальном этапе формирования, и судя по анализу решений отечественных вендоров, нет ни одного коммерческого продукта, нацеленного именно на процесс моделирования угроз. Хотя сам процесс является одной из составляющих больших комплексных продуктов и решений. Зарубежные же коммерческие решения недоступны для практического использования в России. Но, как говорится, чем богаты…
О функциональности и подходах изученных решений к задачам моделирования угроз (далее — МУ) расскажу подробнее чуть позже. Пока же делюсь результатами проверки соответствия рассмотренных инструментов ГОСТу. Сразу хочется отметить, что выставленные оценки соответствия — это субъективный взгляд, так как каждый инструмент имеет свои нюансы и особенности реализации.
Что же до лидеров нашего условного рейтинга, то это, конечно, инструменты, где создается структурированная модель угроз уже «на входе». И неважно, рисуется ли она мышью в виде диаграммы (OWASP Threat Dragon, Microsoft TMT) или описывается текстом в YAML и коде (Threagile, TiCTaaC, PyTM). Главное, чтобы модель хранилась в машиночитаемом виде, и ее можно было переиспользовать.
Среди отстающих — инструменты, изначально заточенные не на МУ, а на другие задачи. Например, PlantUML и отчасти drawio-threatmodeling. Они хороши для визуализации, но хуже подходят для выполнения анализа рисков.
Типы инструментов для моделирования угроз
Как и обещал, перехожу от требований ГОСТа и критериев выбора к техническим и функциональным особенностям инструментов из нашего обзора. Далее приведем описание каждого из инструментов, поговорим о технологиях, на которых они строятся, разберем сильные стороны и ограничения решений, а также разобьем их на функциональные группы.
Диаграммные и визуальные GUI-инструменты
Это нестареющая классика, как Моцарт или Шекспир. С них в свое время начиналась автоматизация процессов моделирования угроз. Работа стартует с отрисовки схемы потоков данных, а GUI-инструмент подсказывает угрозы по встроенным шаблонам.
Главное преимущество подобных решений — низкий порог входа. Толковый архитектор или аналитик сможет быстро разобраться в интерфейсе и принципах работы такого инструмента. К тому же визуальные схемы и диаграммы легче воспринимаются не погруженными в тематику специалистами (например, менеджерами проектов или тестировщиками), чем текстовые описания и профильные технические документы.
Есть и «ложка дегтя»: модель угроз существует отдельно от кода приложения и обновляется вручную, а все ее последующие уточнения требуют четкого регламента и конкретного ответственного исполнителя.
|
Инструмент |
Описание |
Сильные стороны |
Ограничения |
|
Инструмент от OWASP, позволяющий создавать диаграммы объектов угроз (Threat Model Diagrams). Использует синтаксис, похожий на классические DFD (Data Flow Diagrams). Поддерживает интеграцию с GitHub. |
● понятный интерфейс ● работает в браузере и как десктоп-приложение ● интеграция с GitHub и GitLab ● поддержка STRIDE, LINDDUN, CIA, PLOT4ai и других методологий «из коробки» |
● диаграммы рисуются вручную ● плохо встраивается в автоматизированные пайплайны |
|
|
Классический инструмент для экосистемы Microsoft. Позволяет рисовать диаграммы и автоматически предлагает угрозы на основе шаблонов Microsoft SDL. |
● бесплатный ● богатая библиотека угроз (STRIDE) ● автоматическая генерация списка угроз ● тесная интеграция с Azure |
● работает только под Windows ● закрытый код ● устаревший интерфейс ● ограниченные возможности кастомизации ● почти нет автоматизации ● слабая поддержка стеков, отличных от Microsoft |
|
|
Набор кастомных библиотек для превращения бесплатного и кроссплатформенного приложения Draw.io в инструмент для моделирования угроз. |
● кросс-платформенность ● богатые библиотеки элементов ● инструмент моделирования (DFD, STRIDE, CAPEC) |
● отсутствие автоматического анализа угроз (только визуализация) |
|
|
Генератор UML-диаграмм из текста, часто используется для визуализации архитектуры. |
● интеграция с различными редакторами и CI/CD инструментами. ● простота описания диаграмм текстом ● поддержка Graphviz для сложных диаграмм ● кросс-платформенность |
● отсутствие библиотеки угроз; ● отсутствие автоматического анализа; ● специфический синтаксис, который нужно осваивать отдельно ● лицензионные ограничения для коммерческого использования |
Инструменты с model-as-code подходом
В этих решениях модель угроз хранится в виде текста — прямо в аннотациях к коду, в YAML-формате или в виде Python-скрипта. Такую модель можно удобно версионировать и при желании настроить автоматическую или авторизированную ее пересборку при изменении исходников и аннотаций. Это значительно упрощает выполнение требования ГОСТа по периодическому уточнению угроз и описанию поверхности атаки. Правда, узким местом становится дисциплина команды и отлаженность процессов. Стоит перестать обновлять описание вместе с исходниками, и модель угроз теряет актуальность.
|
Инструмент |
Подходы и функциональность |
Сильные стороны |
Ограничения |
|
Решение для легковесного анализа угроз. Вместо рисования сложных диаграмм пользователь описывает архитектуру в файле формата YAML, указывая активы, данные, связи между активами и границы доверия. |
● хорошая поддержка CI/CD ● расширяемые правила; ● набор показателей для оценки проекта; ● возможность гибкой настройки под любые стандарты ● архитектура описывается в YAML ● правила генерируют отчеты в Excel, JSON, PDF, PNG |
● нет визуального редактора, поддержки русского языка ● требует обучения ● отсутствуют интерактивные диаграммы — только статическая генерация ● нет импорта из других форматов |
|
|
Легковесное текстовое описание архитектуры в Markdown и YAML. |
● минималистичный подход ● поддержка принципов DevSecOps ● интеграция в Git |
● ограниченные возможности визуализации ● нет импорта из других форматов ● ограниченная функциональность по сравнению с Threagile |
|
|
Позволяет описывать модель угроз непосредственно на языке Python. Затем скрипт генерирует отчеты и различные диаграммы (DFD, Sequence) через Graphviz. |
● удобен для разработчиков ● версионируемые модели ● программный подход ● больше 100 угроз «из коробки» |
● требуются навыки программирования ● ограниченный интерфейс |
|
|
Инструмент для интеграции моделирования угроз в процесс разработки через аннотации в исходном коде. Разработчики и security-инженеры добавляют комментарии с информацией об угрозах, компонентах и мерах защиты непосредственно в код. |
● модель синхронизирована с кодом ● генерация JSON и Markdown отчетов ● поддержка C, C++, Go, Java, JS и еще нескольких языков ● угрозы описываются аннотациями прямо в коде |
● требует от команды дисциплины ● аннотации добавляются вручную |
Инструменты на основе карт и деревьев атак
В основе этих инструментов лежит взгляд на ПО со стороны нарушителя: важны не только сами компоненты ПО, но и пути доступа к ним (векторы атак). Обычно такие решения не закрывают полный цикл моделирования угроз, так как фокусируются не на отельных угрозах и их типах, и полноценных моделях угроз, а на сценарии атак злоумышленника. Это неплохое дополнение к ранее представленным инструментам при анализе сложных многошаговых сценариев атак.
|
Инструмент |
Подходы и функциональность |
Сильные стороны |
Ограничения |
|
Проект, направленный на создание переиспользуемых карт атак. Фокус на идентификации поверхности атаки и стратегий злоумышленников. |
● простая концепция ● наследуемые модели атак ● фокус на практических сценариях |
● сравнительно молодой проект ● ограниченная автоматизация ● многие действия приходится выполнять вручную |
|
|
Веб-приложение для построения атакующих деревьев решений. Позволяет создавать бинарные деревья для моделирования сценариев атак с оценкой вероятностей. |
● визуализация древа атак ● экспорт в JSON ● простой UI ● веб-версия доступна бесплатно |
● узкая функциональность ● не закрывает полный цикл моделирования угроз |
Инструменты на базе ИИ и экосистемы
В таких решениях языковая модель генерирует первичный список угроз, анализируя представленные описания функциональности, архитектуры и назначения ПО. Подобный подход значительно ускоряет начальный этап Threat modeling. Однако полученные результаты требуют тщательной верификации, поскольку нейронки часто ошибаются, придумывают несуществующие угрозы или, наоборот, пропускают актуальные. Словом, на ИИ надейся, но и сам не плошай.
|
Инструмент |
Подходы и функциональность |
Сильные стороны |
Ограничения |
|
AI-powered инструмент для автоматизированного моделирования угроз. Использует искусственный интеллект для анализа описания сервиса в формате YAML и генерации угроз на основе STRIDE и OWASP. |
● автоматизация за счет AI ● поддержка разных моделей ● визуализация потоков данных ● возможность кросс-валидации результатов ● интерактивные HTML-отчеты |
● нужны API ключи для OpenAI/Anthropic (платные) ● качество результата зависит от модели ● нужна ручная проверка ложных срабатываний |
|
|
ECO-система инструментов от AWS для моделирования угроз, включающая несколько взаимодополняющих компонентов: расширение VS Code. |
● многофункциональная экосистема ● AI-автоматизация ● интеграция с AWS Toolkit ● свободно распространяемое веб-приложение ● активная разработка от AWS Labs |
● экспериментальный статус части компонентов, включая AI CLI ● большие временные затраты на освоение экосистемы |
Инструменты и форматы вне функциональных групп
Теперь рассмотрим несколько подходов к моделированию угроз, которые выбиваются из нашей стройной классификации и не относятся ни к одной из перечисленных технологических групп.
Комплексные платформы
В эту категорию попал всего один инструмент — CAIRIS. Хотя слово «инструмент» здесь не совсем уместно — скорее, это целая «коробка» утилит для развертывания среды разработки и тестирования веб-приложений на Python. CAIRIS охватывает МУ, анализ рисков, управление требованиями безопасности, моделирование архитектуры и т. д. У платформы есть API для интеграций, а также она поддерживает импорт/экспорт данных.
Недостатки такого «швейцарского ножа» — высокий порог входа и сложный интерфейс. CAIRIS в основном ориентирован на масштабную академическую и исследовательскую среду, для небольшого же проекта его функциональность может оказаться избыточной.
|
Инструмент |
Подходы и функциональность |
Сильные стороны |
Ограничения |
|
Комплексная платформа для моделирования безопасных и удобных систем, поддерживающая UI, требования и анализ рисков. |
● комплексный подход к безопасности ● открытый исходный код ● активная разработка ● богатый функционал ● возможность настройки под требования организации ● анализ рисков ● работа с архитектурными моделями ● интерактивные диаграммы |
● не самый интуитивный интерфейс, требуется время для изучения инструмента и внедрения в процессы ● фокус на академических/исследовательских сценариях ● может быть избыточным для простых проектов ● сложен как система для быстрого старта |
Инструменты геймификации
Игровые форматы не претендуют на соответствие ГОСТу — их можно рассматривать лишь как забавное дополнение к ранее описанным базовым решениям.
Яркий пример такой геймификации — Elevation of Privilege (EoP). Это игра с открытым исходным кодом, которая помогает разработчикам выявлять уязвимости на ранних этапах жизненного цикла ПО. Команды используют карты с мастями, соответствующими пунктам методологии STRIDE (Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege), чтобы моделировать угрозы для новых сервисов. После такой сессии доска пестрит угрозами, а команда вместо скучающих взглядов демонстрирует живой интерес: споры о подмене токенов и утечках логов становятся нормой.
Другая популярная карточная игра для моделирования угроз — OWASP Cornucopia, где масти соответствуют отдельным направлениям безопасности (например, аутентификации, криптографии, управлению доступом, защите данных). Большинство таких инструментов доступно как в физическом, так и в онлайн-формате, что удобно для территориально распределенных команд и дистанционных встреч. Если процесс моделирования угроз уже налажен и отвечает требованиям ГОСТа, то почему бы не добавить немного «игры» в обсуждение уязвимостей?
Инструменты, которые нельзя отнести к другим категориям
Есть еще парочка инструментов (Materialize Threats и MAL), которые сложно отнести к ранее описанным категориям, поэтому я решил оставить для них отдельное место в статье.
|
Инструмент |
Подходы и функциональность |
Сильные стороны |
Ограничения |
|
Уникальный инструмент, который загружает диаграммы архитектуры из draw.io в базу данных, представляет их как графы и позволяет использовать SQL для анализа потоков данных. |
● SQL-анализ графов; ● работа со стандартными draw.io диаграммами ● генерирует файлы сценариев в формате Gherkin для тестирования ● поддерживает методологию Rapid Threat Model Prototyping (RTMP) |
● проект давно не обновлялся ● нужны знания в SQL ● скудная техническая документация |
|
|
Предметно-ориентированный язык для создания систем моделирования киберугроз и симуляции атак. Позволяет описывать тактики, методы и процедуры атакующих (ATT&CK-like подход) и моделировать их влияние на систему. |
● подходит для сложных сценариев атак ● формальная спецификация ● поддерживается сообществом |
● необходимость погружения в язык и теорию графов ● невозможность быстрого старта |
Вместо заключения
И напоследок хотелось бы поделиться сводной таблицей соответствия выделенных мною ключевых критериев выбора инструмента моделирования угроз, а также поговорить о возможных комбинациях данных инструментов.
Ниже представлю таблицу дополнительных критериев соответствия инструментов:
Сопоставление инструментов по отдельным критериям вовсе не означает, что нужно выбрать один из них. Считаю, что важны не отдельные инструменты и подходы, а их комбинации. Выбор рабочей связки зависит от конкретных задач и особенностей ПО.
|
Сценарий |
Рекомендуемый инструмент |
Обоснование |
|
Моделирование угроз, автоматизация |
OWASP Threat Dragon + Threagile |
Threat Dragon для визуального моделирования, Threagile для интеграции и автоматизации. |
|
Формальное моделирование, анализ сценариев |
MAL + CAIRIS |
Формальная спецификация (MAL), комплексный анализ (CAIRIS). |
|
Анализ поверхности атаки |
Raindance + OWASP Threat Dragon |
Карта атак (Raindance), визуализация и обсуждение (Threat Dragon). |
|
Обучение команд, workshops |
Elevation of Privilege |
Образовательный инструмент, игровой формат, не требует технической подготовки. |
|
Визуализация архитектуры |
PlantUML + drawio-THM |
PlantUML для генерации диаграмм из описаний, drawio-THM для совместной работы в привычном интерфейсе. |
|
Комплексная платформа |
CAIRIS |
Широкий спектр возможностей, но требует времени на освоение. |
|
AI-поддержка и автоматизация |
TaaC-AI + Threat Composer |
Решение с AI и экосистемой инструментов. |
|
Моделирование на основе данных |
PyTM + Materialize |
PyTM для программного моделирования на Python, Materialize для автоматизации из архитектурных данных. |
|
Моделирование в IDE |
TiCTaaC + Threatspec |
Интеграция с IDE и аннотации в коде, полный цикл для разработчика. |
|
Автоматизация отчетов |
Threagile + PlantUML |
Генерация отчетов и диаграмм для технической документации. |
Впрочем, какое сочетание инструментов мы бы ни собрали, часть задач по моделированию угроз всё равно придется выполнять вручную или дорабатывать инструменты под себя.
А чем моделируете угрозы вы, и что оказалось решающим при выборе: покрытие требований госстандарта или удобство команды? Получается ли поддерживать модель угроз в актуальном состоянии при активной разработке, и кто в команде за это отвечает? Наконец, какое из семи требований ГОСТа по МУ оказалось сложнее всего выполнить? Не стесняйтесь и делитесь своим опытом в комментариях.
Ссылки на полезные ресурсы
-
ГОСТ Р 56939-2024: Разработка безопасного программного обеспечения. Общие требования
-
Банк данных угроз ФСТЭК России: https://bdu.fstec.ru/
-
ГОСТ Р 58412-2019: Угрозы безопасности информации при разработке программного обеспечения
-
Awesome Threat Modeling: https://github.com/hysnsec/awesome-threat-modelling
-
Threat Modeling Manifesto: https://www.threatmodelingmanifesto.org
-
CAPEC (Common Attack Pattern Enumeration and Classification): https://capec.mitre.org/
-
MITRE ATT&CK: https://attack.mitre.org/
-
CWE (Common Weakness Enumeration): https://cwe.mitre.org/
Автор: garda_team


