Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
threatmap — 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. | Kitploit
Herramientas/GitHubGitHub/bogdanticu88/threatmap
Análisis EstáticoSeguridad de ContenedoresAnálisis de VulnerabilidadesAuditoría de ConfiguraciónSeguridad en la NubeDevSecOpsInteligencia de AmenazasSeguridad de APIs
GitHubbogdanticu88/threatmap

threatmap

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.

Ver Repositorio
6195hace 2 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
2026-03-25_12-36

threatmap

CI Version PyPI Python Docker STRIDE MITRE

PASTA
GraphQL API
License: MIT
Offline

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.


Inicio rápido

CLI:

root@kitploit:~
pip install threatmap
threatmap scan ./ejemplos --output informe.md --fail-on HIGH

Docker:

root@kitploit:~
docker run -v $(pwd):/workspace bogdynn/threatmap:2.1.0 threatmap scan /workspace --output /workspace/informe.md

Servidor API REST:

root@kitploit:~
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:

root@kitploit:~
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)

Formatos y proveedores compatibles

FormatoProveedorExtensión
Terraform HCLAWS, Azure, GCP.tf
CloudFormationAWS.yaml, .yml, .json
Manifiestos de KubernetesKubernetes.yaml, .yml

Instalación

Instalar desde PyPI:

root@kitploit:~
pip install threatmap

O para desarrollo local:

root@kitploit:~
git clone https://github.com/bogdanticu88/threatmap.git
cd threatmap
pip install -e .

Uso

Escanea un directorio e imprime un informe Markdown en stdout:

root@kitploit:~
threatmap scan ./terraform/

Escanea múltiples rutas y escribe un informe JSON en un archivo:

root@kitploit:~
threatmap scan ./terraform/ ./k8s/ ./cloudformation/ --format json --output informe.json

Genera un informe HTML interactivo o un informe SARIF para GitHub Security:

root@kitploit:~
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:

root@kitploit:~
threatmap scan ./infra/ --fail-on HIGH --output informe-amenazas.md

Imprime solo una tabla resumen en terminal, sin escribir un informe completo:

root@kitploit:~
threatmap scan ./infra/ --summary

Utiliza indicadores de severidad solo ASCII (sin emojis) para entornos que no soportan Unicode:

root@kitploit:~
threatmap scan ./infra/ --ascii --output informe.md

Analiza usando diferentes marcos de modelado de amenazas:

root@kitploit:~
# 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

Marcos de modelado de amenazas

STRIDE (73 reglas)

  • Suplantación, Manipulación, Repudio, Divulgación de información, Denegación de servicio, Elevación de privilegios
  • Enfoque centrado en amenazas ideal para identificar la superficie de ataque
  • Específicos del proveedor: AWS (22 reglas), Azure (19 reglas), GCP (15 reglas), Kubernetes (17 reglas)
  • Mejor para: Modelado de amenazas tradicional, revisiones de arquitectura de seguridad

MITRE ATT&CK (11 reglas, 14 tácticas)

  • Mapea las amenazas de infraestructura a tácticas y técnicas de adversarios reales
  • Selección de técnicas consciente de recursos para un mapeo TTP preciso
  • Tácticas: Reconocimiento, Acceso inicial, Ejecución, Persistencia, Escalada de privilegios, Evasión de defensas, Acceso a credenciales, Descubrimiento, Recopilación, Comando y control, Exfiltración, Impacto, Movimiento lateral
  • Mejor para: Alineación con inteligencia de amenazas, planificación de respuesta a incidentes, ejercicios de equipo rojo

PASTA (12 reglas, centrado en activos)

  • Proceso para Simulación de Ataques y Análisis de Amenazas
  • Enfoque centrado en activos centrándose en lo que necesita protección
  • Tipos de activos: Datos, Identidad, Computación, Red, Infraestructura
  • Actores de amenaza: Internos, Externos, Mala configuración, Cadena de suministro
  • Mejor para: Priorización basada en riesgos, estrategias de protección de activos, amenazas a la cadena de suministro

Salida de ejemplo del informe

Ejecutar threatmap scan ./ejemplos --output informe.md contra los ejemplos incluidos produce un informe Markdown completo. A continuación se muestra un extracto representativo.

Tabla de amenazas STRIDE

