MITRE ATT&CK Navigatorをコンテナで用意する
コンテナ環境にMITRE ATT&CK Navigatorを用意する手順について記載します。
将来的に社内SOC、可視化支援、レポート作成用途での導入を踏まえた、検証目的での環境を想定しています。
MITRE ATT&CK Navigatorをローカルで用意する必要性については、attack-navigator公式リポジトリの以下の内容を基にしています。
https://github.com/mitre-attack/attack-navigator?tab=readme-ov-file#usage
重要事項: GitHub PagesでホストされているNavigatorインスタンスにアクセスした際にアップロードされたレイヤーファイルは、Navigatorがクライアントサイドのみのアプリケーションであるため、サーバーサイドには保存されません。ただし、レイヤーファイルに機密コンテンツが含まれている場合は、ATT&CK Navigatorの独自のインスタンスをインストールして実行することをお勧めします。
見える化を踏まえ、レイヤーファイルを更新した後、ブラウザの更新を行うことで画面を更新することができるようにしています。
attack-navigator用のレイヤーファイル(JSON)をHTTPで公開し、ブラウザで開くURLにそのレイヤーファイルを指定することで、レイヤーファイルの選択画面に戻ることなく直接レイヤーを反映させた状態で開くことができるようにしています。
JSONファイルをプログラムにて自動的に更新しつづけることで、常に最新の状態をMITRE ATT&CK Navigator上で確認することができます。
前提条件
- macOS (Linux/Windowsも対応化)
- Dockerコンテナ環境
- Git
導入の流れ
- GitHubの公式リポジトリからattack-navigatorのリポジトリをクローンします。
- docker-compose.ymlを用意します。
- attack-navigatorのコンテナを起動します。
- ブラウザでコンテナのattack-navigatorに接続します。
- コンテナを終了します。
導入方法
- attack-navigatorリポジトリをクローンします。
$ git clone https://github.com/mitre-attack/attack-navigator.git
attack-navigator ディレクトリが用意されます。
- attack-navigator ディレクトリに移動します。
$ cd attack-navigator
$ ls
CHANGELOG.md CONTRIBUTING.md* Dockerfile layers/ LICENSE.txt* nav-app/ NOTICE.txt* README.md* USAGE.md
- docker-compose.yml を用意します。
docker-compose.yml
services:
navigator: # サービス名
build:
# Dockerfile がどのディレクトリのファイルを使ってイメージを作るかを決める設定
# Dockerfile内のCOPYなどに影響します
context: .
# Dockerfileの内容を基にコンテナイメージを用意します
dockerfile: Dockerfile
ports:
# localhostの4200番ポートで待ち受け、接続をコンテナの4200番ポートにつなげます
- 127.0.0.1:4200:4200
# コンテナ名
container_name: attack-navigator
volumes:
# ローカルのlayersディレクトリをコンテナ内のディレクトリと共有します。
# 直接レイヤーを反映させた状態で開くための設定です。
- ./layers:/src/nav-app/src/assets/layers
- コンテナを起動します。
p
$ docker compose up -d
(中略)
✔ Container attack-navigator Started
- ブラウザを開き次のURLを開きます。
http://localhost:4200
- コンテナを終了します。
$ docker compose down
レイヤーファイルを直接指定して呼び出す
見える化を踏まえ、レイヤーファイルを更新した後、ブラウザの更新を行うことで画面を更新することができるようにしています。
docker-compose.yml 内でlayersディレクトリをコンテナ内の/src/nav-app/src/assets/layersに結びつけている部分がポイントとなります。
volumes:
- ./layers:/src/nav-app/src/assets/layers
assetsディレクトリにはWebアプリ内で使用する、画像、スタイル、アイコン、サンプルレイヤーJSONなどの静的コンテンツを格納します。
assetsディレクトリに配置した物は、 http://localhost:4200/assets/layers/output.json
のようにアクセスすることができます。
ローカルのlayersディレクトリと、コンテナ内の/src/nav-app/assets/layersディレクトリはコンテナのボリューム機能により同期しているため、ローカルのlayersディレクトリ内のoutput.jsonを変更することで http://localhost:4200/assets/layers/output.json
も変化します。
MITRE ATT&CK NavigatorにはURLで直接読み込むレイヤーファイルを指定して読み込むために、HTTPで公開されたレイヤーファイルをURLで指定する方法があります。
http://localhost:4200/#layerURL=http://localhost:4200/assets/layers/output.json
このURLを直接ブックマークなどに登録して呼び出すことで、そのレイヤーを反映した画面を直接呼び出すことができるようになります。
ローカルの layers/output.json
をプログラムなどで直接書き換えることでブラウザの画面を更新するだけで新しいレイヤーの内容を表示することができます。
この方式は見える化の実現に便利です。
参考サイト
GitHub attack-navigatorリポジトリ
関連記事
MITRE ATT&CK関連記事一覧
Discussion