😎

dettectinator入門

に公開

はじめに

本記事では、DeTT&CT用のYAMLファイルを最初に用意する、あるいは定期的に更新する際に便利なdettectinatorツールについて紹介します。

https://github.com/siriussecurity/dettectinator

DeTT&CTを使用するにあたっての課題として、検出ルールやデータソースなどの量が多く、カバレッジを測定しはじめるまでの労力がかかるという点がありました。dettectinatorを使うと、DeTT&CTで用意しなければならないデータソース管理ファイル、テクニック管理ファイルを自動的に処理することができるようになります。

dettectinatorは、Pythonのライブラリとして導入して利用する方法と、CLIツールとして利用する方法の2種類があります。

本記事では、CLIツールとしての利用を中心に説明します。

dettectinatorとは

dettectinatorは、MITER ATT&CKを防御視点で活用するためのOSSツール「DeTT&CT」のサポートツールです。Pythonライブラリ兼CLIツールであり、SOCの自動化/パイプラインに組み込み、SIEM/EDRなどから検出ルールやデータソース情報を取り込んで、DeTT&CTのYAMLファイルを自動生成・更新するために使われます。

DeTT&CTのYAMLファイルは、DeTT&CT側の仕組みにより、ATT&CK Navigator用のファイルに変換し可視化に使われます。

できること

各種製品用にプラグインが用意されており、検出ルールを読み込み、技術(TTP)にマッピングしたYAMLを作成できます。

データソース用のプラグインも提供されており、DeTT&CTのデータソース用YAMLを作成することもできます。

dettectinator導入方法

用途によって2種類の導入方法があります。

Pythonのライブラリとして導入する

Pythonのライブラリとして導入し、自身の作成するPythonプログラムから呼び出す場合は pip コマンドで導入します。

https://github.com/siriussecurity/dettectinator/wiki/Dettectinator-as-a-library

pip install detectinator

ライブラリとしての利用方法については、公式サイトを参照してください。

https://github.com/siriussecurity/dettectinator/wiki/Dettectinator-as-a-library

CLIツールとして導入する

CLIツールとして導入する際は、こちらの方法をとる必要があります。

  1. dettectinatorのリポジトリをクローンする
git clone https://github.com/siriussecurity/dettectinator.git
  1. dettectinatorディレクトリへ移動する
cd dettectinator
  1. Python仮想環境を用意する
python -m venv .venv
  1. 仮想環境(.venv)をアクティベートする
source .venv/bin/activate.fish  # fishの場合
  1. 動作に必要なライブラリをpipで導入する
# .venv環境
pip install -r requirements.txt
  1. dettectinatorディレクトリに移動する
cd dettectinator
  1. attack-stix-dataをクローンして入手しておく
git clone https://github.com/mitre-attack/attack-stix-data

dettectinatorを動作させるときに、attack-stix-data(MITRE ATT&CKのデータをstix形式で公開しているもの)へのアクセスが必要になります。外部の公開サイトへ通信してアクセスする方式の場合、接続リミットに引っかかりエラーが発生することがあるので、あらかじめローカルに導入しておくと便利です。

dettectinator実行時に、ローカルのパスを指定することができます。

カレントディレクトリを dettectinator/dettectinator ディレクトリに移してCLIを実行することになります。

CLI使用方法

CLIを使用する際には、以下2点を確認してください。

  • dettectinator/dettectinator ディレクトリに居ること
  • Python仮想環境に居ること
# .venv環境
python dettectinator.py
Please specify a valid data import plugin using the "-p" argument:
 - DatasourceCsv
 - DatasourceDefenderEndpoints
 - DatasourceExcel
 - DatasourceWindowsSecurityAuditing
 - DatasourceWindowsSysmon
 - GroupExcel
 - GroupPdf
 - GroupWeb
 - TechniqueCsv
 - TechniqueDefenderAlerts
 - TechniqueDefenderIdentityRules
 - TechniqueElasticSecurityRules
 - TechniqueExcel
 - TechniqueSentinelAlertRules
 - TechniqueSigmaRules
 - TechniqueSplunkConfigSearches
 - TechniqueSuricataRules
 - TechniqueSuricataRulesSummarized
 - TechniqueTaniumSignals
 - TechniqueWazuhCsv

