
threatcl v0.6.1
Documentare i tuoi modelli di minaccia con HCL
threatcl
Modellazione delle minacce con HCL
Cosa è successo a hcltm?
hcltm è stato rinominato in threatcl. Benvenuti!
Panoramica
[!TIP] Vuoi leggere la nuova documentazione? Vai su threatcl.dev
Ci sono molti modi diversi in cui un modello di minaccia può essere documentato. Da un semplice file di testo, a documenti Word più dettagliati, fino a modelli di minaccia completamente strumentati in una soluzione centralizzata. Due degli attributi più preziosi di un modello di minaccia sono la capacità di documentare chiaramente le minacce e di poter guidare cambiamenti significativi.
threatcl mira a fornire un approccio DevOps-first alla documentazione di un modello di minaccia di sistema concentrandosi sui seguenti obiettivi:
- Formato semplice basato su file di testo
- Esperienza utente semplice basata su CLI
- Integrazione nei sistemi di controllo versione (VCS)
Questo repository è la sede del software CLI threatcl. La specifica di threatcl è basata su HCL2, il linguaggio di configurazione di HashiCorp, che mira ad essere "piacevole da leggere e scrivere per gli umani, e una variante JSON più facile da generare e analizzare per le macchine". La specifica di threatcl si trova su github.com/threatcl/spec. Combinando il software CLI threatcl e la specifica threatcl, i professionisti possono definire un modello di minaccia di sistema in HCL, ad esempio:```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 }
}
Vedi [Diagramma del Flusso di Dati](#data-flow-diagram) per maggiori informazioni su come costruire diagrammi del flusso di dati che possono essere convertiti automaticamente in PNG.
Per vedere un esempio di come fare riferimento a librerie di controlli predefinite per [OWASP Proactive Controls](https://owasp.org/www-project-proactive-controls/) e [AWS Security Checklist](https://d1.awsstatic.com/whitepapers/Security/AWS_Security_Checklist.pdf) consulta [examples/tm3.hcl](https://github.com/threatcl/threatcl/blob/main/examples/tm3.hcl). Abbiamo anche i [MITRE ATT&CK Controls](https://attack.mitre.org/mitigations/enterprise/) [qui](https://github.com/threatcl/threatcl/blob/main/examples/MITRE_ATTACK_controls.hcl).
Puoi anche includere un threatmodel esterno nel tuo, per fare riferimento e utilizzare tutte le sue informazioni. Puoi vedere [examples/including-example/corp-app.hcl](https://github.com/threatcl/threatcl/blob/main/examples/including-example/corp-app.hcl) come esempio.
Per vedere una descrizione completa delle specifiche, vedi [qui](https://github.com/threatcl/threatcl/blob/main/spec.hcl) o esegui:```bash
threatcl generate boilerplate
threatcl elaborerà anche file JSON, ma l'unica avvertenza è che i moduli di importazione e le variabili non funzioneranno. Puoi vedere examples/tm1.json come esempio.
Perché HCL?
HCL è il linguaggio di configurazione principale utilizzato nei prodotti di HashiCorp, in particolare Terraform - il loro software Infrastructure-as-Code open-source. Ho lavorato per un po' in HashiCorp e il linguaggio mi è davvero piaciuto, inoltre, se DevOps e ingegneri del software usano il linguaggio, semplificare il modo in cui documentano i modelli di minaccia è in linea con gli obiettivi di threatcl.
Puoi usare threatcl con JSON, ma perdi alcune funzionalità. Per maggiori informazioni, consulta la cartella examples/.
Perché non documentarli semplicemente in MD?
Mi piaceva l'idea di usare un formato con cui si potesse interagire a livello programmatico.
Ringraziamenti e Riferimenti
Una delle funzionalità di threatcl è la generazione automatica di diagrammi di flusso dei dati dai file HCL. Questo sfrutta il pacchetto go-dfd di Marqeta e Blake Hitchcock. Dai un'occhiata al loro post sul blog su Threat models at the speed of DevOps.
Inoltre, vorrei ringraziare Jamie Finnigan e Talha Tariq di HashiCorp per avermi permesso di continuare a lavorare su questo strumento open-source anche dopo aver concluso il mio rapporto con HashiCorp.
Grazie anche ai ragazzi di IriusRisk per la specifica OpenThreatModel.
threatcl cli
Installazione
Scarica l'ultima versione da releases e sposta il binario threatcl nel tuo PATH.
Installazione con Homebrew
Installa threatcl con Homebrew — la formula si trova in homebrew-core:```bash
brew install threatcl
## Eseguire con Docker```bash
docker run --rm -it ghcr.io/threatcl/threatcl:latest
Verifica dei rilasci (provenienza della build)
Ogni release con tag include SLSA la provenienza della build —
attestazioni senza chiavi firmate con Sigstore, generate dalla pipeline di release
di GitHub Actions (GitHub OIDC → Fulcio, nessuna chiave di firma). Puoi verificare che un binario o
l'immagine del contenitore sia stata realmente costruita dal workflow di release di questo repository utilizzando
il GitHub CLI (gh attestation verify — nessun ulteriore
strumento o chiavi fidate da gestire).
Verifica un archivio scaricato (o il file SHA256SUMS):```bash
gh attestation verify threatcl_.tar.gz --repo threatcl/threatcl
Verifica l'immagine del container (il tag viene risolto automaticamente nel suo digest):```bash
gh attestation verify oci://ghcr.io/threatcl/threatcl:<version> --repo threatcl/threatcl
Per fissare l'immagine esatta che esegui, risolvi il digest da solo e verifica (e tira) tramite 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
Vedi [docs/SLSA.md](https://github.com/threatcl/threatcl/blob/main/docs/SLSA.md) per la postura completa della catena di fornitura.
## Esecuzione con GitHub Actions
`threatcl` può essere integrato direttamente nei tuoi repository GitHub con https://github.com/threatcl/threatcl-action. Questo è uno dei metodi ideali per gestire i tuoi modelli di minaccia e aiuta a raggiungere l'obiettivo di integrazione nei tuoi sistemi di controllo versione.
## Compilazione dal sorgente
1. Clona questo repository.
2. Spostati nella directory `threatcl`
3. `make bootstrap`
4. `make build`
Per ulteriore aiuto su come contribuire a `threatcl` consulta il [CHANGELOG.md](https://github.com/threatcl/threatcl/blob/main/CHANGELOG.md).
## Utilizzo