
threatcl v0.6.1
Документирование ваших моделей угроз с помощью HCL
threatcl
Моделирование угроз с помощью HCL
Что случилось с hcltm?
hcltm был переименован в threatcl. Добро пожаловать!
Обзор
[!TIP] Хотите прочитать новую документацию? Перейдите на threatcl.dev
Существует множество различных способов документирования модели угроз. От простого текстового файла до более подробных документов Word и полностью инструментированных моделей угроз в централизованном решении. Двумя наиболее ценными атрибутами модели угроз являются возможность четко документировать угрозы и возможность реализовывать значимые изменения.
threatcl стремится предоставить подход с приоритетом DevOps для документирования системной модели угроз, сосредотачиваясь на следующих целях:
- Простой формат текстового файла
- Простой пользовательский опыт на основе CLI
- Интеграция с системами контроля версий (VCS)
Этот репозиторий является домом для программного обеспечения CLI threatcl. Спецификация threatcl spec основана на HCL2, языке конфигурации HashiCorp, который стремится быть "приятным для чтения и написания человеком, а также вариантом на основе JSON, который легче генерировать и анализировать машинам". Спецификация threatcl находится по адресу github.com/threatcl/spec. Сочетание программного обеспечения CLI threatcl и спецификации threatcl позволяет практикам определить системную модель угроз на HCL, например:```hcl
threatmodel "Tower of London" {
description = "A historic castle"
author = "@xntrik"
attributes { new_initiative = "true" internet_facing = "true" initiative_size = "Small" }
information_asset "crown jewels" { description = "including the imperial state crown" information_classification = "Confidential" }
usecase { description = "The Queen can fetch the crown" }
third_party_dependency "community watch" { description = "The community watch helps guard the premise" uptime_dependency = "degraded" }
threat "Crown theft" { description = "Someone who isn't the Queen steals the crown" impacts = ["Confidentiality"]
control "Guards" {
description = "Trained guards patrol tower"
risk_reduction = 75
}
}
data_flow_diagram_v2 "dfd name" { // ... see below for more information }
}
См. [Диаграмму потоков данных](#data-flow-diagram) для получения дополнительной информации о том, как создавать диаграммы потоков данных, которые могут быть автоматически преобразованы в PNG.
Чтобы увидеть пример того, как ссылаться на предопределенные библиотеки элементов управления для [OWASP Proactive Controls](https://owasp.org/www-project-proactive-controls/) и [AWS Security Checklist](https://d1.awsstatic.com/whitepapers/Security/AWS_Security_Checklist.pdf), смотрите [examples/tm3.hcl](https://github.com/threatcl/threatcl/blob/main/examples/tm3.hcl). Также у нас есть [MITRE ATT&CK Controls](https://attack.mitre.org/mitigations/enterprise/) [здесь](https://github.com/threatcl/threatcl/blob/main/examples/MITRE_ATTACK_controls.hcl).
Вы также можете включить внешнюю модель угроз в свою собственную, чтобы ссылаться на всю ее информацию и использовать ее. В качестве примера смотрите [examples/including-example/corp-app.hcl](https://github.com/threatcl/threatcl/blob/main/examples/including-example/corp-app.hcl).
Чтобы увидеть полное описание спецификации, смотрите [здесь](https://github.com/threatcl/threatcl/blob/main/spec.hcl) или запустите:```bash
threatcl generate boilerplate
threatcl также будет обрабатывать JSON-файлы, но с одной оговоркой: модули импорта и переменные не будут работать. Вы можете посмотреть examples/tm1.json в качестве примера.
Почему HCL?
HCL — это основной язык конфигурации, используемый в продуктах HashiCorp, в частности в Terraform — их программном обеспечении с открытым исходным кодом для инфраструктуры как кода. Я некоторое время работал в HashiCorp, и этот язык мне действительно полюбился; кроме того, если DevOps-инженеры и разработчики программного обеспечения используют этот язык, то упрощение документации моделей угроз соответствует целям threatcl.
Вы можете использовать threatcl с JSON, но при этом теряется часть функциональности. Подробнее см. в папке examples/.
Почему не просто документировать их в MD?
Мне понравилась идея использовать формат, с которым можно взаимодействовать программно.
Благодарности и ссылки
Одной из возможностей threatcl является автоматическое создание диаграмм потоков данных из HCL-файлов. Для этого используется пакет go-dfd от Marqeta и Блейка Хичкока. Обязательно посмотрите их статью в блоге о Моделях угроз на скорости DevOps.
Кроме того, хочу выразить благодарность Джейми Финнигану и Талхе Тарику из HashiCorp за то, что позволили мне продолжить работу над этим инструментом с открытым исходным кодом даже после того, как я закончил работу в HashiCorp.
Также спасибо команде IriusRisk за спецификацию OpenThreatModel.
threatcl cli
Установка
Загрузите последнюю версию из релизов и переместите бинарный файл threatcl в ваш PATH.
Установка с помощью Homebrew
Установите threatcl с помощью Homebrew — формула находится в homebrew-core:```bash
brew install threatcl
## Запуск с Docker```bash
docker run --rm -it ghcr.io/threatcl/threatcl:latest
Проверка релизов (происхождение сборок)
Каждый помеченный релиз включает SLSA происхождение сборки —
подписанные в Sigstore, безключевые аттестации, созданные конвейером релиза GitHub Actions
(GitHub OIDC → Fulcio, без ключей подписи). Вы можете проверить, что бинарный файл или
образ контейнера действительно создан из рабочего процесса релиза этого репозитория с помощью
GitHub CLI (gh attestation verify — не требуется
дополнительных инструментов или доверенных ключей).
Проверьте загруженный архив (или файл SHA256SUMS):```bash
gh attestation verify threatcl_.tar.gz --repo threatcl/threatcl
Проверьте образ контейнера (тег автоматически разрешается в его дайджест):```bash
gh attestation verify oci://ghcr.io/threatcl/threatcl:<version> --repo threatcl/threatcl
Чтобы закрепить точный образ, который вы запускаете, вычислите дайджест самостоятельно и проверьте (и загрузите) по дайджесту:```bash digest=$(docker buildx imagetools inspect ghcr.io/threatcl/threatcl: --format '{{ .Manifest.Digest }}') gh attestation verify oci://ghcr.io/threatcl/threatcl@${digest} --repo threatcl/threatcl
См. [docs/SLSA.md](https://github.com/threatcl/threatcl/blob/main/docs/SLSA.md) для получения полной информации о цепочке поставок.
## Запуск с GitHub Actions
`threatcl` можно напрямую интегрировать в ваши репозитории GitHub с помощью https://github.com/threatcl/threatcl-action. Это один из идеальных способов управления вашими моделями угроз, который помогает достичь цели интеграции в ваши системы контроля версий.
## Сборка из исходного кода
1. Клонируйте этот репозиторий.
2. Перейдите в каталог `threatcl`
3. `make bootstrap`
4. `make build`
Для получения дополнительной помощи по участию в `threatcl` смотрите [CHANGELOG.md](https://github.com/threatcl/threatcl/blob/main/CHANGELOG.md).
## Использование