IDSeveridadCategoría STRIDERecursoDescripción
T-001🔴 CRÍTICADivulgación de informaciónAuditBucketEl bucket S3 'AuditBucket' no tiene configurado un bloque de acceso público; el bucket puede ser accesible públicamente.
T-002🔴 CRÍTICASuplantaciónWebSecurityGroupEl grupo de seguridad 'WebSecurityGroup' expone SSH/RDP (puerto 22/3389) a 0.0.0.0/0.
T-003🔴 CRÍTICAElevación de privilegiosapp_contributorLa asignación de rol 'app_contributor' otorga el rol privilegiado 'Contributor'.
T-006🟠 ALTADivulgación de informaciónAuditBucketEl bucket S3 'AuditBucket' no tiene cifrado del lado del servidor configurado.
T-008🟠 ALTAElevación de privilegiosapiEl contenedor 'api' en el Deployment 'api' puede ejecutarse como root (sin runAsNonRoot=true o runAsUser=0).
T-011🟠 ALTAElevación de privilegioswebLa instancia EC2 'web' permite IMDSv1; el servicio de metadatos accesible sin tokens de sesión, permitiendo el robo de credenciales basado en SSRF.

Detalle de mitigación (extracto)

root@kitploit:~
### 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.

Diagrama de flujo de datos (Mermaid)

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.

root@kitploit:~
flowchart LR
    Internet((Internet))
    subgraph Red
        aws_security_group_web_sg{web_sg}
        NetworkPolicy_default_deny{default-deny}
        azurerm_network_security_group_app_nsg{app_nsg}
    end
    subgraph Computación
        aws_instance_web[web]
    end
    subgraph Kubernetes
        Namespace_myapp[myapp]
        Deployment_api[api]
        Service_api_svc[api-svc]
        Ingress_api_ingress[api-ingress]
    end
    subgraph Datos
        aws_s3_bucket_app_data[(app_data)]
        aws_db_instance_app_db[(app_db)]
        azurerm_storage_account_app_storage[(app_storage)]
    end
    subgraph Seguridad
        azurerm_key_vault_app_kv[app_kv]
    end
    subgraph Identidad
        azurerm_role_assignment_app_contributor[/app_contributor/]
    end
    AWS__S3__Bucket_AppBucket -->|ref| AWS__S3__Bucket_AuditBucket
    AWS__CloudTrail__Trail_AppTrail -->|ref| AWS__S3__Bucket_AuditBucket
    Internet -->|HTTPS| Ingress_api_ingress
    style aws_security_group_web_sg fill:#ff4444,color:#fff
    style aws_s3_bucket_app_data fill:#ff4444,color:#fff
    style aws_instance_web fill:#ff8800,color:#fff
    style Deployment_api fill:#ff8800,color:#fff
    style azurerm_key_vault_app_kv fill:#ffcc00,color:#000
    style azurerm_network_security_group_app_nsg fill:#ff8800,color:#fff
    style azurerm_role_assignment_app_contributor fill:#ff4444,color:#fff

Características avanzadas (v2.1.0+)

Análisis de rutas de ataque basado en grafos

threatmap ahora incluye Inteligencia de Grafos que rastrea las relaciones entre recursos. Identifica automáticamente amenazas "encadenadas" donde el compromiso de un recurso (por ejemplo, una EC2 expuesta a Internet) conduce directamente a otro (por ejemplo, un bucket S3 privado), marcando estas rutas como Elevación de privilegios.

Reglas YAML personalizadas

Puedes definir requisitos internos de seguridad creando un archivo threatmap_rules.yaml en la raíz de tu proyecto.

root@kitploit:~
rules:
  - resource_type: "aws_s3_bucket"
    property: "force_destroy"
    expected: false
    stride: "Tampering"
    severity: "MEDIUM"
    description: "Los buckets de producción no deberían tener force_destroy habilitado."
    mitigation: "Establece force_destroy = false."

Consejos de remediación

La mayoría de los hallazgos ahora incluyen un campo de remediación (visible en informes JSON, HTML y SARIF) que proporciona el fragmento de código exacto necesario para solucionar el problema de seguridad.


Arquitectura

Analizador STRIDE — Reglas de amenazas específicas del proveedor:

root@kitploit:~
threatmap/analyzers/
├── aws.py         # 22 reglas — S3, IAM, EC2, RDS, EKS, CloudTrail, KMS, Lambda
├── azure.py       # 19 reglas — Storage, Key Vault, NSG, RBAC, AKS, ACR, SQL
├── gcp.py         # 15 reglas — GCS, Firewall, Compute, Cloud SQL, GKE, IAM, KMS
└── kubernetes.py  # 17 reglas — workloads, RBAC, network, secrets

