🌊

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に接続します。
  • コンテナを終了します。

導入方法

  1. attack-navigatorリポジトリをクローンします。
$ git clone https://github.com/mitre-attack/attack-navigator.git

attack-navigator ディレクトリが用意されます。

  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番ポートで待ち受け、接続をコンテナの4200番ポートにつなげます
      - 127.0.0.1:4200:4200

    # コンテナ名
    container_name: attack-navigator

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

http://localhost:4200

Navigator

  1. コンテナを終了します。
$ 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 をプログラムなどで直接書き換えることでブラウザの画面を更新するだけで新しいレイヤーの内容を表示することができます。

この方式は見える化の実現に便利です。

direct_open_url.png

参考サイト

GitHub attack-navigatorリポジトリ

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

関連記事

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

Discussion