🐙

DeTT&CT実践1

に公開
2026/01/30

はじめに

本記事ではDeTT&CTについて実際に使用していく方法について説明します。
本記事は以下の流れで進みます。

  1. Dockerイメージのビルド
  2. attack-stix-dataの用意
  3. Dockerイメージからコンテナを起動する
  4. コンテナ内に入る
  5. DeTT&CTエディタを起動する

DeTT&CT環境を用意する

公式サイトのWikiでは、Dockerで導入する方法とローカルに導入する方法について記載されています。
特殊な要件がない場合は、Docker Hubに公開されている、rabobankcdcのdettectイメージをそのまま使う方法が手軽ですが、本記事ではカスタマイズ性を考慮し、Dockerfileを使ってイメージを作成し導入する方法を説明します。

Dockerイメージのビルド

  1. GitHubから、DeTTECTリポジトリをクローンします。
$ git clone https://github.com/rabobank-cdc/DeTTECT
  1. DeTTECTディレクトリへ移動します。
cd DeTTECT
  1. Dockerイメージを作成します。
$ docker build -t dettect .

dettectイメージが作成されます。

  1. イメージが作成されたことを確認します。
$ docker images

REPOSITORY                   TAG       IMAGE ID       CREATED          SIZE
dettect                      latest    3c97256ec5cf   31 minutes ago   537MB

attack-stix-dataの用意

DeTT&CTの動作には、MITRE ATT&CKのデータが必要になります。

MITRE ATT&CKのデータにオンラインでアクセスできるWebサイトに毎回通信する方式もあるのですが、通信負荷や提供側(TAXIIサーバ)のリソース制限に引っかかることがありますので、今回はローカルにattack-stix-dataを用意する方式とします。

MITRE ATT&CKのデータは、STIX 2.0 あるいは STIX 2.1のデータが公開されており、GitHubのリポジトリから入手することができます。

DeTT&CTは、 STIX 2.1 のデータを使うことを要求しますので、 STIX 2.1のデータである attack-stix-data を入手します。

attack-stix-dataのリポジトリをローカルにクローンします。

ここでは、 ~/attack-stix-data にデータを格納することにします。

$ cd ~
$ git clone https://github.com/mitre-attack/attack-stix-data

Dockerイメージからコンテナを起動する

dettectイメージを起動するために任意の場所に作業用のディレクトリを用意します。
ここでは作業用ディレクトリを ~/dettect とすることにします。

$ mkdir ~/dettect
$ cd ~/dettect

dettectコンテナとホストとのインタラクションのために、2つのディレクトリ(input/output)を用意します。

$ mkdir input
$ mkdir output

コンテナ起動用に docker-compose.yml ファイルを作成します。

$ touch docker-compose.yml

docker-compose.yml:

services:
  dettect: # サービス名
    image: dettect:latest
    ports:
      - 4201:8080
    container_name: dettect
    stdin_open: true
    volumes:
      - ./input:/opt/DeTTECT/input
      - ./output:/opt/DeTTECT/output
      - $HOME/attack-stix-data:/opt/DeTTECT/attack-stix-data:ro
    pull_policy: never
    tty: true

dettectコンテナでは、DeTT&CTエディターがWebアプリとして提供されています(ポート番号は8080)。ホスト側のブラウザから接続して使うため、 localhost の4021番ポートに接続するとコンテナの8080番ポートにつながるように以下の設定を入れます。

    ports:
      - 4201:8080

先ほど作成したホスト側の input 、 output ディレクトリを、コンテナ内の /opt/DeTTECT/input 、 /opt/DeTTECT/output ディレクトリとの関連付けを行います。
また、 ホスト側に配置した attack-stix データと、コンテナ内の /opt/DeTTECT/attack-stix-data と関連付けるための設定(読み取り専用にする)も行います。
関連付けるために以下の設定を入れます。

    volumes:
      - ./input:/opt/DeTTECT/input
      - ./output:/opt/DeTTECT/output
      - $HOME/attack-stix-data:/opt/DeTTECT/attack-stix-data:ro

docker composeコマンドを使って、dettectコンテナを起動します。

$ docker compose up -d

コンテナ内に入る

docker-compose.ymlのあるディレクトリでは、docker composeコマンドを使うと、コンテナに対する操作を行うことができます。

コンテナ内に入ってシェルを使うには、以下のコマンドを実行します。

$ docker compose exec <サービス名> /bin/bash

サービス名は、docker-compose.yml で指定したサービス名(上記例ではdettect)のことです。

サービス名を確認するコマンドもあります。SERVICEのところに記載されているのがサービス名となります。

$ docker compose ps -a
NAME      IMAGE            COMMAND     SERVICE   CREATED          STATUS          PORTS
dettect   dettect:latest   "python3"   dettect   25 minutes ago   Up 25 minutes   0.0.0.0:4201->8080/tcp, [::]:4201->8080/tcp

コンテナ内に入るには、以下のコマンドを実行します。

$ docker compose exec dettect /bin/bash

DeTT&CTエディタを起動する

DeTT&CTエディタのWebアプリは、自動では起動されないため、以下の手順でコンテナ内から起動します。

  1. (コンテナ外に居る場合は)コンテナ内に入る
$ docker compose exec dettect /bin/bash
  1. DeTT&CTエディタのWebアプリを起動する
root@26c87d6584c5:/opt/DeTTECT# python dettect.py e &
[1] 14
root@26c87d6584c5:/opt/DeTTECT# Editor started at port 8080
You can open the Editor on: http://localhost:8080/

DeTT&CTエディタはフォアグラウンドで動作するため、コマンド末尾に & をつけバックグラウンドで動作させます。

ホスト側のブラウザで、 http://localhost:4201 にアクセスすると、コンテナの8080ポートに接続され、DeTT&CTエディタを利用することができます。

DeTT&CTエディタのWebアプリを停止する場合は、コンテナ内でバックグラウンドジョブの停止を行います。
バックグラウンドジョブの停止は、Linuxにおける方法と同じです。

root@26c87d6584c5:/opt/DeTTECT# jobs
[1]+  Running                 python dettect.py e &

root@26c87d6584c5:/opt/DeTTECT# kill %1
root@26c87d6584c5:/opt/DeTTECT# Shutting down webserver
[1]+  Done                    python dettect.py e

まとめ

DeTT&CTの実践として、環境を整えるところまでを説明しました。

次は実際にデータソース管理ファイルの作成や可視化を行っていきます。

関連記事

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

Discussion