
Linguaggio dichiarativo open-source per la modellazione del rischio informatico. Costruisci modelli di rischio bayesiani come QBER, motori Monte Carlo FAIR e piattaforme di quantificazione del rischio aziendale. Disponibile su PyPI.
Stato: Bozza. Questo progetto è in fase di sviluppo intenso e può cambiare senza preavviso. Accogliamo con favore input, segnalazioni e contributi. ⚠️ ATTENZIONE Questo codice è attualmente in fase di sviluppo sul ramo
crml-dev-1.3. Per l'ultimo lavoro in corso e la fonte della verità, vedere: https://github.com/Faux16/crml/tree/crml-dev-1.3
Versione: 1.2
Mantenuto da: Zeron Research Labs e CyberSec Consulting LLC
Supportato da:
CRML è un linguaggio di modellazione del rischio cyber aperto, dichiarativo, agnostico rispetto al motore e agnostico rispetto al framework di controllo/attacco. Fornisce un formato YAML/JSON per descrivere modelli di rischio cyber, mappature di telemetria, pipeline di simulazione, dipendenze e requisiti di output, senza obbligarti a un metodo di quantificazione specifico, motore di simulazione o catalogo di controlli/minacce.
CRML abilita RaC (Risk as Code): le ipotesi di rischio e conformità diventano artefatti versionati e revisionabili che possono essere validati ed eseguiti in modo coerente tra team e strumenti.
I professionisti della sicurezza informatica, conformità e gestione del rischio affrontano spesso gli stessi problemi pratici:
CRML affronta questo problema standardizzando la descrizione dei modelli di rischio cyber e dei loro input/output, in modo che diversi motori e organizzazioni possano scambiare ed eseguire lo stesso modello con una validazione e tracciabilità chiara.
I metodi qualitativi (rosso/ambra/verde, "alto/medio/basso", punteggi di maturità) sono utili per la comunicazione e la prioritizzazione, ma tendono a fallire quando è necessario:
La prossima evoluzione è la gestione quantificata del rischio: trattare il rischio cyber come una distribuzione stimabile di risultati, basata su ipotesi e dati espliciti, e calcolata con metodi ripetibili. Ma gli approcci quantificati scalano solo quando i modelli sono standardizzati — così possono essere validati, revisionati, riutilizzati ed eseguiti tra strumenti e team.
L'obiettivo di CRML è essere questo standard: rende il modello portabile, le ipotesi esplicite e i risultati riproducibili.
Immagina un futuro prossimo in cui CRML è normale per il lavoro sul rischio quanto lo IaC per l'infrastruttura:
In quel mondo, il rischio cyber diventa riproducibile, confrontabile e automatizzabile tra team — pur consentendo la diversità metodologica.
Vedi Architettura Generale: wiki/Concepts/Architecture.md
Un'organizzazione tipica potrebbe tenere CRML insieme al codice di rilevamento e infrastruttura:
risk/models/ — scenari e portafogli in CRMLrisk/catalogs/ — cataloghi di controlli + attacchi versionati (interni o esterni)risk/mappings/ — mappature di telemetria/controllo/minacce con proprietà e cronologia delle modifichecrml-lang validate su ogni PR; un job notturno esegue crml simulate e pubblica dashboardEsempio di snippet (illustrativo):
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
Questo repository fornisce due pacchetti Python e un'interfaccia web:
crml-lang: modelli linguaggio/specifica + validazione schema + I/O YAMLcrml-engine: runtime di riferimento + CLI crml (dipende da crml-lang)web/: CRML Studio — interfaccia browser per validazione e simulazione (Next.js)Se vuoi la CLI:
pip install crml-engine
Se vuoi solo la libreria del linguaggio:
pip install crml-lang
# or with SCF support:
pip install "crml-lang[scf]"
crml-lang validate examples/scenarios/qber-enterprise.yaml
crml simulate examples/scenarios/data-breach-simple.yaml --runs 10000
# Import SCF Catalog from Excel
crml-lang scf-import-catalog path/to/SCF_2025.xlsx scf-catalog.yaml
Carica e valida:
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)
Esegui una simulazione:
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/ — pacchetto linguaggio/specificacrml_engine/ — pacchetto motore di riferimentoweb/ — interfaccia web (Next.js)examples/ — modelli YAML CRML di esempio e configurazione FXwiki/ — sorgente documentazione (MkDocs)CRML Studio si trova in web/.
Eseguilo localmente:
pip install crml-engine
cd web
npm install
npm run dev


Vedi la documentazione in wiki/ (inizia da wiki/Home.md).
Regole di interoperabilità e mappatura OSCAL: wiki/Guides/OSCAL.md.
Guida all'integrazione e mappatura SCF: wiki/Guides/SCF.md.
Tipi di documento correnti:
crml_scenario: "1.0" con top-level scenario:crml_portfolio: "1.0" con top-level portfolio:Licenza MIT — vedi LICENSE.