Неформальное руководство по моделям угроз: как думать о безопасности системы

Неформальное руководство по моделям угроз: как думать о безопасности системы

Модель угроз, это систематический подход к анализу безопасности, доступный каждому разработчику, а не только специалистам. Статья рассказывает о семи ключевых вопросах, которые должна охватывать любая модель: что защищаем, кто может это атаковать, как это может произойти, какие защиты установить, как связаны активы, какие допущения мы делаем и от каких угроз намеренно отказываемся. Автор подчёркивает, что модель угроз, это живой документ, который нужно обновлять при изменении системы. Практический подход включает картирование компонентов системы (как графа, а не списка), анализ входов-выходов каждого компонента и итеративное углубление от высокоуровневых вопросов к деталям. Автор приводит пример собственного проекта (key transparency для Fediverse) как хорошую модель, анализирует тяжелые недостатки в модели Matrix (просто список атак без контекста активов и допущений) и отмечает, что даже несовершенная модель лучше, чем её полное отсутствие. Вывод: хорошо проработанная модель угроз позволяет дизайнерам заранее понять уязвимости, спроектировать защиту и построить «defense-in-depth», где атакующий попадает в предсказуемые тупики.

Ключевые факты

  • Модель угроз отвечает на семь критических вопросов: что защищаем, кто нападает, как нападает, чем защищаемся, как связаны активы, какие предположения, от каких угроз отказываемся
  • Система должна описываться как граф взаимосвязанных компонентов, а не как список изолированных элементов, неправильные связи между компонентами могут создавать новые вектора атак
  • Явное описание допущений критично: если допущение неверно, вся модель становится неполной или требует переоценки принятых рисков
  • Пример Matrix: даже их опубликованная модель уже 5 лет содержит только список атак без описания активов, отношений между ними и явных допущений
  • Threat modeling, это итеративный процесс: начните с высокоуровневых вопросов, потом углубляйтесь в детали, и обновляйте документ при изменении системы

Почему это важно

В эпоху кибератак и сложного законодательства понимание собственных уязвимостей, основа надёжной системы. Многие разработчики либо игнорируют модели угроз как излишний формализм, либо переусложняют их. Неформальный подход Soatok показывает, что простое систематическое мышление о том, что защищаем и от чего, позволяет выявить дыры в дизайне до продакшена. Это особенно важно для end-to-end encrypted систем, где крипто-допущения могут быть неправильно поняты (пример: Invisible Salamanders attack работает только если вы предположили, что один ключ на сообщение, но внедрили reporting с несколькими ключами).

Кому это важно

Разработчики, архитекторы и product-менеджеры любых систем, обрабатывающих чувствительные данные, от мессенджеров до платёжных систем, от инфраструктуры до IoT. Также специалистам в области кибербезопасности, которые хотят помочь командам мыслить структурированно. Даже стартапы, которые думают, что security, это забота позже, выигрывают от ранней модели угроз.

Как это применить

Начните с простого шаблона семи вопросов и заполняйте его в текстовом редакторе. Затем нарисуйте граф компонентов системы (на бумаге или в цифровом виде) и отметьте связи между ними. Для каждого компонента или слоя абстракции переходите через 7 вопросов заново, как будто вы уменьшали масштаб на карте. Документируйте допущения явно, именно они часто содержат неожиданные дыры. Не пытайтесь покрыть ВСЕ возможные атаки; вместо этого определите, какие вы принимаете как открытые риски. Обновляйте модель всякий раз, когда архитектура существенно меняется.

Можно ли доверять

Да, с оговорками. Автор, криптограф и специалист в e2ee, его подход обоснован и подтвержден примерами из собственного опыта. Статья содержит критику Matrix с конкретными ссылками на их официальную модель, и эта критика справедлива (Matrix действительно опубликовал модель, которая не соответствует лучшим практикам). Однако это мнение одного эксперта; другие могут добавить нюансы. Автор честен о том, что не ищет академическую полноту и даже свою собственную модель считает возможно неполной.

Риски и подводные камни

Главный риск, создать модель угроз и затем забросить её, рассчитывая, что она вечна. Системы меняются, появляются новые атаки, допущения устаревают. Второй риск, чрезмерный формализм: потратить месяц на документ, который никто не будет поддерживать. Третий, выдумать защиты против воображаемых атак, на которые нет ресурсов, и пренебречь реальными уязвимостями. Наконец, модель угроз предполагает, что вы честно признаёте неизвестные неизвестные (unknown unknowns), есть риск, что что-то важное окажется за пределами вашей модели именно потому, что вы о нём не подумали.

«Защитники должны всегда быть правы, атакующие только один раз. Но хорошо экипированные защитники могут выбрать поле боя.»

— Soatok, со ссылкой на Sun Tzu