
Lenguaje declarativo de código abierto para el modelado de riesgo cibernético. Construya modelos de riesgo bayesianos como QBER, motores Monte Carlo de FAIR y plataformas empresariales de cuantificación de riesgos. Disponible en PyPI.
Estado: Borrador. Este proyecto está en desarrollo intenso y puede cambiar sin previo aviso. Agradecemos sugerencias, incidencias y contribuciones. ⚠️ ADVERTENCIA Este código se está desarrollando actualmente en la rama
crml-dev-1.3. Para el último trabajo en curso y la fuente de verdad, consulte: https://github.com/Faux16/crml/tree/crml-dev-1.3
Versión: 1.2
Mantenido por: Zeron Research Labs y CyberSec Consulting LLC
Apoyado por:
CRML es un lenguaje de modelado de riesgo cibernético abierto, declarativo, independiente del motor e independiente del marco de Control/Ataque. Proporciona un formato YAML/JSON para describir modelos de riesgo cibernético, asignaciones de telemetría, pipelines de simulación, dependencias y requisitos de salida, sin forzarlo a un método de cuantificación específico, motor de simulación o catálogo de controles de seguridad/amenazas.
CRML permite RaC (Risk as Code - Riesgo como Código): las suposiciones de riesgo y cumplimiento se convierten en artefactos versionados, revisables que pueden ser validados y ejecutados de manera consistente entre equipos y herramientas.
Los profesionales de la ciberseguridad, el cumplimiento y la gestión de riesgos a menudo se enfrentan a los mismos problemas prácticos:
CRML aborda esto estandarizando la descripción de los modelos de riesgo cibernético y sus entradas/salidas, para que diferentes motores y organizaciones puedan intercambiar y ejecutar el mismo modelo con validación y trazabilidad claras.
Los métodos cualitativos (rojo/ámbar/verde, “alto/medio/bajo”, puntuaciones de madurez) son útiles para la comunicación y la priorización, pero tienden a fallar cuando se necesita:
La siguiente evolución es la gestión de riesgos cuantificada: tratar el riesgo cibernético como una distribución estimable de resultados, basada en supuestos y datos explícitos, y calculada por métodos repetibles. Pero los enfoques cuantificados solo escalan cuando los modelos están estandarizados — para que puedan ser validados, revisados, reutilizados y ejecutados entre herramientas y equipos.
El objetivo de CRML es ser este estándar: hace que el modelo sea portátil, los supuestos explícitos y los resultados reproducibles.
Imagine un futuro cercano en el que CRML sea tan normal para el trabajo de riesgo como IaC lo es para la infraestructura:
En ese mundo, el riesgo cibernético se vuelve reproducible, comparable y automatizable entre equipos, manteniendo al mismo tiempo la diversidad metodológica.
Consulte Arquitectura General: wiki/Concepts/Architecture.md
Una organización típica podría mantener CRML junto con el código de detección e infraestructura:
risk/models/ — escenarios y carteras en CRMLrisk/catalogs/ — catálogos versionados de controles + ataques (internos o externos)risk/mappings/ — asignaciones de telemetría/control/amenaza con propiedad e historial de cambioscrml-lang validate en cada PR; un trabajo nocturno ejecuta crml simulate y publica panelesFragmento de ejemplo (ilustrativo):
crml_scenario: "1.0"
meta:
name: "ransomware-baseline"
description: "A simple ransomware risk model"
scenario:
frequency:
basis: per_organization_per_year
model: poisson
parameters:
lambda: 0.15
severity:
model: lognormal
parameters:
median: "250 000"
currency: USD
sigma: 1.2
# Optional, threat-centric controls (org posture typically belongs in portfolios/assessments)
controls:
- id: "org:iam.mfa"
effectiveness_against_threat: 0.35
Este repositorio incluye dos paquetes Python y una interfaz web:
crml-lang: modelos de lenguaje/especificación + validación de esquemas + E/S YAMLcrml-engine: tiempo de ejecución de referencia + CLI crml (depende de crml-lang)web/: CRML Studio — interfaz de usuario en navegador para validación y simulación (Next.js)Si desea la CLI:
pip install crml-engine
Si solo desea la biblioteca de lenguaje:
pip install crml-lang
# o con soporte SCF:
pip install "crml-lang[scf]"
crml-lang validate examples/scenarios/qber-enterprise.yaml
crml simulate examples/scenarios/data-breach-simple.yaml --runs 10000
# Importar catálogo SCF desde Excel
crml-lang scf-import-catalog path/to/SCF_2025.xlsx scf-catalog.yaml
Cargar y validar:
from crml_lang import CRScenario, validate
scenario = CRScenario.load_from_yaml("examples/scenarios/data-breach-simple.yaml")
report = validate("examples/scenarios/data-breach-simple.yaml", source_kind="path")
print(report.ok)
Ejecutar una simulación:
from crml_engine.runtime import run_simulation
result = run_simulation("examples/scenarios/data-breach-simple.yaml", n_runs=10000)
print(result.metrics.eal)
crml_lang/ — paquete de lenguaje/especificacióncrml_engine/ — paquete del motor de referenciaweb/ — interfaz web (Next.js)examples/ — modelos YAML de ejemplo y configuración FXwiki/ — fuente de documentación (MkDocs)CRML Studio se encuentra en web/.
Ejecútelo localmente:
pip install crml-engine
cd web
npm install
npm run dev


Consulte la documentación en wiki/ (comience en wiki/Home.md).
Interoperabilidad OSCAL y reglas de asignación: wiki/Guides/OSCAL.md.
Guía de integración y asignación SCF: wiki/Guides/SCF.md.
Tipos de documentos actuales:
crml_scenario: "1.0" con scenario: de nivel superiorcrml_portfolio: "1.0" con portfolio: de nivel superiorLicencia MIT — consulte LICENSE.