Моделювання загроз - систематичний пошук того, що може піти не так з безпекою, на етапі проєктування, до написання коду. Виправити дизайн на дошці дешевше, ніж переписувати готову функцію чи реагувати на інцидент.
Чотири питання (за OWASP і Адамом Шостаком):
- Над чим ми працюємо? - модель системи;
- Що може піти не так? - загрози;
- Що ми з цим робимо? - заходи;
- Чи добре ми впоралися? - перевірка.
Модель системи - діаграма потоків даних (DFD): зовнішні сутності (користувач, платіжна система), процеси (застосунок, черга), сховища (база, S3), потоки даних між ними і межі довіри - місця, де дані переходять з менш довіреної зони в більш довірену (браузер → сервер, сторонній вебхук → застосунок).
STRIDE - категорії загроз для кожного елемента діаграми:
| Літера | Загроза | Порушена властивість | Приклад |
|---|---|---|---|
| S | Spoofing - підробка | автентичність | підроблений вебхук від «платіжної системи» |
| T | Tampering - зміна | цілісність | зміна ціни в запиті оформлення замовлення |
| R | Repudiation - заперечення | неспростовність | «я не змінював цей платіж» - а журналу немає |
| I | Information disclosure - розкриття | конфіденційність | чужий рахунок за іншим id |
| D | Denial of service - відмова | доступність | експорт без ліміту, що вантажить базу |
| E | Elevation of privilege - підвищення прав | авторизація | користувач робить себе адміністратором |
Приклад: нова функція «імпорт товарів з CSV за посиланням»:
- S: хто може запускати імпорт? → лише роль менеджера;
- T: чи можна підмінити файл між перевіркою й обробкою? → завантажити один раз і обробляти локальну копію;
- R: хто і коли імпортував? → журнал з користувачем і файлом;
- I: чи може URL вказувати на внутрішні ресурси (SSRF)? → перевірка URL і IP;
- D: файл на 10 ГБ? → ліміт розміру, обробка в черзі;
- E: CSV-ін'єкція формул при експорті назад в Excel? → екранування.
Як впровадити без бюрократії: 30-60 хвилин обговорення для функцій, що зачіпають автентифікацію, платежі, файли, зовнішні інтеграції, персональні дані; результат - перелік загроз і задач у трекері, а не документ на полиці.