UStackUStack
crml icon

crml

crml 是開源的資安風險建模宣告式語言,使用 YAML/JSON 定義模型、遙測映射、模擬流程與輸出,且不綁特定引擎/框架。

crml

crml 是什麼?

crml (CRML — Cyber Risk Modeling Language) 是一種開源的宣告式資安風險建模語言。它讓你使用 YAML/JSON 格式描述風險模型、遙測映射、模擬流程、依賴關係與所需輸出—無需綁定特定量化方法、模擬引擎或控制/威脅框架。

此專案設計用於支援「Risk as Code」工作流程,讓假設與模型定義存放在可版本化、可審核的檔案中(例如 Git)。這旨在透過標準化輸入、假設與輸出的表示方式,讓資安風險模型更容易驗證、重現,並在團隊與工具間交換。

主要功能

  • 宣告式 YAML/JSON 模型描述:以可攜式格式表達風險模型及其執行需求,而非將邏輯嵌入試算表或一次性工具。
  • 引擎無關的模擬規格:定義模擬流程與依賴關係,讓不同模擬引擎能使用相同模型定義(只要符合 CRML)。
  • 控制/攻擊框架無關的映射:表示對控制與攻擊的映射,而不鎖定單一框架或目錄,有助於框架演進時的調整。
  • 控制效能建模:建模控制如何降低風險,包括「defense in depth」假設。
  • 對數常態分佈的中位數參數化:直接指定對數常態分佈的中位數,符合 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

替代方案

  • 試算表或簡報式的資安風險建模:常用於質性或半定量工作,但相較於宣告式且經過 schema 驗證的文件方式,這些格式較難驗證並一致重現。
  • 特定引擎的資安風險建模實作:將假設與模擬邏輯直接嵌入專有模型格式的工具,能更緊密整合,但切換量化引擎或更新映射時常需重寫。
  • 通用宣告式設定格式(例如,模型設定檔):可使用通用格式將參數外部化,但通常不會提供 crml 的資安風險專屬結構,用於遙測映射、模擬流程與標準化輸出。
  • 其他「Risk as Code」建模方法:能版本化假設與參數以提升可審閱性,但可能未專為跨控制/攻擊與引擎情境的資安風險建模設計。
crml | UStack