
threatcl v0.6.1
Documentando tus Modelos de Amenazas con HCL
threatcl
Modelado de Amenazas con HCL
¿Qué pasó con hcltm?
hcltm ha sido renombrado a threatcl. ¡Bienvenido!
Resumen
[!TIP] ¿Quieres leer la nueva documentación? Dirígete a threatcl.dev
Hay muchas formas diferentes de documentar un modelo de amenazas. Desde un archivo de texto simple, hasta documentos de Word más detallados, hasta modelos de amenazas completamente instrumentados en una solución centralizada. Dos de los atributos más valiosos de un modelo de amenazas son poder documentar claramente las amenazas y poder impulsar cambios valiosos.
threatcl tiene como objetivo proporcionar un enfoque DevOps-first para documentar un modelo de amenazas del sistema centrándose en los siguientes objetivos:
- Formato de archivo de texto simple
- Experiencia de usuario simple basada en CLI
- Integración en sistemas de control de versiones (VCS)
Este repositorio es el hogar del software CLI threatcl. La especificación de threatcl se basa en HCL2, el Lenguaje de Configuración de HashiCorp, que tiene como objetivo ser 'agradable de leer y escribir para humanos, y una variante basada en JSON que es más fácil para que las máquinas generen y analicen'. La especificación de threatcl se encuentra en github.com/threatcl/spec. La combinación del software CLI threatcl y la especificación threatcl permite a los profesionales definir un modelo de amenazas del sistema en HCL, por ejemplo:```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 }
}
Consulte el [Diagrama de flujo de datos](#data-flow-diagram) para obtener más información sobre cómo construir diagramas de flujo de datos que puedan convertirse automáticamente a PNG.
Para ver un ejemplo de cómo hacer referencia a bibliotecas de control predefinidas para los [Controles Proactivos de OWASP](https://owasp.org/www-project-proactive-controls/) y la [Lista de Verificación de Seguridad de AWS](https://d1.awsstatic.com/whitepapers/Security/AWS_Security_Checklist.pdf), consulte [examples/tm3.hcl](https://github.com/threatcl/threatcl/blob/main/examples/tm3.hcl). También tenemos los [Controles MITRE ATT&CK](https://attack.mitre.org/mitigations/enterprise/) [aquí](https://github.com/threatcl/threatcl/blob/main/examples/MITRE_ATTACK_controls.hcl).
También puede incluir un modelo de amenazas externo en el suyo propio, para hacer referencia y utilizar toda su información. Puede ver [examples/including-example/corp-app.hcl](https://github.com/threatcl/threatcl/blob/main/examples/including-example/corp-app.hcl) como un ejemplo.
Para ver una descripción completa de la especificación, consulte [aquí](https://github.com/threatcl/threatcl/blob/main/spec.hcl) o ejecute:```bash
threatcl generate boilerplate
threatcl también procesará archivos JSON, pero la única advertencia es que los módulos de importación y las variables no funcionarán. Puedes ver examples/tm1.json como ejemplo.
¿Por qué HCL?
HCL es el lenguaje de configuración principal utilizado en los productos de HashiCorp, en particular Terraform, su software de Infraestructura como Código de código abierto. Trabajé en HashiCorp por un tiempo y el lenguaje realmente me gustó; además, si los ingenieros de DevOps y Software ya usan el lenguaje, simplificar la forma en que documentan los modelos de amenazas está alineado con los objetivos de threatcl.
Puedes usar threatcl con JSON, pero pierdes algunas funcionalidades. Para más información, consulta la carpeta examples/.
¿Por qué no documentarlos simplemente en MD?
Me gustó la idea de usar un formato que pudiera ser manipulado mediante programación.
Agradecimientos y Referencias
Una de las características de threatcl es la generación automática de diagramas de flujo de datos a partir de archivos HCL. Esto aprovecha el paquete go-dfd de Marqeta y Blake Hitchcock. Definitivamente revisa su artículo en el blog sobre Threat models at the speed of DevOps.
Además, me gustaría agradecer a Jamie Finnigan y Talha Tariq de HashiCorp por permitirme seguir trabajando en esta herramienta de código abierto incluso después de haber terminado mi relación con HashiCorp.
También agradezco a la gente de IriusRisk por la especificación OpenThreatModel.
threatcl cli
Instalación
Descarga la última versión desde releases y mueve el binario threatcl a tu PATH.
Instalar con Homebrew
Instala threatcl con Homebrew — la fórmula se encuentra en homebrew-core:```bash
brew install threatcl
## Ejecutar con Docker```bash
docker run --rm -it ghcr.io/threatcl/threatcl:latest
Verificación de lanzamientos (procedencia de la compilación)
Cada lanzamiento etiquetado incluye procedencia de compilación SLSA — atestaciones sin claves firmadas por Sigstore, generadas por el pipeline de lanzamiento de GitHub Actions (GitHub OIDC → Fulcio, sin claves de firma). Puede verificar que un binario o la imagen de contenedor se haya compilado genuinamente a partir del flujo de trabajo de lanzamiento de este repositorio usando GitHub CLI (gh attestation verify — sin herramientas adicionales ni claves de confianza que gestionar).
Verifique un archivo descargado (o el archivo SHA256SUMS):```bash
gh attestation verify threatcl_.tar.gz --repo threatcl/threatcl
Verifica la imagen del contenedor (la etiqueta se resuelve automáticamente a su digest):```bash
gh attestation verify oci://ghcr.io/threatcl/threatcl:<version> --repo threatcl/threatcl
Para fijar la imagen exacta que ejecutas, resuelve el digest tú mismo y verifica (y pull) por 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
Consulte [docs/SLSA.md](https://github.com/threatcl/threatcl/blob/main/docs/SLSA.md) para conocer la postura completa de la cadena de suministro.
## Ejecutar con GitHub Actions
`threatcl` se puede integrar directamente en tus repositorios de GitHub con https://github.com/threatcl/threatcl-action. Este es uno de los métodos ideales para gestionar tus modelos de amenazas y ayuda a cumplir el objetivo de integrarse en tus sistemas de control de versiones.
## Compilar desde el código fuente
1. Clona este repositorio.
2. Cambia al directorio `threatcl`
3. `make bootstrap`
4. `make build`