SSVCのDecision Tableを雑に実装してみる~DecisionRules.io編~
概要
タイトルの通りです。インポート用のExcelファイルを置いておきます。
https://github.com/w4yh/SSVC-decision-tree
ファイル: SSVC_Handling_SupplierTable_0.0.2.xlsx
経緯
TwitterでSSVCのことを知りました。
📝CVSSにとって代わるかもしれない 脆弱性の管理方法 SSVC のすばらしいまとめ。CISAもSSVC推しだしhttps://t.co/VdVt6SrOKI
— Yurika (@EurekaBerry) 2022年8月10日
元となるブログ記事やその引用記事などを読んで、これはPrologで書けそうなディシジョンテーブルだなあと思いました(本投稿ではSSVC自体の説明は一切しませんので以下リンクの素晴らしいコンテンツをご参照ください)。
shinobe179.hatenablog.com
www.pwc.com
github.com
しかしPrologで書いてもProlog実行環境のインストールから説明することになるよなあ...と察したので今回はDecisionRulesというサービスを使って実装してみます。
ここではまずSSVCの"Suggested Supplier Table"を作ってみます。
DecisionRules概要
ディシジョンテーブルなどを作成&実行できる便利SaaSです。
www.decisionrules.io
Freeプランもあるのでアカウントを作成してください。ただし企業名や電話番号を求められます。
Excelからのインポートでテーブルを作成する
ログイン後、左側メニューから [Decision Tables] を選択します。
DecisionTablesのトップ画面で [+ Decision Table] を選択して新規作成していきます。
作成方法の選択画面では右の [EMPTY DECISION TABLE] を選択し、
画像の赤枠部分でこのディシジョンテーブルを命名して下の [Continue] を選択します。
空のディシジョンテーブルが表示されます。
左側の [Rule Settings] タブに移動します。
テーブル設定画面で右上のメニューから [Import Version] を選択します。
Import Decision Table の画面に進んだら
[1. Select Version!] で [Current (version 1)] を選択し、
[2. Drop or choose file!] で本投稿先頭に示したGitHubからダウンロードしたxlsxファイルを指定します。
ファイルに問題が無ければ下に [Save] のボタンが表示されるので選択します。
読み込んだディシジョンテーブルが表示されます。
なおSSVCの項目のうちUtilityはAutomatableとValue Densityの2つから決まるので、直接AutomatableとValue Densityを入力する形にしました。さらにPublic Safety Impactは実質Safety Impactで決まるのでSafety Impactのみの入力を必要としています。
実行
テーブルを眺め終わったらさっそく実行してみましょう。
左側メニューから [Test bench] を選択します。
[1. Select Meta Data] の部分は自動で値が入っていると思います。
(API Key情報を含むのでキャプチャ略)
[2. Fill Request Body & Solve!] の欄に入力値を入れていきます。
Exploitation (Active | PoC | none)
Automatable (yes | no)
Value Density (concentrated | diffuse)
Technical Impact (Total | Partial)
Safety Impact (Catastrophic | Hazardous | Major | Minor | None)
プルダウン選択..とはいきませんが、Valueの入力欄右側のハンバーガーメニュー(?縦3dots?)から [Preset Values] を選択すると値のリスト選択ダイアログが出ます。
5項目の値をすべて入力して中央の [▶Run] を押します。
右側のOutputの欄に結果が表示されます。この場合は Priority=immediate、すぐに対応せよとなりました。
同じ画面の下の方に [Code example] という欄があります。ここに今行ったテストをcURLやプログラミングから実施する場合のコードが表示されます(ここもAPI Keyを含むのでキャプチャ省略)。便利ですね!
振り返り
SSVC Supplier Decision Tableの決定木をDecionRulesで実装することができました。
一覧で見通せる上Excel形式でのインポート&エクスポートもできお手軽だったと思います。
しかし、入力値のそれぞれの値についてツールチップなどで説明を表示といった機能を持たせていないので「別途資料を見ながら値の判定を行った後で最後に決定木を辿る部分だけの実装」となっています。Code Exampleの欄にPython等のコードも表示されるので周辺機能を作りこめばいいんですけどね。。でもそれならPrologでも苦労変わらないし。。
次回、「Decision TableをTwineでノベルゲームっぽく長い説明付きで実装する編」モノはできたので書けたら書きます。
エクスカーション
DecisionRules良かったです
今回たまたま見つけて使ってみましたが分かりやすかったです。コードを書けない人とビジネスルールの意識合わせをする場合にも使えそうな気がします。
また今回はインポートするので空白テーブルから作成しましたが、サンプルテーブルの内容はディシジョンテーブル界のHello Worldこと"複数の条件からなる割引率の決定"です。