サイバーセキュリティ・フレームワーク「MITRE CALDERA」紹介：使用方法・ブルーチーム編

# サイバーセキュリティ・フレームワーク「MITRE CALDERA」紹介：使用方法・ブルーチーム編

## はじめに

### 趣旨

本記事は、『サイバーセキュリティ・フレームワーク「MITRE CALDERA」紹介』の 第三弾「使用方法・ブルーチーム編」です。
本編では、サイバー攻撃に対してインシデントレスポンスを行うブルーチームでの MITRE CALDERA の使い方を紹介します。
機能概要や環境構築につきましては第一弾「[機能概要・動作環境構築編](https://qiita.com/shiracamus/items/658ea3e5b28fa5ae3245)」をご覧ください。

### 記事構成

紹介内容が多いため、以下の4記事に分けて紹介しています。

* [機能概要・動作環境構築編](https://qiita.com/shiracamus/items/658ea3e5b28fa5ae3245)
* [使用方法：レッドチーム編](https://qiita.com/shiracamus/items/e1bbdaaeff312e9bd09e)
* 使用方法：ブルーチーム編（本記事）
* [使用方法：トレーニング編](https://qiita.com/shiracamus/items/9c27b08214956b334311)

### 注意・免責事項

本記事には、サイバー攻撃を模擬再現する方法が含まれています。
これは、サイバー攻撃されることによってどのような事象が発生するのか、どう対処すれば良いのかを確認・検討・改善したり、サイバーセキュリティ人材育成に活用することが目的です。
他のシステムやネットワークに影響を与えないように、閉じたネットワーク環境を作って実施してください。
許可を得ていない相手に対して実施した場合、不正アクセス禁止法などの法律に抵触しますので、絶対にやめてください。

本記事の内容は私個人の見解であり、所属する組織の公式見解ではありません。
本記事に書いてあることを試して、利用者および第三者に何らかのトラブル・被害・損害が発生しても、筆者および所属組織では一切責任を負いません。

## 概要

ブルーチームは、サイバー攻撃 などの セキュリティインシデント が発生したときに、状況把握、影響範囲特定、原因追求、対処、復旧、連絡、記録、報告といった 「インシデントレスポンス」 を行います。
MITRE CALDERA には、インシデントレスポンス を自動実行する SOAR (Security Orchestration, Automation and Response) や RPA (Robotic Process Automation) に相当する機能があり、ブルーチームの活動支援や人材育成に活用できます。
基本的に、「[使用方法：レッドチーム編](https://qiita.com/shiracamus/items/e1bbdaaeff312e9bd09e)」と同様の手順で操作します。

### 用語

MITRE CALDERA で使用されているブルーチームの用語を以下に示します。

* Abilities (能力)
  インシデントレスポンス能力（対処・対応能力）のことです。
  MITRE CALDERA では、各種インシデントに対してレスポンスを自動化するスクリプトを提供しています。
  本記事では「防御テクニック」と表記します。

* Defender（防御者）
  インシデントレスポンスを行うブルーチームのことです。
  MITRE CALDERA では、どの Abilities (防御テクニック) をどの順序で使うかの手順を定義します。
  本記事では「防御シナリオ」と表記します

* Agent（エージェント）
  ブルーチームが管理する端末で実行しておき、ブルーチームの指示に従って処理を実行します。

MITRE CALDERA 2.6.6 では、下図に示す Response プラグイン によって 4種類の 防御テクニック (Abilities) と 1種類の 防御シナリオ (Defender) を提供しています。
なお、防御テクニックは各種OSに応じたスクリプトを提供しており、提供スクリプトの数を表示しています。
MITRE CALDERA のブルーチーム機能は公開されたばかりで、今後、テクニックとシナリオの提供数が増えていくことが期待できます。実際、MITRE CALDERA 2.7.0 では 防御テクニックが 27種類、防御シナリオが 2種類 に増えています。

![blue_response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/51cd1f2c-0ec0-e2c6-43c0-5e27a4eed032.png)

### 使用方法概要

ブルーチームが MITRE CALDERA を使用する方法として大きく2種類あります。

* 自動実行: 防御シナリオを自動実行し、エージェントも自動操作する
* 手動実行: 防御シナリオを自動実行し、エージェントを手動操作する

自動実行は、エージェント端末の状態や周辺ネットワーク状況を自動収集し、サイバー攻撃の痕跡や兆候があれば可能な範囲で自動対処します。
手動実行は、エージェント端末の状態や周辺ネットワーク状況を手動で確認し、サイバー攻撃の痕跡や兆候があれば手動で対処します。
本記事では、自動実行手順について紹介します。

### 使用手順概要

ブルーチームの使用手順は、レッドチームの使用手順とほぼ同じです。

1. MITRE CALDERA サーバにて
   1. MITRE CALDERA サーバ起動
1. エージェント端末にて
   1. MITRE CALDERA サーバにログイン
   1. ブルーチーム用のエージェントスクリプトを入手して実行
1. ブルーチーム端末にて
   1. MITRE CALDERA サーバにログイン
   1. 防御シナリオ作成・編集・確認（必要であれば）
   1. オペレーション作成（エージェントと防御シナリオを選択）
   1. オペレーション実行
   1. エージェント操作（手動実行時）
   1. 実行結果確認

## 使用環境

レッドチーム編では、模擬サイバー攻撃を実施するため、最初に Ubuntu Linux VM 1台 のローカル環境で攻撃シナリオを自動実行してみることをお勧めしました。
しかし、ブルーチーム編ではそれほど危険な操作を実施しないため、リモート環境での使用手順を示します。
ローカル環境で使用してみたい方は、すべての操作を 1 台の Ubuntu Linux VM で行ってください。

### システム構成

VirtualBox の中に、エージェントを起動する「エージェントVM」、ブルーチームがWeb操作する「ブルーチームVM」、そして「MITRE CALDERA サーバ VM」 を用意します。
エージェントVM と ブルーチームVM の OS は、Linux でもいいですし Windows でもいいです。
本記事では、すべて Ubuntu 20.04 Desktop で動作確認しています。

![blue_system_remote.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/e87d3281-ce0c-755f-3048-691907023272.png)

### 環境構築

以下の手順で、環境構築を行います。

1. 「[機能概要・動作環境構築編](https://qiita.com/shiracamus/items/658ea3e5b28fa5ae3245)」の「動作環境構築」を行う
2. 「[使用方法・レッドチーム編](https://qiita.com/shiracamus/items/e1bbdaaeff312e9bd09e)」の「環境構築（ソフトウェア追加）」を行う  
   「レッドチーム」を「ブルーチーム」に読み替えて行います。
3. 「[使用方法・レッドチーム編](https://qiita.com/shiracamus/items/e1bbdaaeff312e9bd09e)」の「リモート環境での模擬サイバー攻撃実施手順」の「設定変更」を行う  
    この「設定変更」はユーザ名「red」でログインして行います。

## 使用手順

### 準備

#### MITRE CALDERA サーバ起動

MITRE CALDERA サーバ VM で端末アプリケーション(コマンドシェル)を開き、以下のコマンドを実行します。

```command
$ cd caldera
$ source calderaenv/bin/activate
$ python server.py
```

#### ブルーチームログイン

エージェントVM と ブルーチームVM の両方で Google Chrome Webブラウザを起動します。
アプリケーション一覧の中から「Chromium ウェブ・ブラウザ」を起動するか、端末で新たなウィンドウを開いて、以下のコマンドを実行します。

```command
$ chromium-browser
```

WebブラウザのURL欄に以下のURLを入力します。

```text
http://localhost:8888/
```

以下に示すaccess画面が表示されるので、`username`欄 に `blue` を、`password`欄 に `admin` を入力し、 `Log in` ボタンをクリックしてログインします。

![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/b96d58eb-d0b1-38ea-a671-310adf18b83a.png)


ログインすると以下のホーム画面が表示されます。
最上部にメニュー項目が並んでいます。
メニュー項目名の上にマウスカーソルを移動するとサブメニューが表示されます。

![blue_home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/cb9ff876-f91a-123d-8134-6113968b3250.png)

#### エージェント起動

エージェントVM で MITRE CALDERA サーバ から エージェントスクリプト を入手し、端末でエージェントスクリプトを実行してエージェントを起動します。
エージェントスクリプトの入手手順を以下に示します。

1. Webブラウザの Protectionメニュー にマウスカーソルを移動
1. サブメニューが表示されるので agents を左クリック
   ![blue_menu_agents.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/4f9786c0-5083-4b65-1283-41cca298dcba.png)
1. Agents画面が表示されるので、左側で点滅している「Click here to deploy an agent」をクリック
   ![blue_agents.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/b19bbcc9-b118-de70-35f6-38a77bc79691.png)
1. エージェント選択画面が表示されるので「choose an agent」をクリック
1. 「54ndc47: A GoLang agent which communicates through the HTTP connection」を選択して左クリック
    54ndc47 は[leet](https://ja.wikipedia.org/wiki/Leet)文字で sandcat と読みます。
    Pluginsメニューの中の sandcat をクリックすると表示されますが、cat は coordinated access trojan の略だそうです。
   ![blue_agent_sandcat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/7c85b199-c440-e6d6-b27d-9da63e98e95c.png)
1. OSのアイコンと用途に応じたスクリプトが複数表示されるので、Ubuntu Linux のアイコンが表示されるまでスクロールダウン
1. 「Deploy as a blue-team agent instead of red (sh)」の下に書かれているスクリプトをマウスでドラッグ選択し、左クリックして「コピー」を選んでクリップボードにコピー
   ![blue_agent_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/0eae9897-5b75-743f-e2ea-e703399c50e6.png)
エージェントスクリプトの実行手順を以下に示します。

1. 端末アプリケーションで新たなウィンドウを開く
2. 端末ウィンドウ上でマウスを右クリックして「ペースト」を選択
   クリップボード内のスクリプトが入力されます。
3. 改行キーを入力してスクリプトを実行

スクリプトがうまくコピー＆ペーストできない場合は、以下の文字列を端末に入力して実行します。

```text
server="http://127.0.0.1:8888";agent=$(curl -svkOJ -X POST -H "file:sandcat.go" -H "platform:linux" $server/file/download 2>&1 | grep -i "Content-Disposition" | grep -io "filename=.*" | cut -d'=' -f2 | tr -d '"\r') && chmod +x $agent 2>/dev/null;nohup ./$agent -server $server -group blue &
```

#### エージェント接続確認

エージェントVMの端末には何も出力されませんが、ブルーチームVMのWeb画面にエージェントが表示されればエージェント起動成功です。

![blue_agent_connected.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/e06b9fd1-15e4-081b-fb87-c27b996e3e09.png)

### 防御シナリオ実行

以降は、ブルーチームVM の Webブラウザで操作します。

#### 防御シナリオ確認

Protection メニューの defenders で攻撃シナリオを確認できます。
攻撃シナリオ確認手順を以下に示します。

1. Webブラウザの Protectionメニューにマウスカーソルを移動
1. すぐ下にサブメニューが表示されるので、defenders を左クリック 
   ![blue_menu_defenders.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/0a92e832-d0c0-1511-067f-6172689d18ec.png)
1. プルダウンをクリックすると防御シナリオ一覧が表示される
1. MITRE CALDERA 2.6.6 では `incident response` ひとつだけしかないので、それを選択すると以下のような内容が表示される
   ![blue_incident_response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/31240473-e6fa-815b-e595-c6a598f1297f.png)

防御シナリオはいくつかのフェーズ(Phase)で構成されていて、ひとつのフェーズが終われば次のフェーズを実行します。
各フェーズには防御テクニックが並んでいます。
防御テクニックの実行順序は Planner によって決まるのですが、MITRE CALDERA 2.6.6 では sequential planner のみ提供されていて順に実行されます。（MITRE CALDERA 2.7.0 では Planner が 3 種類に増えています）
各攻撃テクニックには、説明と有効なOSのロゴマークが並んでいます。

#### オペレーション作成

どのエージェントにどの防御シナリオを実行させるのかを登録します。
オペレーション作成手順を以下に示します。

1. Protection メニューにマウスを移動
2. サブメニューが表示されるので、その中の operations メニューをクリック
   ![blue_menu_operations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/7a6e8eac-9c96-ff75-eb6d-6b8292fd55ea.png)
3. 左側の「View」をクリックして「Add」にする
   ![blue_operations_view.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/06c3c025-065f-755a-6557-b049d7d9b56e.png)
4. オペレーション名を入力し、対象エージェント、攻撃シナリオを選択  
   オペ―レーション名は自由に命名でき、例として「demo」にしました。
5. エージェントグループは「blue」を選択  
   エージェント起動スクリプトの引数に「blue」を指定したエージェントを遠隔操作します。  
6. 攻撃シナリオを選択  
   「incident response」を選びます。  
7. Auto close operation を選択  
   防御シナリオをひととおり実行したら終了します。  
   Keep open forever を選択すると、終了することなくシナリオ実行を繰り返します。
   ![blue_operation_add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/5245a5b8-26dc-f715-5daf-e88fad57d57e.png)

#### オペレーション実行

オペレーション作成画面をスクロールダウンすると「Start」ボタンがあります。
「Start」ボタンを押すと、選択したエージェントに対して防御シナリオが実行されます。

![blue_operation_start.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/3713ad2f-3deb-ca28-0320-dbc8db35f61c.png)

以下に示す画面のように、防御シナリオの実行状況が表示されます。

1. 画面上部に進捗割合が表示される
1. 画面下部に実施中防御テクニックが表示される（上側が最新）
1. 実行状態が小さな丸で色分けされて表示される
1. 1つのフェーズが終わると次のフェーズの防御テクニックが追加表示される

![blue_operation_started.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/882b44f5-4a46-96ad-fd90-f0748c270228.png)

進捗状況表示が 100% になればシナリオ実行完了です。
シナリオの実行を一時停止したり、強制停止することもできます。

#### 実行結果確認

攻撃テクニックの横に星印があれば攻撃テクニック毎の結果を確認できます。
incident response シナリオは攻撃テクニック毎の結果がありません。
以下の手順で実行結果をダウンロードします。

1. include agent output をクリック
2. Download report をクリック

![blue_operation_finished.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/5b36397e-7856-61af-e728-126ab8015d3a.png)

![blue_report.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/e5fc78c1-fa46-0c51-882f-587b03e7480c.png)

## ファイル構成

防御テクニックおよび防御シナリオのファイル構成について説明します。
なお、レッドチームの攻撃テクニックおよび攻撃シナリオも同様の構成です。

### プラグインディレクトリ構成

防御テクニックおよび防御シナリオは「response」プラグインが提供しています。
responseプラグインは MITRE CALDERA インストールディレクトリの「plugins/response」ディレクトリにPythonスクリプトおよびデータが格納されています。

ディレクトリ構成およびファイル一覧を以下に示します。

```text
plugins/response/
├── README.md
├── app
│   ├── parsers
│   │   └── process.py
│   └── response_svc.py
├── data
│   ├── abilities
│   │   ├── detection
│   │   │   └── 3b4640bc-eacb-407a-a997-105e39788781.yml
│   │   └── response
│   │       └── 02fb7fa9-8886-4330-9e65-fa7bb1bc5271.yml
│   ├── adversaries
│   │   └── 7e422753-ad7a-4401-bc8b-b12a28e69c25.yml
│   └── sources
│       └── e1ceccf2-92b3-4a28-ade5-5f67a2dfd7e7.yml
├── hook.py
└── templates
    └── response.html
```

`plugin/response/hook.py` がプラグインとして組み込まれるときに実行されるスクリプトです。
`plugin/response/app` 配下にプラグインのスクリプトがあります。
プラグインの作り方については、公式ドキュメントを参照してください。
参考： https://caldera.readthedocs.io/en/latest/How-to-Build-Plugins.html

`plugin/response/data` ディレクトリ配下にある `*.yml` ファイルが、テクニックやシナリオが定義されているテキスト形式ファイルです。
定義ファイル名には UUID が使われています。UUID は uuidgenコマンド などで生成できる全世界でユニークなIDです。
定義ファイルを自作してディレクトリに置くだけで、MITRE CALDERA 起動時に自動的に読み込まれ、定義が追加されます。

### 防御テクニック

防御テクニックの定義ファイルは `plugin/response/data/abilities` ディレクト配下にあります。
現状、detection と response のディレクトリにそれぞれひとつずつ ymlファイルが提供されています。
防御テクニック定義ファイルのおおよその内容を以下に示します。実際の定義内容は、テキストエディタでymlファイルを開いてご確認ください。

```text
---

- id: ファイル名に使われているUUID
  name: 名称
  description: 説明
  tactic: 戦術分類
  technique:
    attack_id: x
    name: x
  repeatable: yes
  platforms:
    darwin:
      スクリプト定義
    linux:
      スクリプト定義
    windows:
      スクリプト定義
```

### 防御シナリオ

防御シナリオ定義ファイルは、`plugin/response/data/adversaries` ディレクト配下にあります。
ymlファイルがひとつだけですので、防御シナリオが一つだけ提供されていることがわかります。
防御シナリオ定義ファイルのおおよその内容を以下に示します。実際の定義内容は、テキストエディタでymlファイルを開いてご確認ください。

```text
---

id: ファイル名に使われているUUID
name: 名称
description: 説明
phases:
  1:
    - 防御テクニックUUID
  2:
    - 防御テクニックUUID
```

## さいごに

ブルーチームでの MITRE CALDERA の使用方法が伝わりましたら幸いです。
テクニックやシナリオを自作して、自動化の検討や検証に使うことなども考えられるかと思います。
次回は、トレーニング編を公開予定です。CTF (Capture The Flag) のようなクイズ形式問題が出題され、 問題に挑戦できます。お楽しみに。