状态: 草案。本项目正处于大量开发阶段,可能随时变更。 欢迎提交意见、问题和贡献。 ⚠️ 警告 该代码库目前正在
crml-dev-1.3分支上进行开发。最新进展和权威来源请参见:https://github.com/Faux16/crml/tree/crml-dev-1.3
版本: 1.2
维护者: Zeron Research Labs 与 CyberSec Consulting LLC
支持方:
CRML 是一种开放的、声明式的、引擎无关且控制/攻击框架无关的网络风险建模语言。 它提供了一种 YAML/JSON 格式,用于描述网络风险模型、遥测映射、仿真管道、依赖项和输出需求——而不强制你使用特定的量化方法、仿真引擎或安全控制/威胁目录。
CRML 实现了 RaC(风险即代码):风险和合规假设成为可版本化、可审查的工件,能够在团队和工具之间进行一致的验证和执行。
网络安全、合规和风险管理专业人员常常面临相同的实际问题:
CRML 通过标准化网络风险模型及其输入/输出的描述来解决这一问题,使得不同的引擎和组织能够交换并执行相同的模型,同时具备明确的验证和可追溯性。
定性方法(红/黄/绿、“高/中/低”、成熟度评分)在沟通和排序方面很有用,但当需要以下情况时,它们往往不够用:
下一步的演进是量化风险管理:将网络风险视为可估计的结果分布,基于明确的假设和数据,并通过可重复的方法进行计算。 但量化方法只有在模型标准化后才能规模化——这样模型才能跨工具和团队进行验证、审查、复用和执行。
CRML 的目标就是成为这一标准:它使模型可移植、假设明确、结果可复现。
想象一个不久的将来,CRML 在风险工作中如同 IaC 在基础设施中一样普遍:
在那个世界里,网络风险变得可复现、可比较、可自动化地跨团队运行——同时仍保持方法论的多样性。
参见整体架构:wiki/Concepts/Architecture.md
一个典型组织可能会将 CRML 与检测代码和基础设施代码放在一起:
risk/models/ — CRML 格式的场景和投资组合risk/catalogs/ — 版本化的控制 + 攻击目录(内部或外部)risk/mappings/ — 遥测/控制/威胁映射,包含负责人和变更历史crml-lang validate;夜间作业运行 crml simulate 并发布仪表板示例片段(说明性):
crml_scenario: "1.0"
meta:
name: "ransomware-baseline"
description: "一个简单的勒索软件风险模型"
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
# 可选,以威胁为中心的控制(组织态势通常属于投资组合/评估)
controls:
- id: "org:iam.mfa"
effectiveness_against_threat: 0.35
本仓库提供两个 Python 包和一个 Web UI:
crml-lang:语言/规范模型 + 模式验证 + YAML 输入输出crml-engine:参考运行时 + crml 命令行界面(依赖 crml-lang)web/:CRML Studio — 用于验证和仿真的浏览器 UI(Next.js)如果你需要命令行界面:
pip install crml-engine
如果你只需要语言库:
pip install crml-lang
# 或启用 SCF 支持:
pip install "crml-lang[scf]"
crml-lang validate examples/scenarios/qber-enterprise.yaml
crml simulate examples/scenarios/data-breach-simple.yaml --runs 10000
# 从 Excel 导入 SCF 目录
crml-lang scf-import-catalog path/to/SCF_2025.xlsx scf-catalog.yaml
加载并验证:
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)
运行仿真:
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/ — 语言/规范包crml_engine/ — 参考引擎包web/ — Web UI(Next.js)examples/ — 示例 CRML YAML 模型和 FX 配置wiki/ — 文档源文件(MkDocs)CRML Studio 位于 web/ 中。
本地运行:
pip install crml-engine
cd web
npm install
npm run dev


请参见 wiki/ 下的文档(从 wiki/Home.md 开始)。
OSCAL 互操作性和映射规则:wiki/Guides/OSCAL.md
SCF 集成和映射指南:wiki/Guides/SCF.md
当前文档类型:
crml_scenario: "1.0",顶层 scenario:crml_portfolio: "1.0",顶层 portfolio:MIT 许可证 — 参见 LICENSE