🐙

DeTT&CT実践4

に公開

はじめに

DeTT&CTの実践として、テクニック管理ファイルから検出の可視化を行います。

現在の状況

現在、テクニック管理ファイルには可視性スコアが割合っている状態です。

テクニック管理ファイルは、データソース管理ファイルから生成されました。
可視性スコアは大まかな値が割り振られており、DeTT&CTエディタを通じていくつかの可視性スコアが実際の状態に合わせてカスタマイズされているかもしれません。

DeTT&CTエディタで、テクニック管理ファイルを開くと検出スコア(Detection Scores)に -1 が割り振られています。

検出スコアの意味は次の通りです。

検出スコア:

スコア スコア名 説明
-1 None 検出が全く行われていない状態
0 Forensics/context 検出はないが、フォレンジック用途やコンテキスト把握のためにログが記録されている状態
1 Basic 基本的なシグネチャでテクニックの一部のみを検出。検出の対象範囲が狭く、見逃し(False Negative)が覆い可能性。誤検知(False Positive)が多い場合もある。リアルタイム性は保証されないことがある。
2 Fair 単純なシグネチャに加え、相関ルールを用いて検出範囲を広げている状態。「Basic」よりは見逃しが減るが、依然として誤検知や見逃しが存在。リアルタイムとは限らない
3 Good より高度な分析を用いてテクニックの多くを検出可能。回避や難読化には部分的弱いが、リアルタイムでの検知が可能。誤検知はあっても識別しやすく、除外可能な場合が多い
4 Very good ほとんどの側面をリアルタイムで検出可能であり、非常に高い検出力。回避手法にも強い。誤検知は少なく、あっても認識除去が可能。見逃しも少ない
5 Excellent 「Very good」と同等の検出力に加え、全ての既知の側面をカバーしている状態。見逃しの可能性はさらに低い

側面別検出スコア(Detection Scores by Aspects):

スコア スコア名 検出の度合い タイミング テクニック全体のカバー度 回避の可能性 False Negative False Positive
-1 None 全くなし - 全くなし - - -
0 Forensic/context 全くなし 即時とは限らない 検出対象無し - - -
1 Basic(Signature based) 基本的なシグネチャ 即時とは限らない ごく一部の側面のみ 回避・難読化の可能性あり 多い 多い可能性
2 Fair(Correlation rules) 相関ルールなどを利用 即時とは限らない Basicより多くの側面をカバー 回避可能性あり 多い可能性 存在する可能性
3 Good 複雑な分析を活用 リアルタイム 既知の多くの側面をカバー 回避可能性あり 存在 識別しやすく、除去可能な誤検知あり
4 Very good 複雑な分析を活用 リアルタイム ほぼすべての側面をカバー 回避は難しい 少ない 識別しやすく、除去可能な誤検知あり
5 Excellent 複雑な分析を活用 リアルタイム 全ての既知の側面をカバー 回避は難しい 非常に少ない 識別しやすく、除去可能な誤検知あり

側面別検出スコアは、複数の側面(観点)ごとに判断をしスコア値を算出することになるため、ここでは総合的なスコア値を出す 検出スコア の方の考え方で値を設定することを考えます。

検出スコア

検出は、実際にアラートやイベントとして攻撃を検出することを意味します。
検出スコアは、検出の能力についての評価を表します。

アラートやイベントとして攻撃を検出するのは、監視/検出のシステム全体の話となります。
SIEMのアラートやイベント検出機能に攻撃が検出された場合、検出されたと判断できます。

検出された攻撃は、DeTT&CTエディタで1つずつ、検出スコア値1以上で設定していきます。

検出はできていないが検出ルールを組む、あるいは記録されているログを別の手段で調査すれば検出可能であるなら、検出スコアを0にします。

0以上のスコア値をどう決めるかについては、運用をしながら少しずつ調整していけば良いと思います。まずは、初期状態として -1 になっている攻撃について、実際に検出されたものを スコア値 1 に設定していくこと目指すと良いと思います。

検出スコア設定方法

検出スコアを、DeTT&CTエディタを使って手動で設定していくのは手間がかかります。

スコア値の入力を効率化あるいは自動化するための方法として、dettectinatorを利用する方法があります。

