Основы безопасности
Триада CIA: конфиденциальность, целостность и доступность
Триада CIA на бытовых примерах: конфиденциальность, целостность и доступность, проверка хешей и подписей и десять инцидентов для классификации.
Диаграммы потоков данных, границы доверия и шесть категорий STRIDE, а затем модель локального OWASP Juice Shop в Threat Dragon.
STRIDE — список из шести категорий угроз: spoofing (подмена личности), tampering (подделка данных), repudiation (отказ от совершённых действий), information disclosure (раскрытие информации), denial of service (отказ в обслуживании) и elevation of privilege (повышение привилегий). Microsoft использует его в своих рекомендациях по моделированию угроз. Сам STRIDE угроз не находит. Он даёт шесть вопросов к каждой части проекта, чтобы результат не зависел от того, что вы случайно вспомнили в конкретный день.
Этот метод применяют раньше большинства инструментов безопасности. Сканер смотрит на работающую систему. Модель угроз смотрит на замысел: какие есть компоненты, какие данные между ними движутся и где меняется уровень доверия. Начать можно с бумаги и ручки, когда кода ещё нет.
Многие сбои веб-безопасности — ошибки проектирования. Сервер верит цене, которую прислал браузер. Админский маршрут проверяет, что пользователь вошёл, но не проверяет, что он админ. В лог-файл попадают токены сессий. Каждую такую проблему можно исправить в коде, но код часто точно соответствует полученному проекту. Проблема начинается с проекта.
OWASP Threat Modeling Cheat Sheet говорит о том же. Чтобы понять, какие угрозы применимы, нужно разобраться в потоках данных, границах доверия и других частях системы. Модель угроз фиксирует это понимание в виде, который могут проверить другие люди.
В диаграмме потоков данных (DFD) есть четыре вида элементов:
Диаграмма должна умещаться на одной странице. Если нужна вторая, вы, вероятно, рисуете две системы.
Граница доверия — линия, на которой данные переходят из области с одним уровнем доверия в область с другим. Ваш сервер находится внутри этой линии. Браузер снаружи, потому что его пользователь может изменить любой запрос, прежде чем тот дойдёт до вас. Каждый поток, пересекающий границу, нуждается в валидации, и на этих пересечениях находится большинство интересных угроз. OWASP cheat sheet называет такие пересечения вероятными точками атаки.
Границы проходят не только по краю сети. Границей может быть процесс, работающий под другой учётной записью операционной системы, сторонний провайдер удостоверений или база данных, принимающая соединения от нескольких сервисов.
Каждая категория нарушает одно свойство безопасности.
| Категория | Какое свойство нарушает | Какой вопрос задать |
|---|---|---|
| Spoofing | Аутентификация | Может ли кто-то выдать себя за другого пользователя, сервис или компонент? |
| Tampering | Целостность | Могут ли данные измениться при передаче или хранении так, что никто этого не заметит? |
| Repudiation | Подотчётность | Может ли кто-то отрицать действие, если нет записи, доказывающей обратное? |
| Information disclosure | Конфиденциальность | Может ли кто-то прочитать данные, которые не должен видеть? |
| Denial of service | Доступность | Может ли кто-то замедлить этот компонент или сделать его недоступным? |
| Elevation of privilege | Авторизация | Может ли кто-то сделать больше, чем ему разрешено? |
Это соответствует описаниям в документации Microsoft по моделированию угроз. Spoofing, например, означает использование аутентификационных данных другого пользователя.
Не каждая категория подходит к каждому элементу. Распространённая стартовая карта, которая используется во многих инструментах моделирования угроз, выглядит так: внешним сущностям достаются spoofing и repudiation; процессам все шесть; хранилищам данных tampering, repudiation, information disclosure и denial of service; потокам данных tampering, information disclosure и denial of service. Считайте эту карту подсказкой. Если категория кажется неприменимой к элементу, запишите почему, чтобы проверяющий мог это оспорить.
Для небольшой функции шаги с 1 по 5 могут занять час. В первый раз будьте готовы перерисовать диаграмму хотя бы однажды. Это нормально.
OWASP Juice Shop — намеренно небезопасное веб-приложение для обучения. В этой лабораторной работе вы его не эксплуатируете. Вы рисуете его устройство, перечисляете угрозы и записываете меры защиты. Угрозы берутся из чтения проекта, атаковать приложение для этого не нужно.
Запускайте лабораторию только на своей машине с привязкой к 127.0.0.1. Если вы ещё не настроили контейнер, сначала пройдите OWASP Juice Shop в Docker.
Вам нужны:
На тестовой машине, использованной для этой статьи, git --version напечатал:
git version 2.49.0.windows.1docker run --rm -d --name juice-shop-lab -p 127.0.0.1:3000:3000 bkimminich/juice-shopЧасть -p 127.0.0.1:3000:3000 публикует порт только на loopback-интерфейсе, поэтому другие компьютеры в вашей сети до него не дотянутся.
Убедитесь, что веб-приложение отвечает:
curl -sI http://127.0.0.1:3000/ | head -n 1На тестовой машине первая строка вывода была такой:
HTTP/1.1 200 OKУбедитесь, что отвечает API. Это обычный GET-запрос списка товаров:
curl -s -o /dev/null -w "products %{http_code} %{content_type}\n" http://127.0.0.1:3000/api/ProductsВывод:
products 200 application/json; charset=utf-8Проверьте версию, которую сообщает приложение:
curl -s http://127.0.0.1:3000/rest/admin/application-versionВывод:
{"version":"20.3.0"}Такую версию образ сообщил 8 ноября 2026 года на тестовой машине. Ваш образ может сообщить другую. Запишите версию, которую видите, потому что модель угроз описывает конкретный релиз.
Скачайте сборку для десктопа под вашу операционную систему со страницы релизов, установите её и откройте. Названия пунктов меню в шагах ниже для этой статьи не сверялись со сборкой Threat Dragon, и они меняются от релиза к релизу. Сопоставляйте их с тем, что показывает ваша сборка.
Создайте новую модель угроз и добавьте такие элементы:
Модель должна выглядеть так:
Browser (external actor)
| HTTP requests and responses
v
=================== trust boundary ===================
Juice Shop web and API (process, 127.0.0.1:3000)
| SQL queries and rows
v
SQLite database (data store)Текстовый набросок служит только ориентиром. Настоящий файл — тот, что сохранит Threat Dragon.
В качестве хранилища данных модель использует SQLite. Сверьтесь с документацией проекта для вашей версии, потому что детали хранения могут меняться от релиза к релизу.
Примените стартовую карту, описанную выше. Браузер — внешняя сущность, поэтому ему достаются spoofing и repudiation. Каждому потоку от браузера к API достаются tampering, information disclosure и denial of service. Процессу API достаются все шесть категорий. Хранилищу SQLite достаются tampering, repudiation, information disclosure и denial of service.
Вот по одному примеру на категорию. В настоящей модели строк для каждого элемента больше.
| Категория | Элемент | Угроза | Мера защиты |
|---|---|---|---|
| Spoofing | Сессия браузера и API | Украденный токен позволяет действовать от имени покупателя | Короткий срок жизни токена, проверка подписи при каждом запросе, аннулирование токенов при выходе, лимит запросов на вход |
| Tampering | Поток от браузера к API | Покупатель меняет цену или количество в запросе заказа | Сервер пересчитывает цены по базе данных и никогда не верит итогам от клиента; валидация схемы запроса |
| Repudiation | Процесс заказа | Покупатель утверждает, что не делал заказ, и ни одна запись не показывает обратного | Журнал аудита событий заказа на сервере с ID пользователя, временной меткой и ID запроса; никаких секретов в журнале |
| Information disclosure | Поток от API к браузеру | Ответ с ошибкой раскрывает стек вызовов или внутренние поля | Возвращать только поля из белого списка; общие сообщения об ошибках для клиента; полные сведения только в серверных логах |
| Denial of service | Эндпоинт поиска | Множество дорогих поисковых запросов замедляет сервис для всех | Лимиты запросов на клиента, максимальная длина запроса и размер страницы, таймауты запросов к базе данных |
| Elevation of privilege | Админские функции | Обычный пользователь вызывает админский эндпоинт, изменив значение роли | Проверка авторизации на сервере при каждом запросе, запрет по умолчанию, роль берётся из серверной сессии |
Чтобы узнать, какие слабые места есть в вашей версии намеренно, используйте документацию проекта. Описывайте каждую угрозу на уровне проекта. Не записывайте в модель шаги эксплуатации. Этой лабораторной работе вообще не нужен атакующий трафик.
В Threat Dragon добавьте каждую угрозу к её элементу, указав заголовок, описание и меру защиты. Если в вашей сборке есть поле статуса, ставьте open для мер, которые ещё не реализованы.
Экспортируйте модель в JSON через меню файла и назовите файл juice-shop-threat-model.json. Затем в папке лаборатории выполните:
git init
cp /path/to/juice-shop-threat-model.json .
git add juice-shop-threat-model.json && git commit -m "First STRIDE model"Git выводит короткую сводку с именем ветки и сообщением коммита. Точный текст зависит от вашей версии Git и настроек. Если Git спросит об имени автора, задайте своё через git config user.name и git config user.email и коммитьте под своим именем.
Перед коммитом прочитайте файл. В нём не должно быть настоящих имён хостов, токенов или данных клиентов. Эта модель использует только 127.0.0.1.
Закончив, остановите лабораторию:
docker stop juice-shop-lab
curl -s -o /dev/null -w "%{http_code}\n" --max-time 2 http://127.0.0.1:3000/На тестовой машине вывод был таким:
juice-shop-lab
000Первая строка — от docker stop. 000 означает, что curl не получил ответа от порта, то есть лаборатория выключена.
Модель угроз описывает проект на день написания. Когда проект меняется, модель устаревает. Типичные поводы для обновления:
Threat Modeling Manifesto говорит, что моделирование угроз должно следовать за изменениями проекта, итерациями, каждая из которых охватывает посильную часть системы. На практике это три привычки. Держите JSON-файл в репозитории рядом с кодом. Добавьте в пул-реквесты, затрагивающие аутентификацию, потоки данных или внешние интеграции, вопрос для ревью: модель угроз всё ещё соответствует? Записывайте дату и версию приложения, которые описывает модель. Угрозы с пометкой об устранении остаются полезной историей, поэтому сохраняйте их.
Основы безопасности
Триада CIA на бытовых примерах: конфиденциальность, целостность и доступность, проверка хешей и подписей и десять инцидентов для классификации.
Основы безопасности
Чем различаются уязвимость, угроза, риск и эксплойт, как CWE и CVE называют дефекты и почему недостижимая уязвимость всё равно может иметь значение.
Основы безопасности
Что охватывает кибербезопасность, триада CIA, типичные причины сбоев систем и безопасное первое упражнение с хешами на вашей машине.