
Modelador de amenazas de IaC con los frameworks STRIDE, MITRE ATT&CK y PASTA. Soporte para REST API, GraphQL y Docker para Terraform, CloudFormation y Kubernetes.
Modelador de amenazas estático para IaC que analiza manifiestos de Terraform, CloudFormation y Kubernetes y genera informes estructurados de modelos de amenazas utilizando los marcos STRIDE, MITRE ATT&CK o PASTA. Sin llamadas de red, sin credenciales en la nube, completamente offline. Se ejecuta como CLI, API REST o servicio contenerizado.
CLI:
pip install threatmap
threatmap scan ./ejemplos --output informe.md --fail-on HIGH
Docker:
docker run -v $(pwd):/workspace bogdynn/threatmap:2.1.0 threatmap scan /workspace --output /workspace/informe.md
Servidor API REST:
threatmap serve --host 0.0.0.0 --port 8000
# O mediante Docker:
docker run -p 8000:8000 bogdynn/threatmap:2.1.0
# Endpoints de la API: /health, /version, /rules, /analyze
API GraphQL:
docker run -p 8000:8000 bogdynn/threatmap:2.1.0
# Endpoint GraphQL: http://localhost:8000/graphql
# Consultas: health, version, rules
# Mutaciones: analyze(content, filename, framework)
| Formato | Proveedor | Extensión |
|---|---|---|
| Terraform HCL | AWS, Azure, GCP | .tf |
| CloudFormation | AWS | .yaml, .yml, .json |
| Manifiestos de Kubernetes | Kubernetes | .yaml, .yml |
Instalar desde PyPI:
pip install threatmap
O para desarrollo local:
git clone https://github.com/bogdanticu88/threatmap.git
cd threatmap
pip install -e .
Escanea un directorio e imprime un informe Markdown en stdout:
threatmap scan ./terraform/
Escanea múltiples rutas y escribe un informe JSON en un archivo:
threatmap scan ./terraform/ ./k8s/ ./cloudformation/ --format json --output informe.json
Genera un informe HTML interactivo o un informe SARIF para GitHub Security:
threatmap scan ./infra/ --format html --output informe.html
threatmap scan ./infra/ --format sarif --output informe.sarif
Puerta de CI: código de salida 1 si se encuentra alguna amenaza CRÍTICA o ALTA:
threatmap scan ./infra/ --fail-on HIGH --output informe-amenazas.md
Imprime solo una tabla resumen en terminal, sin escribir un informe completo:
threatmap scan ./infra/ --summary
Utiliza indicadores de severidad solo ASCII (sin emojis) para entornos que no soportan Unicode:
threatmap scan ./infra/ --ascii --output informe.md
Analiza usando diferentes marcos de modelado de amenazas:
# STRIDE (por defecto)
threatmap scan ./infra/ --framework stride
# MITRE ATT&CK (mapea a tácticas y técnicas)
threatmap scan ./infra/ --framework mitre --format json
# PASTA (modelado de amenazas centrado en activos)
threatmap scan ./infra/ --framework pasta --format json
STRIDE (73 reglas)
MITRE ATT&CK (11 reglas, 14 tácticas)
PASTA (12 reglas, centrado en activos)
Ejecutar threatmap scan ./ejemplos --output informe.md contra los ejemplos incluidos produce un informe Markdown completo. A continuación se muestra un extracto representativo.
| ID | Severidad | Categoría STRIDE | Recurso | Descripción |
|---|---|---|---|---|
| T-001 | 🔴 CRÍTICA | Divulgación de información | AuditBucket | El bucket S3 'AuditBucket' no tiene configurado un bloque de acceso público; el bucket puede ser accesible públicamente. |
| T-002 | 🔴 CRÍTICA | Suplantación | WebSecurityGroup | El grupo de seguridad 'WebSecurityGroup' expone SSH/RDP (puerto 22/3389) a 0.0.0.0/0. |
| T-003 | 🔴 CRÍTICA | Elevación de privilegios | app_contributor | La asignación de rol 'app_contributor' otorga el rol privilegiado 'Contributor'. |
| T-006 | 🟠 ALTA | Divulgación de información | AuditBucket | El bucket S3 'AuditBucket' no tiene cifrado del lado del servidor configurado. |
| T-008 | 🟠 ALTA | Elevación de privilegios | api | El contenedor 'api' en el Deployment 'api' puede ejecutarse como root (sin runAsNonRoot=true o runAsUser=0). |
| T-011 | 🟠 ALTA | Elevación de privilegios | web | La instancia EC2 'web' permite IMDSv1; el servicio de metadatos accesible sin tokens de sesión, permitiendo el robo de credenciales basado en SSRF. |
### T-002 — Suplantación (CRÍTICA)
Recurso: AWS::EC2::SecurityGroup.WebSecurityGroup
Propiedad: ingress.ssh_rdp_open
Hallazgo: El grupo de seguridad 'WebSecurityGroup' expone SSH/RDP (puerto 22/3389) a 0.0.0.0/0.
Mitigación: Eliminar el acceso público a SSH/RDP. Usar AWS Systems Manager Session Manager
o un bastion host con restricciones de IP.
El informe añade un diagrama flowchart LR en Mermaid. Los nodos se colorean según la severidad máxima (🔴 rojo = CRÍTICA, 🟠 naranja = ALTA). Pega el bloque en cualquier renderizador de Mermaid o véelo directamente en GitHub.