アップデート一覧に戻る
New releaseJul 14, 2026

threatcl v0.6.1

HCLを使った脅威モデルの文書化

共有

threatcl

HCLを使った脅威モデリング

hcltmはどうなったの?

hcltmはthreatclに改名されました。ようこそ!

概要

[!TIP] 新しいドキュメントを読みたいですか?threatcl.dev にアクセスしてください。

脅威モデルの文書化にはさまざまな方法があります。シンプルなテキストファイルから、より詳細なワード文書、集中型ソリューションでの完全に計装された脅威モデルまで様々です。脅威モデルの最も価値のある属性の2つは、脅威を明確に文書化できることと、価値ある変化を促進できることです。

threatclは、以下の目標に焦点を当てることで、システム脅威モデルを文書化するためのDevOpsファーストのアプローチを提供することを目指しています:

  • シンプルなテキストファイル形式
  • シンプルなCLI駆動のユーザーエクスペリエンス
  • バージョン管理システム(VCS)への統合

このリポジトリはthreatcl CLIソフトウェアの本拠地です。threatclの仕様は、HCL2(HashiCorpの設定言語)に基づいており、「人間にとって読み書きしやすく、機械が生成・解析しやすいJSONベースのバリエーション」を目指しています。threatclの仕様はgithub.com/threatcl/specにあります。threatcl CLIソフトウェアと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 }

}

データフローダイアグラムを自動的にPNGに変換する方法の詳細については、[Data Flow Diagram](#data-flow-diagram) を参照してください。

[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/) は[here](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) を参照してください。

仕様の完全な説明については、[here](https://github.com/threatcl/threatcl/blob/main/spec.hcl) を参照するか、以下を実行してください:```bash
threatcl generate boilerplate

threatcl は JSON ファイルも処理できますが、唯一の注意点として、インポートモジュールと変数は機能しません。例として examples/tm1.json を参照してください。

HCL の理由

HCL は、HashiCorp の製品、特にオープンソースの Infrastructure-as-Code ソフトウェアである Terraform で使用される主要な設定言語です。私は HashiCorp でしばらく働いていましたが、この言語はとても気に入りました。さらに、DevOps やソフトウェアエンジニアがこの言語を使用しているなら、脅威モデルの文書化を簡素化することは threatcl の目標と一致します。

threatcl を JSON で使用することもできますが、一部の機能は失われます。詳細については、examples/ フォルダを参照してください。

なぜ MD で文書化しないのか?

プログラム的に操作できる形式を使うというアイデアが気に入りました。

謝辞と参考資料

threatcl の機能の 1 つは、HCL ファイルから データフロー図 を自動生成することです。これは、Marqeta と Blake Hitchcock による go-dfd パッケージを活用しています。DevOps の速度での脅威モデル に関する彼らのブログ記事もぜひご覧ください。

また、HashiCorp の Jamie Finnigan と Talha Tariq には、HashiCorp を退職した後もこのオープンソースツールの開発を続けることを許可してくれたことに感謝します。

さらに、OpenThreatModel 仕様 を提供してくれた IriusRisk チームにも感謝します。

threatcl CLI

インストール

最新バージョンを リリースページ からダウンロードし、threatcl バイナリを PATH に移動してください。

Homebrew でインストール

Homebrew を使用して threatcl をインストールします — フォーミュラは 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` は、https://github.com/threatcl/threatcl-action を使用して GitHub リポジトリに直接統合できます。これは脅威モデルを管理する理想的な方法の一つであり、バージョン管理システムへの統合という目標を達成するのに役立ちます。

## ソースからのビルド

1. このリポジトリをクローンします。
2. `threatcl` ディレクトリに移動します。
3. `make bootstrap`
4. `make build`

`threatcl` への貢献に関する詳細なヘルプについては、[CHANGELOG.md](https://github.com/threatcl/threatcl/blob/main/CHANGELOG.md) を参照してください。

## 使用方法

任意のサブコマンドのヘルプを表示するには、`-h` フラグを使用します。```bash
$ threatcl
Usage: threatcl [--version] [--help] <command> [<args>]

Available commands are:
    cloud        Interact with ThreatCL Cloud services
    dashboard    Generate markdown files from existing HCL threatmodel file(s)
    dfd          Generate Data Flow Diagram PNG or DOT files from existing HCL threatmodel file(s)
    export       Export threat models into other formats
    generate     Generate an HCL Threat Model
    list         List Threatmodels found in HCL file(s)
    mcp          Model Context Protocol (MCP) server for threatcl
    mermaid      Output raw mermaid source from 'mermaid' blocks in existing HCL threatmodel file(s)
    query        Execute GraphQL queries against threat model data
    server       Start a GraphQL API server for threat models
    terraform    Parse output from 'terraform show -json'
    validate     Validate existing HCL Threatmodel file(s)
    view         View existing HCL Threatmodel file(s)

(オプション) 設定ファイル

threatcl コマンドのほとんどには -config フラグがあり、config.hcl ファイルを指定できます。このファイル内の HCL を使用して、threatcl のデフォルト属性の一部を上書きできます。以下にその一覧を示します。

  • Initiative Sizes - デフォルトは "Undefined", "Small", "Medium", "Large"
  • Default Initiative Size - デフォルトは "Undefined"
  • Information Classifications - デフォルトは "Restricted", "Confidential", "Public"
  • Default Information Classification - デフォルトは "Confidential"
  • Impact Types - デフォルトは "Confidentiality", "Integrity", "Availability"
  • STRIDE Elements - デフォルトは "Spoofing", "Tampering", "Info Disclosure", "Denial Of Service", "Elevation Of Privilege"
  • Uptime Dependency Classifications - デフォルトは "none", "degraded", "hard", "operational"
  • Default Uptime Depency Classification - デフォルトは "none"

例:```hcl initiative_sizes = ["S", "M", "L"] default_initiative_size = "M" info_classifications = ["1", "2"] default_info_classification = "1" impact_types = ["big", "small"] strides = ["S", "T"] uptime_dep_classifications = ["N", "D"] default_uptime_dep_classification = "N"

これらの属性を変更する場合は、他の操作のために設定ファイルを提供する必要があることを覚えておいてください。これは検証やダッシュボードの作成に影響を与える可能性があります。

## クラウドコマンド

`cloud` サブコマンドの詳細については、https://threatcl.dev/cloud/overview/ をご覧ください。

## リストと表示

カテゴリ