
データ品質を評価するツールで、素晴らしいOSSEMを基盤としています。

データ品質を評価するツールです。素晴らしい OSSEM プロジェクトをベースに構築されています。
Power-up は、データ品質評価の基盤として OSSEM Detection Data Model (DDM) を使用します。その主な理由は、ATT&CK Data Sources、Common Information Model のエンティティ (CIM)、および Data Dictionaries (イベント) を相互に構造化して関連付ける方法を提供するためです。
DDM の構造に詳しくない方のために、以下にサンプルを示します。
ご覧のとおり、DDM の各エントリは、process、user、file などの抽象エンティティを使用してサブデータソース(スコープ)を定義しています。これらの各エントリには、スコープが適用されるイベント ID も含まれています。これらのエンティティの詳細については、こちらを参照してください。
要約すると、DDM エントリは、ログソース(データチャネル)をどのように消費するかを定義するスコープを提供することで、生のイベントの複雑さを取り除く上で主要な役割を果たします。
Power-up は、5 つの異なる次元に従ってデータ品質スコアを評価します。
各次元は 0(なし)から 5(優れている)の間で評価されます。
これらの次元はデータチャネルに紐づいており、そのチャネルが提供するすべてのイベントに波及します。
これらの次元の性質上、データチャネルの特性に応じて手動で評価する必要があります。
Power-up は resources/dcs.yml を使用してデータチャネルを定義し、各次元を評価します。
data channel: sysmon
description: sysmon monitoring
coverage: 2
timeliness: 5
retention: 2
---
data channel: security
description: windows security auditing
coverage: 5
timeliness: 5
retention: 2
イベント構造の完全性を計算するために、power-up はデータ辞書の標準名と、DDM エントリ(ソースとデスティネーション)で参照されるエンティティ (CIM) のフィールドを比較します。
すべてのエンティティフィールドが関連するわけではない(コンテキストに依存する)ため、power-up はプロファイルの概念を使用して、データ辞書の標準名と一致させる必要があるフィールドを選択します。例:
# OSSEM CIM Profile
process:
- process_name
- process_path
- process_command_line
注:
profiles/default.ymlにサンプルプロファイルがありますので、自由に試してください。
構造スコアは以下の式で計算されます。
SCORE_PERCENT = (MATCHED_FIELDS / TOTAL_RELEVANT_FIELDS) * 100
わかりやすくするために、構造スコアの計算例を示します。