dettectinatorは、データソース管理ファイルを生成する際に使いましたが、テクニック管理ファイルを生成あるいは更新することにも使えます。

Microsoft Defender(for Endpoint)による検出を、dettectinatorを使ってテクニック管理ファイルに反映させたい場合、2つのアプローチがあります。

  • Microsoft Defender for Endpointの提供するAPIを利用してアラート情報を取得し、その内容をもとにテクニック管理ファイルを生成/更新する方法
  • CSV(やExcel)などで検出状況を用意し、その内容をもとにテクニック管理ファイルを生成/更新する方法

dettectinatorおよびプラグインについての説明は以下の記事を参照してください。
https://zenn.dev/sesamum/articles/8930d251b08ef5

この記事では、dettectinatorのTechniqueCsvプラグインを使い、ローカルに検出状況を記載したCSVファイルを用意してテクニック管理ファイルに検出スコアを反映する方法について説明します。

CSVファイルを用意する

CSVのフォーマットは、0番目にATT&CKのテクニックID(例: T1059.006)を指定し、1番目のカラムにユースケースを指定します。

ユースケースというのは、このテクニックを検出する際の検出クエリルール名など、区別するための情報のことです。DeTT&CTエディタで見た場合に、ユースケースの内容が表示されるくらいですので、何を入れても動作に影響はありません。

update.csv:

T1059.006,dettect_rule_name1

CSVファイルの内容をテクニック管理ファイルに反映する

CSVファイルの内容を、dettectinatorを使ってテクニック管理ファイルに反映します。

ここまでの説明通りに進めているのであれば、現在のテクニック管理ファイルは、./output/mde_techniques.yaml という名前のファイルになっています。

  1. dettectinatorのディレクトリへ移動します。
$ cd ~/dettectinator
  1. Python開発環境に入ります。
$ source .venv/bin/activate  # bash
or
$ source .venv/bin/activate.fish  # fish
  1. dettectinatorディレクトリに移動します。
(.venv) $ cd dettectinator
  1. inputディレクトリにCSVファイルを配置します。

update.csv:

T1059.006,dettect_rule_name1
(.venv) $ echo "T1059.006,dettect_rule_name1" >> input/update.csv
  1. dettectinatorを使ってupdate.csvの内容をテクニック管理ファイルに反映します。
# python dettectitnator.py -p TechniqueCsv -s attack-stix-data --file input/update.csv -a default -d enterprise -i output/mde_techniques.yaml -o mde_techniques_update.yaml

Plugin "TechniqueCsv" has been found.
Using "TechniqueCsv" to collect data.
Reading data from "input/update.csv"
Generating techniques YAML file.
DeTT&CT YAML file written: ./output/mde_techniques_update.yaml

Please review the following items:
 - Check score for technique T1059.006. applicable_to is new: ['default'].

mde_techniques.yamlに記載されている情報はそのままに、update.csvで指定されているテクニックのdetectionスコアが1に設定されます。

  1. DeTT&CTエディタで、TECHNIQUESに mde_techniques_update.yaml を読み込む

T1059.006の検出スコアが1に変わっていることを確認できます。

  1. dettectコンテナに入ります
$ cd ~/dettect
$ docker compose exec dettect /bin/bash
  1. 検出を可視化します。
# python dettect.py d -ft output/mde_techniques_update.yaml --local-stix-path ./attack-stix-data -l -of ./output/mde_techniques_update.json
  1. ブラウザからNavigatorを開き、mde_techniques_update.jsonを読み込みます

T1059.006である、Pythonに色が付いていることを確認してください。

まとめ

DeTT&CT実践として、DeTT&CTを使った防御ギャップ(監視/検出能力の評価)を行う方法について説明しました。

MITRE ATT&CKの活用について、特に防御側の観点での利用はそのままでは難しいのですが、DeTT&CTフレームワークやdettectinatorツールを使うことで、考え方や実施方法ツール群までカバーできます。

今後もMITRE ATT&CKに関連する情報を説明していきたいと思います。読んでいただいてありがとうございました。

関連記事

MITRE ATT&CK関連記事一覧
https://zenn.dev/sesamum/articles/fba079cadba113

Discussion