Application Threat Modeling или чего не хватает вашим приложениям

Моделирование угроз – это структурированный подход, который позволяет количественно определить и устранить риски безопасности связанные с приложением. Главная причина, вынуждающая заниматься моделированием опасностей, в том, что невозможно создать по-настоящему защищенную систему, не выяснив, что именно ей грозит. Целью является смягчение потенциальных проблем безопасности на ранних этапах, когда их исправление относительно легко и экономически эффективно. В качестве бонуса моделирование позволяет лучше разобраться в приложении, а модели угроз помогают новым сотрудникам в деталях понять как устроено приложение. Если вы никогда до этого не анализировали опасности, которые грозят системе, то наверняка в защите есть такие бреши, о которых вы даже не подозреваете!

Основные шаги при моделировании угроз:
1. Декомпозиция приложения на объекты под угрозой.
2. Определение опасностей, грозящих системе.
3. Построение деревьев угроз.
4. Оценка риска безопасности для каждого дерева.
5. Сортировка опасностей в порядке убывания степени их серьезности.
6. Выбор методов борьбы с опасностями.
7. Отбор технологий для выбранных методов борьбы с опасностями.

Участники могут не разбираться в коде приложения, но они должны знать, как ранее взламывались подобные приложения. Это важно, потому что моделирование опасностей приносит больше пользы, если его выполняют люди, разбирающиеся в методах атак.

ДЕКОМПОЗИЦИЯ ПРИЛОЖЕНИЯ

На первом шаге моделирования угроз необходимо понять как работает приложение, как оно взаимодействует с внешним миром. Это предполагает создание сценариев использования, определение точек входа, идентификацию конфиденциальных данных, определение прав доступа. Эта информация будет использоваться для построения диаграмм потоков данных(data flow diagrams, DFD). Принцип заложенный в диаграммы потоков данных позволяет разбить приложение на подсистемы, а те, в свою очередь, на более мелкие подсистемы следующего уровня. При создании диаграмм нужно спускаться по уровням. Достаточным следует считать уровень, на котором начинают проявляться возможные опасности.

Диаграмма потоков данных для приложения “Электронный журнал”. Уровень 0.

Диаграмма потоков данных для приложения “Электронный журнал”. Уровень 1.

Список основных компонент приложения “Электронный журнал”:
1. Преподаватель.
2. Ученик.
3. Пользовательский интерфейс.
4. Интерфейс обновления данных.
5. Сервер приложения.
6. Данные аутентификации.
7. Бизнес-логика работы с данными об успеваемости.
8. Бизнес-логика интерфейса обновления данных.
9. Сервер базы данных.
10. Данные об успеваемости.
Это упрощенный пример, в реальных приложениях количество уровней и компонент системы может быть намного больше.

ОПРЕДЕЛЕНИЕ ОПАСНОСТЕЙ, ГРОЗЯЩИХ СИСТЕМЕ

Следующий этап – отбор полученных в результате декомпозиции компонентов и использование их в процессе моделирования в качестве подвергающихся угрозам объектов. При анализе опасностей следует исследовать каждый компонент, а для этого необходимо ответить на следующие вопросы:

  • Может ли неавторизованный пользователь просматривать конфиденциальные данные, пересылаемые по сети?
  • Может ли посторонний пользователь изменить записи базы данных?
  • Может ли кто-то помешать работе правомочных пользователей с приложением?
  • Может ли кто-то воспользоваться недоставками функции или компонента для получения полномочий администратора?

Чтобы ответить на эти вопросы сначала придется разбить угрозы на категории.
Классификация опасностей: методика STRIDE

А теперь о том, как определять опасности, грозящие системе. Необходимо построить так называемые деревья угроз (threat trees) и применить к ним классификацию STRIDE. Вот примеры таких деревьев:

Дерево угроз для опасности №1.

Дерево угроз для опасности №2.

Дерево угроз для опасности №3.

Помните, такие деревья нужно построить для каждого объекта под угрозой, нами рассмотрена лишь часть деревьев! На данных деревьях пунктиром указаны маловероятные угрозы, а сплошной линией наиболее вероятные. В вершине каждого дерева описана опасность и ее принадлежность к классификации STRIDE.

РАСПРЕДЕЛЕНИЕ УГРОЗ ПО МЕРЕ УБЫВАНИЯ ИХ СЕРЬЕЗНОСТИ