注: Sysmon Event Id 1 のデータ辞書が関連エンティティフィールドと 100% 一致するため、構造スコアは 5(優れている)と評価されます。
構造スコアは以下のように 0~5 の尺度に変換されます。
| Percentage | Score |
|---|
注: 使用例(SIEM、脅威ハンティング、フォレンジック)に応じて異なるプロファイルを定義し、ログを異なる方法で評価できます。
一貫性を計算するために、power-up はデータ辞書内で標準名を持つフィールドの割合を単純に計算します。標準名にマッピングされたフィールドの数が多いデータ辞書は、CIM エンティティとの相関が高くなります。
一貫性スコアは以下の式で計算されます。
SCORE_PERCENT = (STANDARD_NAME_FIELDS / TOTAL_FIELDS) * 100
一貫性スコアは以下のように 0~5 の尺度に変換されます。
| Percentage | Score |
|---|---|
| 0 | 0 |
| 1 ~ 50 | 1 |
| 51 ~ 99 | 3 |
| 100 | 5 |
pip install -r requirements.txt を実行してください。$> python3 powerup.py --help
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
usage: powerup.py [-h] [-o OSSEM] [-y OSSEM_YAML] [-p PROFILE] [--excel]
[--elastic] [--yaml]
素晴らしい OSSEM をベースに構築された、ATT&CK データソースのカバレッジを評価するツールです。
optional arguments:
-h, --help このヘルプメッセージを表示して終了
-o OSSEM, --ossem OSSEM
OSSEM マークダウンをインポートするパス
-y OSSEM_YAML, --ossem-yaml OSSEM_YAML
OSSEM yaml をインポートするパス
-p PROFILE, --profile PROFILE
CIM プロファイルのパス
--excel OSSEM DDM を Excel にエクスポート
--elastic OSSEM データモデルを Elastic にエクスポート
--yaml OSSEM データモデルを YAML にエクスポート
--layer OSSEM データモデルを Navigator Layer にエクスポート
ご覧のとおり、power-up は 2 つの異なる形式で OSSEM データを読み込むことができます。
現在、Power-up は OSSEM 出力を以下にエクスポートします。
output/ フォルダに OSSEM 構造を YAML で作成output/ フォルダに作成注: プロファイルファイルのパスが指定されていない場合、power-up はデフォルトで
profiles/default.ymlを使用します。
$> python3 powerup.py -o ../OSSEM --yaml
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] プロファイルパス: profiles/default.yml
[*] マークダウンから OSSEM を解析中
[*] OSSEM を YAML にエクスポート中
[*] Created output/ddm_20191114_160246.yml
[*] Created output/cim_20191114_160246.yml
[*] Created output/dds_20191114_160246.yml
YAML へのエクスポート/インポートの目的は、OSSEM のカスタマイズを容易にすることです。おそらく最初に行うことは、独自のデータ辞書を作成し、新しい DDM エントリを追加することです。そのため、YAML を使用すると更新が容易になります。
注 1:
resources/config.ymlを変更して、正しい構造のファイル名を power-up に指示します。その後、それらをフォルダに配置し、OSSEM_YAML 引数に渡すだけです。
注 2: power-up は OSSEM オブジェクト全体を YAML に解析するわけではなく、データフィールドといくつかのメタデータ(例:説明)のみです。その理由は、データ品質を評価するために必要なデータのみを含む、可能な限り軽量な YAML オブジェクトを維持したいからです。
$> python3 powerup.py -o ../OSSEM --excel
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] プロファイルパス: profiles/default.yml
[*] マークダウンから OSSEM を解析中
[*] OSSEM DDM を Excel にエクスポート中
[*] Saved Excel to output/ddm_enriched_20191114_160041.xlsx
Excel にエクスポートするとき、power-up は各エントリにデータ品質の次元を付与した、見栄えの良い DDM を作成します。

$> python3 powerup.py -o ../OSSEM --elastic
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] プロファイルパス: profiles/default.yml
[*] マークダウンから OSSEM を解析中
[*] OSSEM を Elastic にエクスポート中
[*] Creating elastic index ossem.ddm
[*] Creating elastic index ossem.cim
[*] Creating elastic index ossem.dds
[*] Creating elastic index ossem.dcs
Elastic にエクスポートするとき、power-up はすべての OSSEM データを Elastic に保存します。DDM にはそれぞれのデータ品質の次元も付与されているため、以下のようなダッシュボードを作成できます。

$> python3 powerup.py -o ../OSSEM --layer
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] プロファイルパス: profiles/default.yml
[*] マークダウンから OSSEM を解析中
[*] OSSEM を Navigator Layer にエクスポート中
[*] ATT&CK データをプル中
[*] データソース品質レイヤーを生成中
[*] Created output/ds_layer_20191119_220141.json
レイヤーにエクスポートするとき、power-up は各テクニックにデータ品質の次元を付与した ATT&CK Navigator Layer の JSON ファイルを作成します。

注: テクニックスコアは、DDM 内のデータソースの平均スコアから導出されます。
| ATT&CK Data Source | Sub Data Source | Source Data Object | Relationship | Destination Data Object | EventID |
|---|
| Process monitoring | process creation | process | created | process | 4688 |
| Process monitoring | process creation | process | created | process | 1 |
| Process monitoring | process termination | process | terminated | - | 4689 |
| Process monitoring | process termination | process | terminated | - | 5 |
| Dimension | Type | Description |
|---|
| Coverage(カバレッジ) | Data channel | データチャネルによってカバーされるデバイスまたはネットワークセグメントの数 |
| Timeliness(適時性) | Data channel | イベントが利用可能になるまでの時間 |
| Retention(保持期間) | Data channel | イベントが利用可能であり続ける期間 |
| Structure(構造) | Event | イベントの完全性、関連するフィールドが利用可能かどうか |
| Consistency(一貫性) | Event | イベントフィールドの標準化度合い、フィールドが正規化されているかどうか |
| 0 | 0 |
| 1 ~ 25 | 1 |
| 26 ~ 50 | 2 |
| 51 ~ 75 | 3 |
| 76 ~ 99 | 4 |
| 100 | 5 |