MITRE ATT&CK Navigatorレイヤーファイル入門
MITRE ATT&CK を可視化・共有するための便利ツール「ATT&CK Navigator」。その中心的な機能のひとつが「レイヤーファイル」です。
この記事では、Navigatorのレイヤーファイルについて説明します。
MITRE ATT&CK Navigator とは?
MITRE ATT&CK Navigator は、戦術(Tactic)と技術(Technique)をマトリクス形式で可視化できる Web ツールです。
- Web 版: https://mitre-attack.github.io/attack-navigator/
- 自分でサーバホストも可能。
過去記事(MITRE ATT&CK Navigatorをコンテナで用意する)
Navigator 上では、色やスコア、説明などを使って技法を強調表示できます。これを保存・共有するための形式が「レイヤーファイル(.json
)」です。
レイヤーファイルのフォーマット仕様は以下のサイトで公開されています。
https://github.com/mitre-attack/attack-navigator/blob/master/layers/spec/v4.5/layerformat.md
レイヤーファイルのフォーマット仕様にはバージョンがあります。
現時点2025年8月においての最新バージョンは、4.5となります。
レイヤーファイルの基本構造
レイヤーファイルは JSON 形式で、プロパティに適切な値を入れて作成します。
プロパティには数値や文字列以外にもリストやオブジェクト(他言語で言うところの辞書)も格納することができます。プロパティ・値・意味づけについて定義しているのが、レイヤーファイルのフォーマット仕様となります。
プロパティ
レイヤーファイルのプロパティについて説明します。
完全な仕様については、次のURLを参照してください。
主なプロパティは以下の通りです。
プロパティ名 | 値のタイプ | 意味 |
---|---|---|
versions | Versionオブジェクト | バージョン情報を表すオブジェクト |
name | String | レイヤーの名前 |
description | String | レイヤーの内容や意図 |
domain | String | enterprise-attack, mobile-attack, ics-attack。このレイヤーが表現するテクノロジードメイン |
filters | Filterオブジェクト | 対象を指定し表示を絞り込むためのフィルタ |
sorting | Number | 各戦術カテゴリ内のテクニックの順番を指定する。 0: テクニック名のアルファベット順で昇順 1: テクニック名のアルファベット順で降順 2: テクニックスコアの昇順 3: テクニックスコアの降順 |
layout | Layoutオブジェクト | レイアウトを指定する |
hideDisabled | Boolean | 無効状態として設定されたテクニックをグレーアウトして表示するか、隠すか |
techniques | Techniqueオブジェクトのリスト | テクニックを表すオブジェクトをリストで指定する |
gradient | Gradientオブジェクト | スコア値に基づいて色を段階的に変化させたい場合の色定義および段階情報 |
legendItems | LegendItemオブジェクトのリスト | 凡例用の色と説明ラベル |
SelectTechniquesAcrossTactics | boolean | テクニックを選択した際、同じテクニック ID を持つすべてのインスタンスも選択した状態にするか |
SelectSubtechniquesWIthParent | boolean | テクニックを選択した際、すべてのサブテクニックも選択するか |
selectVisibleTechniques | boolean | テクニックを選択した際、隠されたテクニックも選択するか |
JSONにて、各プロパティと値を設定していくことでレイヤーファイルを作成することができます。値には、文字列や数値、特定のオブジェクト(他言語で言う辞書に相当)を指定します。
オブジェクトにもプロパティ(他言語で言うとキーに相当)に関する仕様が決まっているので、各オブジェクトについての仕様を説明します。
オブジェクト
Filterオブジェクト
対象を指定し表示を絞り込むためのフィルタ用オブジェクトです。
プロパティ名 | 値のタイプ | 意味 |
---|---|---|
platforms | 文字列のリスト | 指定しない場合は全プラットフォーム。レイヤーのプロパティで指定したドメインによって、指定可能な値が決まっている。 |
enterprise-attackの場合、"Windows"、"Linux"、"macOS"、"Office 365" などを指定することができます。
"Windows"を指定すると、MITRE ATT&CK のテクニックのうち、対象がWindowsとなっているものだけがNavigatorのレイヤーに表示されます。
Versionオブジェクト
このレイヤーファイルが、以下のそれぞれに対するどのバージョンに対応したものなのかを表現します。
- MITRE ATT&CK フレームワーク
- MITRE ATT&CK Navigatorのバージョン
- レイヤーファイルのバージョン
プロパティ名 | 値のタイプ | 説明 |
---|---|---|
attack | String | このレイヤーの MITRE ATT&CK バージョン |
navigator | String | Navigator のバージョン。少なくとも 4.9.0 が必要 |
layer | String | レイヤーファイル仕様のバージョン。4.5仕様の話をしているので、4.5を指定すること |
MITRE ATT&CK フレームワークのバージョンは、MITRE ATT&CKのサイトで確認できます。
MITRE ATT&CK フレームワークのバージョン
MITRE ATT&CK Navigator のバージョンは、MITRE ATT&CK Navigator の画面で確認できます。GitHubで公開されているWeb版のNavigatorは、以下のURLでアクセスできます。自身で用意する MITRE ATT&CK Navigatorで表示させる場合は、それぞれの環境の Navigator 画面でバージョンを確認してください。
画面上、左下にバージョン情報が記載されています。以下の例では、v5.1.1が Navigator のバージョンとなります。
MITRE ATT&CK Navigator のバージョン
レイヤーファイルのバージョンは、レイヤーファイルの仕様のバージョンとなります。
この記事では、現時点の最新バージョンである 4.5 の仕様を参照しているため、4.5を指定します。
https://github.com/mitre-attack/attack-navigator/blob/master/layers/spec/v4.5/layerformat.md
Techniqueオブジェクト
テクニックあるいはサブテクニックを表現するオブジェクトです。テクニックに対するスコア値や、色、紐付いている戦術、テクニックに付けるコメントなどを指定できます。
プロパティ名 | 値のタイプ | 説明 |
---|---|---|
techniqueID | String | MITRE ATT&CK のテクニックID、あるいはサブテクニックID |
tactic | String | MITRE ATT&CK の戦術名。例) lateral-movement |
comment | String | テクニックに対するコメント。自由に書ける |
enabled | Boolean | このテクニックがこのレイヤーにおいて有効か、無効か。hideDisabledが有効の場合に影響する |
score | Number | このテクニックに割り当てる任意のスコア。省略するとunscored扱いになる。gradientに影響する |
color | String | このテクニックの背景に指定した色を付ける。gradientによる色づけよりも優先される |
Gradientオブジェクト
テクニックのスコア値に基づいて色を段階的に変える際に使われる、色とスコアの範囲を指定したオブジェクト。
スコアの範囲は、minValue、maxValue、指定した色の数によって計算して求められる。
プロパティ名 | 値のタイプ | 説明 |
---|---|---|
colors | 文字列のリスト | 16進数のRGBカラー色で指定する。色は少なくとも2色以上指定する必要がある |
minValue | Number | スコアがこの値の時の色が、この値よりも低いスコアの場合にも使われる。下限の色 |
maxValue | Number | スコアがこの値の時の色が、この値よりも高いスコアの場合にも使われる。上限の色 |
スコアは minValue から maxValue の間で正規化され、その値に応じて colors の間を補間して色が決まります。
たとえば、スコアが minValue と maxValue の中間値なら、中央の色(またはその中間色)になります。
スコアがminValue, maxValueの範囲外(たとえば -100 や 200)の場合は、次のように扱われます:
minValue 未満 → 最初の色
maxValue より大 → 最後の色
この minValue / maxValue は「スコアの取り得る範囲」ではなく、「色の割り当て範囲(クリップ値)」として使われる点に注意してください。
クリップとは、簡単に言うとある値が「はみ出した」ときに、無理やり端っこに「とどめておく」ことを「クリップ(clipping)」といいます。
たとえば:
「0〜100の範囲で扱いたい」と決めたのに、
入ってきた値が 120 や -10 だったら、
そのまま使うとおかしくなるので…
120 は 100 に変える、-10 は 0 に変える
これが「クリップ(clip)」です。はみ出しを防ぐ処理です。
Layoutオブジェクト
Navigator画面のレイアウトを指定するオブジェクトです。
MITRE ATT&CK の ATT&CK ID(テクニックIDや戦術IDなど)や紐付いた名前を画面上に表示するかを制御したりすることができます。
プロパティ名 | 値のタイプ | 説明 |
---|---|---|
layout | String | 表のレイアウトを選べる。 "side", "flat", "mini" |
showID | Boolean | テクニックや戦術などのIDを表示するか |
showName | Boolean | テクニックや戦術などの名前を表示するか |
showAggregateScores | Boolean | 計算で集約したスコアを表示するか |
countUnscored | Boolean | スコアが割あたってないテクニックを集約スコアに含めて計算するか |
aggregateFunction | String | 集約スコアの計算に使う関数。 "average", "min", "max", "sum" |
expandedSubtechniques | String | サブテクニックの表示方法。 "none", "all", "annotated" |
レイヤーファイルの例
例として、MITRE ATT&CK テクニックID(T1134) に関して作成したレイヤーファイルを記載します。
{
"name": "example",
"domain": "enterprise-attack",
"description": "THis is a demonstration layer",
"versions": {
"layer": "4.5",
"attack": "17.1",
"navigator": "5.1.1"
},
"filters": {
"platforms": [
"Windows"
]
},
"layout": {
"layout": "side",
"showID": true,
"showName": true,
"showAggregateScores": true,
"countUnscored": true,
"aggregateFunction": "sum",
"expandSubtechniques": "annotated"
},
"hideDisabled": true,
"techniques": [
{
"techniqueID": "T1134",
"tactic": "defense-evasion",
"comment": "Demo",
"score": 1,
"color": "#AABBCC",
"name": "Access Token Manipulation"
},
{
"techniqueID": "T1134",
"tactic": "privilege-escalation",
"score": -80,
"name": "Access Token Manipulation"
}
],
"gradient": {
"colors": [
"#DAF7A6",
"#FFC300",
"#FF5733",
"#C70039",
"#900C3F",
"#581845"
],
"minValue": -100,
"maxValue": 100
},
"legendItems": [
{
"label": "a",
"color": "#DAF7A6"
},
{
"label": "B",
"color": "581845"
}
],
"metadata": [
{
"name": "example metadata",
"value": "This is an example"
}
]
}
T1134.json を Navigatorに読み込んだ結果
関連記事
MITRE ATT&CK関連記事一覧
Discussion