
Python-фреймворк для моделирования угроз
Традиционное моделирование угроз часто приходит слишком поздно, а иногда и вовсе не происходит. Кроме того, создание ручных потоков данных и отчетов может занимать очень много времени. Цель pytm — сместить моделирование угроз влево, сделав его более автоматизированным и ориентированным на разработчиков.
На основе вашего ввода и определения архитектурного проекта, pytm может автоматически генерировать следующие элементы:
tm.py — это пример модели. Вы можете запустить его, чтобы сгенерировать отчет и файлы изображений диаграмм, на которые он ссылается:```
mkdir -p tm
./tm.py --report docs/basic_template.md | pandoc -f markdown -t html > tm/report.html
./tm.py --dfd | dot -Tpng -o tm/dfd.png
./tm.py --seq | java -Djava.awt.headless=true -jar $PLANTUML_PATH -tpng -pipe > tm/seq.png
Также есть пример `Makefile`, который объединяет всё это в цели, которые можно легко использовать для нескольких моделей. Если у вас установлен [GNU make](https://www.gnu.org/software/make/) (доступен по умолчанию в дистрибутивах Linux, но не в OSX), просто выполните:```
make MODEL=the_name_of_your_model_minus_.py
У вас должен быть либо plantuml.jar в той же директории, что и ваша модель, либо задан PLANTUML_PATH.
Чтобы избежать установки всех зависимостей, таких как pandoc или Java, скрипт можно запустить внутри контейнера:```
export USE_DOCKER=true make image
make
### Начало работы - Вариант с Devbox
Чтобы упростить использование `pytm`, хост-зависимости можно полностью изолировать
с помощью [`Devbox`](https://github.com/jetify-com/devbox). Обычно это более
легковесная и удобная альтернатива подходу с OCI-контейнерами.
- Установите Devbox на Linux/MacOS: `curl -fsSL https://get.jetify.com/devbox | bash`
- Установите Devbox на [Windows/WSL](https://www.jetify.com/docs/devbox/installing-devbox/index#installing-wsl2)
- Обновите до последней версии devbox: `devbox version update`
- Установите токен доступа GitHub в файле `~/.config/nix/nix.conf`: `access-tokens = github.com=YOUR_TOKEN_HERE`
- Создайте новую изолированную среду оболочки, включающую все инструменты и пакеты, указанные в файле `devbox.json` проекта: `devbox shell`
- Отобразите полный путь к исполняемому файлу Python, который будет использоваться при вводе `python` в терминале, с помощью команды which python. Результат должен быть следующим путем: `.devbox/nix/profile/default/bin/python`
- Проверьте, выполнив следующую команду, которая должна сгенерировать DFD в виде PNG-файла с именем `sample.png`: `./tm.py --dfd | dot -Tpng -o sample.png`
- Выйдите из среды оболочки Devbox: `exit`
## Использование
Все доступные аргументы:```text
usage: tm.py [-h] [--debug] [--dfd] [--report REPORT] [--exclude EXCLUDE]
[--seq] [--list] [--colormap] [--describe DESCRIBE]
[--list-elements] [--json JSON] [--levels LEVELS [LEVELS ...]]
[--stale_days STALE_DAYS]
options:
-h, --help show this help message and exit
--debug print debug messages
--dfd output DFD
--report REPORT output report using the named template file (sample
template file is under docs/template.md)
--exclude EXCLUDE specify threat IDs to be ignored
--seq output sequential diagram
--list list all available threats
--colormap color the risk in the diagram
--describe DESCRIBE describe the properties available for a given element
--list-elements list all elements which can be part of a threat model
--json JSON output a JSON file
--levels LEVELS [LEVELS ...]
Select levels to be drawn in the threat model (int
separated by comma).
--stale_days STALE_DAYS
checks if the delta between the TM script and the code
described by it is bigger than the specified value in
days
Аргумент stale_days пытается определить, насколько далеко по дням скрипт модели (который вы пишете) отстоит от кода, реализующего моделируемую систему. В идеале для активно разрабатываемой системы они должны быть достаточно близки в большинстве случаев. Вы можете запускать этот параметр периодически, чтобы измерять пульс вашего проекта и «свежесть» вашей модели угроз.
В настоящее время доступны следующие элементы: TM, Element, Server, ExternalEntity, Datastore, Actor, Process, SetOfProcesses, Dataflow, Boundary, Lambda, LLM и Agent.