«Если моделирование атак выглядит просто на диаграмме, значит, вы не думали о вычислительных процессах за ней. Иерархическая структура, которую мы называем деревом, превращается в математическую проблему экспоненциальной сложности, как только начинаем её анализировать. Графы ещё хуже — они моделируют настоящий хаос сети. В российском ИБ, где нужно формализовать угрозы для ФСТЭК, это не просто теория, а вопрос выбора инструмента, который не сломается под реальной нагрузкой.»
Что скрывается за визуальной простотой
Деревья атак (Attack Trees) и графы атак (Attack Graphs) — стандартные инструменты для моделирования угроз. На схемах они выглядят логично и понятно: узлы обозначают цели или условия, рёбра — шаги злоумышленника. Такую модель можно показать на совете по безопасности или приложить к документации по 152-ФЗ как формализацию угроз. Однако визуальное представление обманчиво. Оно не отражает вычислительную сложность анализа этих структур. Алгоритмы, которые должны автоматически находить уязвимые пути или рассчитывать риски, сталкиваются с задачами, чья сложность растёт нелинейно с увеличением модели.
Проще говоря, добавление десятка новых узлов в дерево может увеличить время его анализа в сотни раз. Для графов, которые описывают сетевые взаимодействия, проблема масштабируется ещё быстрее. Это приводит к ситуации, когда инструмент, идеальный для небольшой изолированной системы, становится бесполезным для анализа корпоративной сети или сложного приложения.
В контексте регуляторных требований, особенно ФСТЭК, это создаёт парадокс. С одной стороны, от организаций требуют всестороннего анализа угроз и оценки защищённости. С другой — практические инструменты для такого анализа могут быть вычислительно неподъёмными для реальных инфраструктур, заставляя либо упрощать модели до бессмысленности, либо отказываться от автоматизированного анализа в пользу ручного, субъективного и потенциально неполного.
Деревья атак: от иерархии к комбинаторному взрыву
Дерево атак, это иерархическая модель, где корневой узел представляет конечную цель атаки (например, «получить доступ к БД»), а листья — базовые атакующие действия или условия. Узлы соединяются логическими операторами И (AND) и ИЛИ (OR).
Задача анализа такого дерева — найти все минимальные наборы листовых узлов (атакующих шагов), выполнение которых приводит к достижению корневой цели. Это классическая задача поиска минимальных разрезов (Minimal Cut Sets) в дереве отказов, перенесённая в ИБ. Алгоритмически она решается обходом дерева снизу вверх с применением законов булевой алгебры.
Проблема начинается с оператора И. Чтобы удовлетворить условию «И», необходимо выполнить все дочерние узлы. При анализе это означает, что наборы условий из разных ветвей объединяются (декартово произведение). Количество результирующих наборов растёт мультипликативно. Дерево с несколькими вложенными операторами И может породить тысячи или миллионы комбинаций для проверки. Алгоритмическая сложность этой задачи в худшем случае экспоненциальна относительно количества узлов, что относит её к классу NP-трудных задач.
На практике это означает, что автоматический анализ большого, детализированного дерева атак может занять часы или дни, даже на мощном сервере. Для оперативного принятия решений в ИБ-процессах такие задержки неприемлемы.
Графы атак: мир достижимости и петель
Графы атак — более мощная и сложная модель. Они отображают не иерархию целей, а состояние атакуемой системы. Узлы графа, это состояния (например, «злоумышленник имеет права пользователя на хосте А», «уязвимость CVE-XXXX на порту 80 открыта»). Рёбра, это действия атакующего, переводящие систему из одного состояния в другое. Конечная цель — достичь состояния-«джекпота» (например, «административный доступ к контроллеру домена»).
Задача анализа графа — найти все возможные пути от начальных состояний (например, «доступ из интернета») к целевым. Это задача поиска путей в ориентированном графе, усложнённая несколькими факторами:
- Циклы (петли): Атакующие действия могут создавать петли. Например, получив доступ к одному хосту, можно атаковать другой, а с него — вернуться к первому с новыми привилегиями. Простые алгоритмы обхода графа (DFS, BFS) могут зациклиться. Требуются более сложные методы, учитывающие изменение атрибутов состояния.
- Экспоненциальный рост числа путей: В сетевом графе даже средней сложности количество возможных путей от точки входа к цели может быть астрономическим. Полный их перебор невозможен. Алгоритмы используют эвристики, обрезку маловероятных ветвей или анализ не путей, а условий достижимости (model checking).
- Зависимость от входных данных: Построение самого графа требует полных данных о топологии сети, конфигурациях, уязвимостях (сканирование, базы CVE). Неточность этих данных делает анализ графа бесполезным.
Сложность анализа графов атак также относится к классу экспоненциальных. Инструменты для их построения и анализа часто работают в ограниченном масштабе или требуют агрессивной агрегации состояний, что снижает детализацию и точность модели.
Алгоритмические подходы и их ограничения
Для борьбы со сложностью используются специфические алгоритмы и упрощения.
Для деревьев атак
- Модульная декомпозиция: Большое дерево разбивается на независимые поддеревья, которые анализируются отдельно. Это требует ручного структурирования модели.
- Эвристическое ранжирование: Вместо поиска всех возможных наборов, алгоритм ищет наиболее вероятные или наименее затратные для атакующего, основываясь на весах, присвоенных листьям (стоимость, сложность, обнаруживаемость). Это превращает задачу в разновидность поиска оптимального пути.
- Булево сжатие: Применение законов булевой алгебры для упрощения дерева перед анализом (например, удаление избыточных условий).
Для графов атак
- Symbolic Model Checking: Вместо перечисления всех путей, алгоритм работает с множествами состояний, используя бинарные диаграммы решений (BDD). Это позволяет эффективно проверять свойства достижимости для очень больших пространств состояний, но требует специализированных знаний для настройки.
- Статический анализ на основе свойств: Система описывается на специальном языке (например, с использованием темпоральной логики), а инструмент проверяет, можно ли из начальных состояний достичь состояния, нарушающего заданное свойство безопасности. Это мощный, но абстрактный подход.
- Ограничение глубины поиска: Анализ ведётся только для путей, длина которых не превышает заданный порог (например, не более 10 шагов атаки). Это грубое, но практичное упрощение, так как многошаговые атаки высокой длины часто маловероятны.
Несмотря на эти методы, фундаментальные ограничения остаются. Выбор подхода всегда является компромиссом между полнотой анализа, его скоростью и потребляемыми ресурсами.
Последствия для практики и регуляторики
Понимание алгоритмической сложности напрямую влияет на работу специалистов и выполнение требований.
- Выбор инструмента: При выборе ПО для моделирования угроз (например, для создания модели угроз по ФСТЭК) критически важно оценить, как оно справляется с анализом. Демонстрация на маленьких примерах ничего не доказывает. Нужно спрашивать о лимитах: сколько узлов/состояний обрабатывает инструмент за разумное время, как он борется с комбинаторным взрывом.
- Качество модели: Понимая, что детализация ведёт к вычислительной катастрофе, архитектор модели должен балансировать. Излишняя детализация каждого шага сделает модель неанализируемой. Слишком высокая абстракция сделает её бесполезной для выявления конкретных уязвимостей. Нужно выделять критичные подсистемы для детального моделирования, а остальное описывать агрегированно.
- Требования регуляторов (ФСТЭК, 152-ФЗ). Требования часто сформулированы на высоком уровне: «проведение анализа угроз безопасности информации». Они не предписывают конкретные алгоритмы. Это даёт свободу, но и накладывает ответственность. Организация должна быть готова обосновать, почему выбранный метод анализа (пусть и упрощённый) является адекватным для её инфраструктуры. Документация по модели угроз должна содержать не только саму модель, но и описание допущений и ограничений, принятых при её анализе.
- Автоматизация Security Operations: Системы класса SOAR или скрипты для автоматического анализа рисков, использующие деревья или графы, могут стать узким местом. Длительный расчёт может задержать реакцию на инцидент. Необходимо проектировать такие системы асинхронно или с кэшированием результатов анализа для типовых состояний.
Стоит ли игра свеч?
Учитывая все сложности, возникает резонный вопрос: а нужны ли эти сложные формальные модели в российской практике, где часто достаточно качественного, экспертного анализа?
Ответ неоднозначен. Для небольших систем с понятными границами (например, изолированное веб-приложение) дерево атак, построенное даже в графическом редакторе, — отличный способ структурировать мысли и убедиться, что рассмотрены все вектора. Его ручной анализ вполне допустим.
Для крупных, распределённых и изменчивых инфраструктур (облачные платформы, сети банков) ручной анализ неполон и непоследователен. Здесь формальные модели и их автоматизированный анализ, несмотря на всю сложность, становятся не роскошью, а необходимостью. Они позволяют:
- Учесть взаимодействия компонентов, которые человек может упустить.
- Повторно проводить анализ при каждом изменении конфигурации (CI/CD для безопасности).
- Количественно оценивать влияние внедрения нового средства защиты на общую картину угроз.
Ключ в осознанности. Использование attack trees и attack graphs, это не про рисование красивых схем для отчёта. Это про принятие инженерного решения с учётом фундаментальных ограничений вычислимости. Сложность анализа — не недостаток этих моделей, а их неотъемлемое свойство, которое нужно учитывать при проектировании процесса управления угрозами. Игнорирование этого свойства ведёт к выбору неподходящих инструментов и, как следствие, к созданию иллюзии защищённости, что в условиях регуляторного давления может оказаться хуже, чем открытое признание ограничений применяемых методов.