
Langage déclaratif open-source pour la modélisation des risques cyber. Construisez des modèles de risque bayésiens comme QBER, des moteurs Monte Carlo FAIR et des plateformes de quantification des risques d'entreprise. Disponible sur PyPI.
Statut : Projet en chantier. Ce projet est en développement actif et peut changer sans préavis. Nous accueillons les retours, les signalements de problèmes et les contributions. ⚠️ AVERTISSEMENT Ce code est actuellement développé sur la branche
crml-dev-1.3. Pour la dernière version en cours et la source de vérité, voir :
Version : 1.2
Maintenu par : Zeron Research Labs et CyberSec Consulting LLC
Soutenu par :
CRML est un langage ouvert, déclaratif, indépendant du moteur et indépendant des cadres de contrôle/attaque pour la modélisation des risques cyber. Il fournit un format YAML/JSON pour décrire des modèles de risque cyber, les correspondances de télémétrie, les pipelines de simulation, les dépendances et les exigences de sortie — sans vous enfermer dans une méthode de quantification spécifique, un moteur de simulation, ou un catalogue de contrôles/menaces.
CRML permet le RaC (Risk as Code) : les hypothèses de risque et de conformité deviennent des artefacts versionnés et vérifiables qui peuvent être validés et exécutés de manière cohérente entre équipes et outils.
Les professionnels de la cybersécurité, de la conformité et de la gestion des risques sont souvent confrontés aux mêmes problèmes pratiques :
CRML répond à cela en normalisant la description des modèles de risque cyber et de leurs entrées/sorties, afin que différents moteurs et organisations puissent échanger et exécuter le même modèle avec une validation et une traçabilité claires.
Les méthodes qualitatives (rouge/ambre/vert, « élevé/moyen/faible », scores de maturité) sont utiles pour la communication et la priorisation, mais elles tendent à montrer leurs limites lorsque vous devez :
La prochaine évolution est la gestion quantifiée des risques : traiter le risque cyber comme une distribution estimable de résultats, fondée sur des hypothèses et des données explicites, et calculée par des méthodes reproductibles. Mais les approches quantifiées ne passent à l’échelle que si les modèles sont standardisés — afin qu’ils puissent être validés, revus, réutilisés et exécutés à travers les outils et les équipes.
L’objectif de CRML est d’être cette norme : il rend le modèle portable, les hypothèses explicites et les résultats reproductibles.
Imaginez un futur proche où CRML est aussi normal pour le travail sur les risques que l’IaC pour l’infrastructure :
Dans ce monde, le risque cyber devient reproductible, comparable et automatisable entre les équipes — tout en permettant la diversité méthodologique.
Voir Architecture générale : wiki/Concepts/Architecture.md
Une organisation typique pourrait conserver CRML aux côtés du code de détection et d’infrastructure :
risk/models/ — scénarios et portefeuilles en CRMLrisk/catalogs/ — catalogues de contrôles et d’attaques versionnés (internes ou externes)risk/mappings/ — correspondances télémétrie/contrôle/menace avec historique de propriété et de modificationscrml-lang validate sur chaque PR ; un travail nocturne exécute crml simulate et publie des tableaux de bordExemple d’extrait (illustratif) :
crml_scenario: "1.0"
meta:
name: "ransomware-baseline"
description: "Un modèle de risque ransomware simple"
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
# Optionnel, contrôles centrés sur la menace (la posture de l’organisation appartient généralement aux portefeuilles/évaluations)
controls:
- id: "org:iam.mfa"
effectiveness_against_threat: 0.35
Ce dépôt contient deux paquets Python et une interface web :
crml-lang : modèles de langage/spécification + validation de schéma + E/S YAMLcrml-engine : moteur d’exécution de référence + CLI crml (dépend de crml-lang)web/ : CRML Studio — interface navigateur pour la validation et la simulation (Next.js)Si vous voulez la CLI :
pip install crml-engine
Si vous voulez seulement la bibliothèque de langage :
pip install crml-lang
# ou avec le support SCF :
pip install "crml-lang[scf]"
crml-lang validate examples/scenarios/qber-enterprise.yaml
crml simulate examples/scenarios/data-breach-simple.yaml --runs 10000
# Importer un catalogue SCF depuis Excel
crml-lang scf-import-catalog path/to/SCF_2025.xlsx scf-catalog.yaml
Charger et valider :
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)
Exécuter une simulation :
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/ — paquet de langage/spécificationcrml_engine/ — paquet du moteur de référenceweb/ — interface web (Next.js)examples/ — exemples de modèles YAML CRML et configuration FXwiki/ — source de la documentation (MkDocs)CRML Studio se trouve dans web/.
Exécutez-le localement :
pip install crml-engine
cd web
npm install
npm run dev
Ouvrez http://localhost:3000


Voir la documentation sous wiki/ (commencez par wiki/Home.md).
Interopérabilité OSCAL et règles de correspondance : wiki/Guides/OSCAL.md.
Guide d’intégration et de correspondance SCF : wiki/Guides/SCF.md.
Types de documents actuels :
crml_scenario: "1.0" avec scenario: de premier niveaucrml_portfolio: "1.0" avec portfolio: de premier niveauLicence MIT — voir LICENSE.