Назад к обновлениям
New releaseJul 14, 2026

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).

## Использование

Категории