UStackUStack
crml icon

crml

crml 是开源声明式网络风险建模语言,使用 YAML/JSON 定义模型、遥测映射、仿真流水线与输出,跨引擎框架无关。

crml

crml 是什么?

crml(CRML — Cyber Risk Modeling Language)是一种开源声明式网络风险建模语言。它允许您使用 YAML/JSON 格式描述风险模型、遥测映射、仿真流水线、依赖关系和所需输出,而无需指定特定的量化方法、仿真引擎或控制/威胁框架。

该项目旨在支持“Risk as Code”工作流,其中假设和模型定义可以存放在可版本化、可审查的工件中(例如 Git 中)。这通过标准化输入、假设和输出的表示方式,使网络风险模型更容易验证、可复现,并在团队和工具间交换。

主要特性

  • 声明式 YAML/JSON 模型描述:以便携格式表达风险模型及其执行要求,而不是将逻辑嵌入电子表格或一次性工具中。
  • 引擎无关的仿真规范:定义仿真流水线和依赖关系,以便不同仿真引擎使用相同的模型定义(只要符合 CRML)。
  • 控制/攻击框架无关的映射:表示与控制和攻击的映射,而不锁定到单一框架或目录,有助于框架演进时适应。
  • 控制有效性建模:建模控制如何降低风险,包括“纵深防御”假设。
  • 对数正态分布的中位数参数化:直接指定对数正态分布的中位数,与 CRML 方法中风险分布的参数化方式一致。
  • 通过 JSON Schema 的严格验证:在仿真前验证模型文档,早起捕获结构错误。

如何使用 crml

  1. 获取项目和文档:从仓库开始(README 和文档包含在仓库内容中),并安装 PyPI 上可用的包。
  2. 编写 CRML 文档:创建 YAML/JSON 文档,描述您要运行的模型元素——如遥测映射、依赖关系、仿真流水线结构和输出要求。
  3. 验证文档:使用项目的基于 schema 的验证,在运行仿真前检查错误。
  4. 使用兼容引擎运行:使用与 CRML 兼容的仿真流水线执行模型。由于 CRML 旨在引擎无关,同一 CRML 文档可在不同兼容引擎间复用。

使用场景

  • 在 Git 中使风险模型可审查:将基于电子表格或演示文稿的模型假设转换为可版本化的 CRML 文档,以便在 diff 中查看变更并进行审计。
  • 跨团队标准化模型交换:在分析师和工具间共享单一 CRML 定义的风险模型,确保相同输入/假设/输出被一致解释。
  • 带明确假设的量化风险比较:运行“有/无投资”或“跨时间段”等场景,同时保持假设明确并绑定到已验证的模型定义。
  • 将网络风险映射到更广泛的企业风险工作流:使用 CRML 的标准化输入/输出表示,支持网络指标输入企业风险和财务规划流程时的可追溯性。
  • 框架变更时演进映射:当控制或威胁框架(例如 ATT&CK、NIST、ISO 或内部目录)更新时,更新 CRML 映射,而非重写引擎特定建模逻辑。

常见问题

  • crml 是否生产就绪? 仓库声明项目状态为 Draft,正在大力开发中,可能随时变更。活跃开发分支为 crml-dev-1.3

  • crml 使用什么格式定义模型? CRML 使用 YAML/JSON 格式描述风险模型、遥测映射、仿真流水线、依赖关系和输出要求。

  • crml 是否强制特定风险量化方法? 否。它旨在 implementation-agnosticengine-agnostic,因此您可以描述模型而不强制特定量化方法或仿真引擎。

  • crml 如何减少建模错误? 它支持使用 JSON Schema严格验证,在仿真前捕获模型文档中的错误。

  • 项目在哪里分发? 仓库元数据声明它 available on PyPI

替代方案

  • 基于电子表格或幻灯片的网络风险建模:常用于定性或半定量工作,但与声明式、模式验证的文档方法相比,这些格式更难验证和一致复现。
  • 特定引擎的网络风险建模实现:将假设和仿真逻辑直接嵌入专有模型格式的工具可能更紧密集成,但切换量化引擎或更新映射时往往需要重写。
  • 通用声明式配置格式(例如,模型配置文件):可以使用通用格式外部化参数,但它们通常无法提供 CRML 的网络风险专用结构,用于遥测映射、仿真流水线和标准化输出。
  • 其他“Risk as Code”建模方法:版本化假设和参数的方法可提升可审查性,但可能并非专为跨控制/攻击和引擎语境的网络风险建模设计。
crml | UStack