
threatcl v0.6.4
Documenter vos modèles de menace avec HCL
threatcl
Modélisation des menaces avec HCL
Qu'est-il arrivé à hcltm ?
hcltm a été renommé en threatcl. Bienvenue !
Aperçu
[!TIP] Vous voulez lire la nouvelle documentation ? Rendez-vous sur threatcl.dev
Il existe de nombreuses façons différentes de documenter un modèle de menaces. D'un simple fichier texte à des documents Word plus approfondis, en passant par des modèles de menaces entièrement instrumentés dans une solution centralisée. Deux des attributs les plus précieux d'un modèle de menaces sont la capacité à documenter clairement les menaces et à susciter des changements significatifs.
threatcl vise à fournir une approche DevOps-first pour documenter un modèle de menaces système en se concentrant sur les objectifs suivants :
- Format de fichier texte simple
- Expérience utilisateur simple basée sur la CLI
- Intégration dans les systèmes de contrôle de version (VCS)
Ce dépôt est le domicile du logiciel CLI threatcl. La spécification threatcl est basée sur HCL2, le langage de configuration de HashiCorp, qui vise à être "agréable à lire et à écrire pour les humains, et une variante basée sur JSON plus facile à générer et à analyser pour les machines". La spécification threatcl se trouve sur github.com/threatcl/spec. La combinaison du logiciel CLI threatcl et de la spécification threatcl permet aux praticiens de définir un modèle de menaces système en HCL, par exemple :```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 }
}
Voir [Diagramme de flux de données](#data-flow-diagram) pour plus d'informations sur la façon de construire des diagrammes de flux de données qui peuvent être convertis automatiquement en PNG.
Pour voir un exemple de la façon de référencer des bibliothèques de contrôles prédéfinies pour [OWASP Proactive Controls](https://owasp.org/www-project-proactive-controls/) et [AWS Security Checklist](https://d1.awsstatic.com/whitepapers/Security/AWS_Security_Checklist.pdf), consultez [examples/tm3.hcl](https://github.com/threatcl/threatcl/blob/main/examples/tm3.hcl). Nous avons également les [contrôles MITRE ATT&CK](https://attack.mitre.org/mitigations/enterprise/) [ici](https://github.com/threatcl/threatcl/blob/main/examples/MITRE_ATTACK_controls.hcl).
Vous pouvez également inclure un modèle de menace externe dans le vôtre, pour référencer et utiliser toutes ses informations. Vous pouvez voir [examples/including-example/corp-app.hcl](https://github.com/threatcl/threatcl/blob/main/examples/including-example/corp-app.hcl) comme exemple.
Pour voir une description complète de la spécification, voir [ici](https://github.com/threatcl/threatcl/blob/main/spec.hcl) ou exécutez :```bash
threatcl generate boilerplate
threatcl traitera également les fichiers JSON, mais la seule mise en garde est que les modules d'importation et les variables ne fonctionneront pas. Vous pouvez voir examples/tm1.json comme exemple.
Pourquoi HCL ?
HCL est le langage de configuration principal utilisé dans les produits de HashiCorp, en particulier Terraform, leur logiciel open-source Infrastructure-as-Code. J'ai travaillé chez HashiCorp pendant un certain temps et le langage m'a vraiment séduit. De plus, si les ingénieurs DevOps et logiciels utilisent ce langage, alors simplifier la façon dont ils documentent les modèles de menace s'aligne sur les objectifs de threatcl.
Vous pouvez utiliser threatcl avec JSON, mais vous perdez certaines fonctionnalités. Pour plus d'informations, consultez le dossier examples/.
Pourquoi ne pas simplement les documenter en MD ?
J'ai aimé l'idée d'utiliser un format pouvant être manipulé par programmation.
Remerciements et Références
L'une des fonctionnalités de threatcl est la génération automatique de diagrammes de flux de données à partir de fichiers HCL. Cela utilise le package go-dfd de Marqeta et Blake Hitchcock. Assurez-vous de consulter leur article de blog sur Threat models at the speed of DevOps.
De plus, je tiens à remercier Jamie Finnigan et Talha Tariq de HashiCorp de m'avoir permis de continuer à travailler sur cet outil open-source même après avoir quitté HashiCorp.
Merci également à l'équipe d'IriusRisk pour la spécification OpenThreatModel.
threatcl cli
Installation
Téléchargez la dernière version depuis releases et déplacez le binaire threatcl dans votre PATH.
Installer avec Homebrew
Installez threatcl avec Homebrew — la formule se trouve dans homebrew-core :```bash
brew install threatcl
## Exécuter avec Docker```bash
docker run --rm -it ghcr.io/threatcl/threatcl:latest
Vérification des versions (provenance de construction)
Chaque version étiquetée est livrée avec la provenance de construction SLSA —
des attestations sans clé signées par Sigstore, générées par le pipeline de publication GitHub Actions
(GitHub OIDC → Fulcio, pas de clés de signature). Vous pouvez vérifier qu'un binaire ou
l'image conteneur a été authentiquement construit à partir du workflow de publication de ce dépôt en utilisant
le GitHub CLI (gh attestation verify — aucun outil supplémentaire
ni clé de confiance à gérer).
Vérifiez une archive téléchargée (ou le fichier SHA256SUMS) :```bash
gh attestation verify threatcl_.tar.gz --repo threatcl/threatcl
Vérifiez l'image du conteneur (le tag est résolu automatiquement en son digest) :```bash
gh attestation verify oci://ghcr.io/threatcl/threatcl:<version> --repo threatcl/threatcl
Pour épingler l'image exacte que vous exécutez, résolvez vous-même le digest et vérifiez (et tirez) par digest :```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
Voir [docs/SLSA.md](https://github.com/threatcl/threatcl/blob/main/docs/SLSA.md) pour l'ensemble de la posture de la chaîne d'approvisionnement.
## Exécution avec GitHub Actions
`threatcl` peut être intégré directement dans vos dépôts GitHub avec https://github.com/threatcl/threatcl-action. C'est l'une des méthodes idéales pour gérer vos modèles de menace et aide à atteindre l'objectif d'intégration dans vos systèmes de contrôle de version.
## Compilation à partir des sources
1. Clonez ce dépôt.
2. Placez-vous dans le répertoire `threatcl`
3. `make bootstrap`
4. `make build`