Самый простой способ определить серьезность угрозы это воспользоваться следующей формулой:
<Риск> = <Потенциальный ущерб> * <Вероятность возникновения>
Но мы воспользуемся более распространенной методикой оценки рисков DREAD.

  • Потенциальный ущерб (Damage potential).
    • 0 – без ущерба.
    • 5 – ущерб только индивидуальным пользовательским данным.
    • 10 – ущерб всей системе или полное разрушение данных.
  • Воспроизводимость (Reproducibility).
    • 0 – очень сложно или невозможно, даже для администраторов приложения.
    • 5 – необходимо несколько шагов, возможно нужен авторизованный пользователь.
    • 10 – кроме желания ничего не требуется.
  • Подверженность взлому (Exploitability).
    • 0 – нужны навыки программирования и знание сетей, а так же приватный софт.
    • 5 – публичный софт или легкое применение существующих.
    • 10 – не требуется никаких специальных инструментов.
  • Круг пользователей, попадающих под удар (Affected users).
    • 0 – никто не пострадал.
    • 5 – некоторые, но не все.
    • 10 – все пользователи.
  • Вероятность обнаружения (Discoverability).
    • 0 – очень сложно, требуется исходный код или административный доступ.
    • 5 – можно обнаружить догадавшись или используя мониторинг сетевого траффика.
    • 10 – информация у всех на виду.

Попробуем определить риски для угрозы №1
Потенциальный ущерб: 9
Воспроизводимость: 10
Подверженность взлому: 7
Пользователи под ударом: 10
Вероятность обнаружения: 10
Общая оценка: 9

Для угрозы №2 риски будут такими
Потенциальный ущерб: 10
Воспроизводимость: 5
Подверженность взлому: 5
Пользователи под ударом: 10
Вероятность обнаружения: 10
Общая оценка: 8

Для угрозы №3
Потенциальный ущерб: 10
Воспроизводимость: 2
Подверженность взлому: 2
Пользователи под ударом: 8
Вероятность обнаружения: 10
Общая оценка: 6,4

После вычисления риска всех опасностей нужно отсортировать их в порядке убывания оценки, начиная с наибольшей.

ВЫБОР МЕТОДОВ БОРЬБЫ С ОПАСНОСТЯМИ

Ниже представлены основные методы борьбы с угрозами.
Подмена сетевых объектов (Spoofing identity):

  • Надежный механизм аутентификации.
  • Защита секретных данных.
  • Отказ от хранения секретов.

Модификация данных (Tampering with data):

  • Надежный механизм авторизации.
  • Использование хешей.
  • MAC-коды.
  • Цифровые подписи.
  • Протоколы, предотвращающие прослушивание трафика.

Отказ от авторства (Repudiation):

  • Цифровые подписи.
  • Метки даты и времени.
  • Контрольные следы.

Разглашение информации (Information disclosure):

  • Авторизация.
  • Протоколы с усиленной защитой от несанкционированного доступа.
  • Шифрование.
  • Защита секретов.
  • Отказ от хранения секретов.

Отказ в обслуживании (Denial of service):

  • Надежный механизм аутентификации.
  • Надежный механизм авторизации.
  • Фильтрация.
  • Управление числом входящих запросов.
  • Качество обслуживания.

Повышение привилегий (Elevation of privilege):

  • Выполнение с минимальными привилегиями.

Как вы помните, опасность №1 принадлежит к угрозам разглашения информации(I), опасность №2 к угрозам модификации данных(T), а опасность №3 к угрозам подмены сетевых объектов(S). На основе этих данных мы можем выбрать необходимые методы для защиты нашего приложения. Так, для предотвращения опасности №1 можно использовать шифрование канала связи между клиентом и сервером. Для предотвращения опасности №2 я бы предложил использование MAC-кодов. Для устранения опасности №3 можно использовать инфраструктуру открытых ключей(PKI) для аутентификации сервера.

ПОДБОР ТЕХНОЛОГИЙ ДЛЯ ВЫБРАННЫХ МЕТОДОВ БОРЬБЫ С ОПАСНОСТЯМИ

На последнем шаге обычно выбираются технологии. В данном случае самой подходящей и достаточной является TLS. Это далеко не единственный вариант, в следующих статьях я расскажу когда стоит отойти от этого протокола и почему.

РЕЗЮМЕ

Итак, сначала путем функциональной декомпозиции мы определили объекты под угрозой, затем по методике STRIDE выявили опасности, грозящие каждому компоненту, далее с помощью деревьев угроз определили, каким образом угрозы превратятся в уязвимые места, отсортировали по методике DREAD и, наконец, выбрали методы и технологии борьбы с угрозами. И помните – использование в приложении всех случайных технологий обеспечения безопасности не сделает его защищенным.

полезные ссылки:

Microsoft Threat Modeling Tool – помимо рисования графиков, умеет генерировать интересные отчеты.
Frank Swiderski, Window Snyder, “Threat Modeling”, Microsoft – книга, хорошо описывающая зачем и как правильно строить модели угроз.

Если вам нравятся мои статьи, можете следить за обновлениями с помощью E-Mail, Twitter, Facebook, а также канала в Telegram.