DeTT&CT実践1
はじめに
本記事ではDeTT&CTについて実際に使用していく方法について説明します。
本記事は以下の流れで進みます。
- Dockerイメージのビルド
- attack-stix-dataの用意
- Dockerイメージからコンテナを起動する
- コンテナ内に入る
- DeTT&CTエディタを起動する
DeTT&CT環境を用意する
公式サイトのWikiでは、Dockerで導入する方法とローカルに導入する方法について記載されています。
特殊な要件がない場合は、Docker Hubに公開されている、rabobankcdcのdettectイメージをそのまま使う方法が手軽ですが、本記事ではカスタマイズ性を考慮し、Dockerfileを使ってイメージを作成し導入する方法を説明します。
Dockerイメージのビルド
- GitHubから、DeTTECTリポジトリをクローンします。
$ git clone https://github.com/rabobank-cdc/DeTTECT
- DeTTECTディレクトリへ移動します。
cd DeTTECT
- Dockerイメージを作成します。
$ docker build -t dettect .
dettectイメージが作成されます。
- イメージが作成されたことを確認します。
$ 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アプリは、自動では起動されないため、以下の手順でコンテナ内から起動します。
- (コンテナ外に居る場合は)コンテナ内に入る
$ docker compose exec dettect /bin/bash
- 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関連記事一覧
Discussion