🌊

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の独自のインスタンスをインストールして実行することをお勧めします。

[2026-01-30] Navigator v5.3.0に対応しました。

前提条件

  • macOS
  • Dockerコンテナ環境
  • Git

導入の流れ

  • GitHubの公式リポジトリからattack-navigatorのリポジトリをクローンします。
  • docker-compose.ymlを用意します。
  • attack-navigatorのコンテナを起動します。
  • ブラウザでコンテナのattack-navigatorに接続します。
  • コンテナを終了します。

導入方法

  1. attack-navigatorリポジトリをクローンします。
$ git clone https://github.com/mitre-attack/attack-navigator.git
  1. attack-navigator ディレクトリに移動します。
$ cd attack-navigator
$ ls
CHANGELOG.md  CONTRIBUTING.md*  Dockerfile  layers/  LICENSE.txt*  nav-app/  NOTICE.txt*  README.md*  USAGE.md
  1. docker-compose.yml を作成します。

docker-compose.yml

services:
  navigator:  # サービス名
    build:
      # Dockerfile がどのディレクトリのファイルを使ってイメージを作るかを決める設定
      # Dockerfile内のCOPYなどに影響します
      context: .

      # Dockerfileの内容を基にコンテナイメージを用意します
      dockerfile: Dockerfile
    ports:
      # localhostの4200番ポートで待ち受け、接続をコンテナの80番ポートにつなげます
      - 127.0.0.1:4200:80

    # コンテナ名
    container_name: attack-navigator

    volumes:
      # ローカルのlayersディレクトリをコンテナ内のディレクトリと共有します。
      # 直接レイヤーを反映させた状態で開くための設定です。
      - ./layers:/src/nav-app/src/assets/layers
  1. コンテナを起動します。
$ docker compose up -d
(中略)
 ✔ Container attack-navigator  Started
  1. ブラウザを開き次のURLを開きます。

http://localhost:4200

Navigator

  1. コンテナを終了します。
$ docker compose down

指定したレイヤーファイルを直接表示する方法について説明します。

たとえばレイヤーファイルを更新した後、
毎回Navigatorの初期画面(Create New Layerや、Open Existing Layerなど)を表示すること無く、
ブラウザの表示の更新のみにで、画面を更新することができるようになります。

レイヤーファイルは、コンテナ内の /src/nav-app/src/assets/layers ディレクトリに配置する必要があります。

assetsディレクトリは、webアプリ内で使用する、画像、スタイル、アイコン、サンプルレイヤーJSONなどの
静的コンテンツを格納するディレクトリです。

assetsディレクトリに output.json を配置すると、 'http://localhost:4200/assets/layers/output.json` というURLでアクセスすることができます。

/src/nav-app/src/assets/layers ディレクトリに、レイヤーファイルを配置するには、
コンテナのボリューム機能による同期を利用します。

ホストの layers ディレクトリと、 /src/nav-app/src/assets/layers を同期させるのは、 docker-compose.yml 内の次の箇所で実現しています。

    volumes:
      - ./layers:/src/nav-app/src/assets/layers

http://localhost:4200/assets/layers/output.json に配置したレイヤーファイルを指定して、
MITRE ATT&CK Navigatorを開くには、 layerURL パラメターターを使います。

具体的には、ブラウザで開く際に次のURLを使います。

http://localhost:4200/#layerURL=http://localhost:4200/assets/layers/output.json

このURLを直接ブックマークなどに登録して呼び出すことで、そのレイヤーを反映した画面を直接呼び出すことができるようになります。

ローカルの layers/output.json をプログラムなどで直接書き換れば、ブラウザの表示の更新を行うと新しい画面が表示されます。

direct_open_url.png

参考サイト

GitHub attack-navigatorリポジトリ

https://github.com/mitre-attack/attack-navigator

関連記事

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

Discussion