-p オプションを指定して、プラグインを指定する必要があります。

ここでは、 DatasourceDefenderEndpoints プラグインを指定し、Microsoft Defender for Endpoints用のデータソース管理ファイルを用意します。

# .venv環境
python dettectinator.py -p DatasourceDefenderEndpoints -a default -s ./attack-stix-data -o data_sources_mde.yaml

data_sources_mde.yamlという名前でデータソース管理ファイルが作成されます。

-a には default を指定して下さい。(データソース網羅率によるスコア算定のために何かしらの値の指定が必要です。指定なしの場合はスコア値が0になり、Navigator表示時に色が付きません)

-s には attack-stix-data のパスを指定します。

-o には 出力先のファイル名を指定します。

dettectinatorが出力した、データソース管理ファイル(data_sources_mde.yaml)を、Navigator用のレイヤーファイルへ変換します。
データソース管理ファイルの変換は、DeTT&CTの機能を使って行います。

変換方法は、DeTT&CT内の dettect.py の使い方を調べて実施してください。

ここでは、参考としてDeTT&CT環境における実行例を記載するにとどめます。

python dettect.py ds -fd data_soruce_mde.yml -l --local-stix-path input/attack-stix-data

outputディレクトリに data_sources_mde.json のような名前でJSONファイルが作成されるため、そのJSONファイルをNavigatorにてインポートすることで、データソース網羅率が可視化できます。

データソースについての解説

MITRE ATT&CKでは、攻撃者の行動(テクニック)を検知・分析するために必要な観測対象をデータソースと呼びます。
どんなログや情報を見れば、この攻撃を検知できるかという視点について名称をつけた物です。

データソースは、MITRE ATT&CKにて具体的に定義されています。(DeTT&CTは一部独自のデータソースを定義して採用しています)
https://attack.mitre.org/datasources/

データソースは、プロセス、ネットワークトラフィックと言った観測対象の大分類で表現され、データソースはデータコンポーネントという細分化されたイベント、具体的な観測内容で構成されます。データコンポーネントには、プロセス生成(イベント)、プロセス終了(イベント)、ネットワーク接続の確立、通信フローのような名前がつけられています。

MITRE ATT&CKのテクニックには、検知・分析に必要なデータソースが結びつけられています。つまり、あるテクニックに対して必要なデータソースを入手できない環境では、そのテクニックをそもそも検知・分析することができないことを意味します。

DeTT&CTのデータソース管理ファイルは、データソースの情報を管理するファイルとなります。

データソース管理ファイルに記録される情報

  • DeTT&CTにエントリを登録した日付
  • 個々のデータソース情報
    • データソースをセキュリティデータレイクにいつ接続したか
    • データがどの製品に保存されているか
    • データソースが適用されるシステムの種類
    • データソースをデータ分析に使用できるかを示すフラグ
    • コメント
    • データ品質
    • その他キーバーリュー型の任意の情報

テクニックには、どのデータソースで検知・分析できるかが紐付いています。

そのため、利用可能なデータソース情報の一覧をATT&CKのマトリクス上のテクニックにマッピングすればテクニックが検知・分析できるかを表すことができます。

データソースはDeTT&CTを使い、データソース一覧(管理ファイル)に手動で登録することが可能です。

そのためには、MITRE ATT&CKのデータソース定義を参照し、データソース/データコンポーネントに対して情報を入力していく必要があります。


MITRE ATT&CKのデータソース(Process)

Processデータソースを見てもわかるように、データソースに対して複数のデータコンポーネントが存在します。

  • OS API Execution
  • Process Access
  • Process Creation
  • Process Metadata
  • Process Modification
  • Process Termination

また、それぞれのデータコンポーネントごとに、データを収集する方法について記述されています。


Process Creation