Analizador MITRE ATT&CK — 11 reglas mapeadas a tácticas MITRE:

  • Selección de técnicas consciente de recursos
  • Soporte: IAM, Storage, Network, Compute, Kubernetes, Bases de datos
  • Proporciona mapeo táctica→técnica para alineación con inteligencia de amenazas

Analizador PASTA — 12 reglas con enfoque centrado en activos:

  • Clasifica los recursos por tipo de activo (datos, identidad, computación, red, infraestructura)
  • Identifica actores de amenaza (internos, externos, mala configuración, cadena de suministro)
  • Asigna escenarios de ataque a cada amenaza

APIs:

  • API REST: /health, /version, /rules, /analyze, /analyze/file
  • API GraphQL: /graphql con Query (health, version, rules) y Mutation (analyze)

Cada regla es una función que recibe un objeto Resource (normalizado a partir del formato fuente analizado) y devuelve un Threat si se cumple la condición. Las reglas son condicionales simples en Python — sin DSL, sin motor de expresiones regulares, sin archivos de reglas externos.

Cómo se asignan las severidades

La severidad refleja tanto la explotabilidad como el radio de explosión:

SeveridadSignificado
CRÍTICAExplotable directamente sin condiciones adicionales (ej.: SSH abierto a 0.0.0.0/0, política IAM comodín, enlace cluster-admin a anónimo)
ALTARiesgo significativo que requiere un paso adicional (ej.: RDS sin cifrar con acceso público, IMDSv1 en una instancia EC2)
MEDIAFaltan controles de defensa en profundidad: riesgo inmediato menor pero viola líneas base de seguridad (ej.: sin versionado, sin registro, sin límites de recursos)
BAJABrechas de buenas prácticas con explotabilidad limitada por sí mismas (ej.: Lambda sin VPC)

Cómo se evitan los falsos positivos

  • Sin heurísticas ni ML — cada regla se activa sobre un valor de propiedad concreto e inequívoco (ej.: publicly_accessible = true, Principal: "*").
  • Valores predeterminados conservadores — si una propiedad está ausente, la regla asume el valor inseguro predeterminado (ej.: sin bloque metadata_options en una instancia EC2 significa que IMDSv1 está activo, porque ese es el valor predeterminado de AWS).
  • Sin estado entre cuentas o en tiempo de ejecución — la herramienta solo examina lo declarado en la plantilla. No intenta inferir qué políticas SCP, límites de permisos o configuraciones en tiempo de ejecución podrían mitigar un hallazgo.
  • Desduplicación en el motor — los hallazgos se identifican mediante (stride_category, resource_name, trigger_property), por lo que el mismo problema lógico nunca se informa dos veces, incluso si aparece en múltiples formatos de archivo.

Integración con CI

root@kitploit:~
# .github/workflows/threat-model.yml
name: Modelo de amenazas

on: [pull_request]

jobs:
  threatmap:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Configurar Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - name: Instalar threatmap
        run: pip install threatmap

      - name: Ejecutar análisis de modelo de amenazas
        run: |
          threatmap scan ./infra/ \
            --format markdown \
            --output informe-amenazas.md \
            --fail-on HIGH

      - name: Subir informe de amenazas
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: informe-amenazas
          path: informe-amenazas.md

La bandera --fail-on HIGH hace que el trabajo termine con código 1 si se encuentra alguna amenaza ALTA o CRÍTICA, bloqueando la fusión del PR. El artefacto subido proporciona a los revisores el informe completo sin salir de la solicitud de extracción.


Cobertura de reglas STRIDE

ProveedorReglas
AWS (Terraform + CloudFormation)22
Azure (Terraform)19
GCP (Terraform)15
Kubernetes17
Total73

Categorías cubiertas por proveedor:

ProveedorSTRIDE
AWS✓✓✓✓✓✓
Azure✓✓✓✓—✓
GCP✓✓✓✓—✓
Kubernetes✓✓—✓✓✓

(S=Suplantación, T=Manipulación, R=Repudio, I=Divulgación de información, D=Denegación de servicio, E=Elevación de privilegios)


Desarrollo

Ejecutar pruebas:

root@kitploit:~
pytest tests/ -v

Ejecutar con cobertura:

root@kitploit:~
pytest tests/ --cov=threatmap --cov-report=term-missing

Contribuciones

  1. Haz un fork del repositorio
  2. Añade reglas en threatmap/analyzers/<proveedor>.py siguiendo el patrón existente
  3. Añade un fixture en tests/fixtures/ que active la nueva regla
  4. Añade aserciones en tests/test_analyzers.py
  5. Abre una solicitud de extracción
Descargar herramienta