このようにプロセス生成のデータを取得するにしても複数の方式があります。
どの方式でデータを取得しているのかを検討して初めて、このデータソース(データコンポーネント)に対応できているのかを決めることができます。

dettectinatorのDatasourceDefenderEndpointsプラグインを使用すると、Microsoft Defender for Endpointに関するデータソースをまとめたデータソース管理ファイルを自動で作成してくれます。

あくまでも汎用的な情報をもとに生成したデータソース情報であるため、内容について手動で精査し調整する必要はありますが、1から自身で作ることに比べれば遙かに効率的であると言えます。

dettectinatorプラグイン解説

DatasourceDefenderEndpoints(データソースプラグイン)

DatasourceDefenderEndpointsプラグインについて解説します。

Defender for Endpoints: tables available in Advanced Hunting (based on OSSEM)

OSSEMの情報を基にしたデータを使い、Microsoft Defender for EndpointのAdvanced Hunting機能で利用可能なテーブルをデータソースに対応させています。

https://github.com/siriussecurity/dettectinator/blob/9847aff89ab992574f459d2c212baffaf1beba3d/dettectinator/plugins/datasources_import.py#L179

OSSEMの成果物であるCSV情報を取得し、Microsoft Defender for Endpoint用にフィルタリングした結果を、DeTT&CTのデータソースとして採用しています。

フィルタリング条件:

  • ログソース: Microsoft Defender for Endpoint
  • フィールド: 'Data Source', 'Component', 'EventID', 'Event Name', 'Filter in Log', 'Audit Category'
  • ActionType: アクションタイプに値がある場合、productsに展開する(Event Nameが共通であるが、細分化したい場合)

Event Name単体では同じイベントカテゴリ内の複数の挙動を区別できないため、ActionTypeの項目を細分化してproductsに格納します。

ActionTypeは、Microsoft Defenderのテーブルにおける行動タイプのことであり、検知ロジックや可視化で利用する際の粒度となります。

ActionTypeから、次のようなproductsが生成されます。

  • ProcessCreated
  • ProcessTerminated
  • ProcessInjected

用意したデータソース情報を、DeTT&CTのデータソース管理ファイルとして出力します。

DatasourceCsv(データソースプラグイン)

DatasourceCsvプラグインの仕組みについて解説します。

CSVの0番目のカラムをデータソースとし、1番目のカラムをプロダクトとして抽出し、DeTT&CTのデータソース管理ファイルとして生成します。

次のデータコンポーネントをcsvファイルとして用意します。

  • Command Execution(DS0017)
  • Process Creation(DS0009)

datasources.csv:

Command Execution,MDE
Process Creation,MDE
(.venv) $ python dettectinator.py -p DatasourceCsv -s ./attack-stix-data -a default -d enterprise -o output/mde_datasources.yaml --file input/datasources.csv

DeTT&CTを使ってこのデータソースを可視化し、Navigatorで読み込むと次の内容が表示されます。

TechniqueDefenderAlerts(検出プラグイン)

TechniqueDefenderAlertsプラグインの仕組みについて解説します。

Microsoft Defender For EndpointのAdvanced Hunting APIを使用し、アラート情報からATT&CKのテクニックIDを抽出したものを、DeTT&CTのテクニック管理ファイルとして生成します。

Advanced Hunting APIでは、以下のKQLクエリを発行して、テクニックIDとタイトルを抽出します。

https://github.com/siriussecurity/dettectinator/blob/9847aff89ab992574f459d2c212baffaf1beba3d/dettectinator/plugins/technique_import.py#L414-L419

スコア値のデフォルトは1が設定されます。

https://github.com/siriussecurity/dettectinator/blob/9847aff89ab992574f459d2c212baffaf1beba3d/dettectinator/dettectinator.py#L442-L460

TechniqueCsv(検出プラグイン)

TechniqueCsvプラグインの仕組みについて解説します。

CSVの0番目のカラムをテクニックID(例: T1059.006)とし、1番目のカラムをuse_caseとして抽出し、DeTT&CTのテクニック管理ファイルとして生成します。

https://github.com/siriussecurity/dettectinator/blob/9847aff89ab992574f459d2c212baffaf1beba3d/dettectinator/plugins/technique_import.py#L130-L145

スコア値のデフォルトは、TechniqueDefenderAlertsプラグインと同様の機構が使用されるため、1が設定されます。

https://github.com/siriussecurity/dettectinator/blob/9847aff89ab992574f459d2c212baffaf1beba3d/dettectinator/dettectinator.py#L442-L460

sample.csv:

T1059.006,dettect_rule_name1
python dettectinator.py -p TechniqueCsv -s attack-stix-data --file input/sample.csv -a default -d enterprise -o output/sample_techniques.yaml

sample_techniques.yaml:

file_type: technique-administration
name: new
domain: enterprise-attack
platform:
  - all
techniques:
  - technique_id: T1059.006
    technique_name: Python
    detection:
      - applicable_to:
          - default
        location:
          - dettect_rule_name1
        comment: ''
        score_logbook:
          - date: 2025-09-03T00:00:00.000Z
            score: 1
            comment: 'Auto added by Dettectinator. TODO: Check score. Technique with detection rule added: dettect_rule_name1'
    visibility:
      - applicable_to:
          - all
        comment: ''
        score_logbook:
          - date: null
            score: 0
            comment: ''
            auto_generated: true

dettectinatorは、新規のテクニック管理ファイルを作成する以外にも、既存のテクニック管理ファイルを基にしてテクニック管理ファイルを更新することもできます。

T1059.006のVisiblityを1に設定したoriginal_techniques.yamlファイルを用意します。

original_techniques.yaml:

file_type: technique-administration
name: new
domain: enterprise-attack
platform:
  - all
techniques:
  - technique_id: T1059.006
    technique_name: Python
    detection:
      - applicable_to:
          - default
        location:
          - dettect_rule_name1
        comment: ''
        score_logbook:
          - date: 2025-09-03T00:00:00.000Z
            score: 1
            comment: 'Auto added by Dettectinator. TODO: Check score. Technique with detection rule added: dettect_rule_name1'
    visibility:
      - applicable_to:
          - all
        comment: ''
        score_logbook:
          - date: null
            score: 1
            comment: ''
            auto_generated: true

T1059のテクニックのみを記述したupdate.csvを用意します。

update.csv:

T1059,dettect_rule_name2
python dettectinator.py -p TechniqueCsv -s attack-stix-data --file input/update.csv -a default -d enterprise -i input/original_techniques.yaml -o output/update_techniques.yaml

update_techniques.yamlでは、既存のT1059.006についてはそのまま(Visibilityスコアが1のまま)で、T1059が追加されています。

T1059のdetectionスコアは1、visibilityスコアは0です。

update_techniques.yaml:

version: 1.2
file_type: technique-administration
name: new
domain: enterprise-attack
platform:
  - all
techniques:
  - technique_id: T1059.006
    technique_name: Python
    detection:
      - applicable_to:
          - default
        location:
          - dettect_rule_name1
        comment: ''
        score_logbook:
          - date: 2025-09-03T00:00:00.000Z
            score: 1
            comment: 'Auto added by Dettectinator. TODO: Check score. Technique with detection rule added: dettect_rule_name1'
    visibility:
      - applicable_to:
          - all
        comment: ''
        score_logbook:
          - date: null
            score: 1
            comment: ''
            auto_generated: true
  - technique_id: T1059
    technique_name: Command and Scripting Interpreter
    detection:
      - applicable_to:
          - default
        location:
          - detect_rule_name2
        comment: ''
        score_logbook:
          - date: 2025-09-03T00:00:00.000Z
            score: 1
            comment: 'Auto added by Dettectinator. TODO: Check score. Technique with detection rule added: detect_rule_name2'
    visibility:
      - applicable_to:
          - all
        comment: ''
        score_logbook:
          - date: null
            score: 0
            comment: ''
            auto_generated: true

関連記事

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

Discussion