CISAが出したDeciderを使ってみた

# 目次
[1.はじめに](#1はじめに)
[2.Decider とは](#2decider-とは)
[3.触ってみる](#3触ってみる)
[4.ユースケース](#4ユースケース)
[5.Deciderの構築](#5deciderの構築)
[6.おわりに](#6おわりに)

# 1.はじめに
2023年3月1日、CISA（アメリカ合衆国サイバーセキュリティ・社会基盤安全保障庁）が、[Decider][1] というツールを公開しました。
[プレスリリース][2]等をざっと見ただけでは、どういうものなのかピンとこなかったので、動かしてみて、どういうものなのか、誰にとって、どんな場面で役に立ちそうなのかをまとめます。
上記の通り、「公式見てもピンとこないから、自分でやってみよう」という経緯ですので、細かいニュアンス等は公式とずれがある可能性がありますので、ご了承ください。

# 2.Decider とは
早速ですが、今回公開された「Decider」とは、どういうツールなのでしょうか？
本ツールは、WEBアプリケーションとして動作し、「すでに明らかになっている攻撃者の行動」を「MITRE ATT&CKの分類」に当てはめる際のガイドとなるツールです。

MITRE ATT&CKが何かご存じない方は、[こちらの解説][11]がわかりやすいかと思います。

では、具体的に触ってみましょう。

# 3.触ってみる

## 3.1.最初の画面
Decider を立ち上げると、WEBサーバが起動するので、ブラウザを使用してアクセスします。
するとログイン画面が出てくるのでログインすると、以下のような画面が表示されます。
![top.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525462/97c4b5d3-e447-5748-8d85-6198036e6524.jpeg)
（ブラウザ標準機能を使って翻訳しています。）
（ログインユーザは、Deciderを構築時に作成するユーザです。Deciderはローカル環境にスタンドアローンで構築可能で、インターネット上のどこかにユーザ登録する必要などはありません）


「サタン（攻撃者）は何をしようとしていますか？」という質問文と、複数の選択肢（カードと呼びます）が表示されているのがわかるかと思います。

## 3.2.「すでに明らかになっている攻撃者の行動」に沿って、カードを選んでいく
例えば、ここで「すでに明らかになっている攻撃者の行動」が、「VPNの脆弱性を用いて、内部NWに侵入」だとして、この行動をMITRE ATT&CK上でどう分類するかを見ていきましょう。

上の画像で見た通り、選択肢が複数あるので、最も適切だと思われる選択肢を選びます。
今回は、「初期アクセス」「被害者の環境の中」等の文言から、画像の一番右の選択肢「初期アクセス（TA0001）」がよさそうです。

選ぶと、次の画面に遷移します。

![second-q.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525462/13de3459-eb26-09f3-d5a2-b11830f30021.jpeg)

また質問と選択肢が出てきています。
選択肢を見ると、かなりばっちりなものがあります。
画像の中の一番下、「外部リモートサービス（T1133）」を選択します。

すると、最終的な分類の画面が表示されます。
![tactics.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525462/09d2143e-4849-3de4-3063-332c10e9f4b2.jpeg)

1. 分類の説明文
2. MITRE ATT&CK の該当公式ページへのリンク（[今回の場合][3]）
    - 緩和策等は公式ページを見ると載っています
3. 実際に起こった事例
    - ベンダーのレポートページ等へのリンクがあります
4. カートへの追加(詳細後述)

このように、Deciderは「**攻撃者の行動**を**MITRE ATT&CKにマッピングする際**にガイドをしてくれる」ものとなっています。

## 3.3.カート機能
上記の④でふれたように、Decider には、カート機能があり、複数のカードを１つカートに入れて、まとめて保存・エクスポートすることができます。

![cart.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525462/cbf4da0a-a85d-3e87-911f-2f8c5b43bbbd.jpeg)

④の＋ボタンを押すと、上記のように、カートに入れることができます。
また、その際コメントも一緒に入れることができます。
なお、カートは右上のカートマークを押すことで表示/非表示が切り替えられます。


## 3.4.Wordへエクスポート
カートは、以下のように保存・エクスポートが可能です。
 - カートの中身を保存
 - 別環境のDeciderへ読み込む用にjson形式でエクスポート
 - [ATT&CK Navigator][4] 用にjson形式でエクスポート
 - Wordへエクスポート

Wordへエクスポートすると、以下のような「テクニック名」「ID」「コメント」が表になった.docxファイルがダウンロードされます。
![word.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525462/6dae3cbb-48f7-b8e8-6696-95f888271c07.jpeg)
(カードが一つだけだと味気ないので、少し追加しています)


## 3.5.なぜローカル環境に作成する必要があるか？
このような機能なら、普通にWEBサービスとして公開する形でもよさそうな気もします。

しかし、実際に自組織がやられた際に、このサービスを活用しようとすると、コメント等にインシデントの内容を書き、インターネット上にアップロードする必要が生まれてきます。
これは(アカウント等で制御していたとしても)、多くの組織のポリシー上禁止されていると思いますので、ローカル環境で構築、使用できる形にしたのだと思います。



# 4.ユースケース
さて、おおむね Decider がどんなものかがわかったので、ユースケースを考えてみます。
とはいっても、Decider は「攻撃者の行動をMITRE ATT&CK上にマッピングするのをサポートするツール」ですので、「攻撃者の行動をMITRE ATT&CK上にマッピングする」ケースそのものになろうかと思います。

## 4.1.再発防止策の策定
CSIRT等に所属している人は、組織内でインシデントが発生した際、フォレンジック等の調査を経て、再発防止策を策定する必要があるかと思います。
その際に、調査の結果わかった攻撃者の行動を、Deciderを用いてMITRE ATT&CKへマッピングし、一般的な再発防止策を見つけることができます。

例えば、[上述した例](#32すでに明らかになっている攻撃者の行動に沿ってカードを選んでいく)の場合、Decider を使用することで、より簡単にMITRE ATT&CKにマッピングでき、[MITREのページ][3]の緩和策(Mitigations)を参照することで、多要素認証の導入の必要性に気付くことができるかもしれません。


## 4.2.被害事例の共有
防御する側にとって、「攻撃者がどのようなテクニックを使用するか」ということは非常に重要で、被害事例の共有を歓迎する動きがあります。

例えば、一般的には、「侵入経路としてVPNが～」や、「脆弱なパスワードが破られて～」という風に表現されるのをよく見ますが、その情報を他の組織が参考にすることを考える、つまり広く一般に貢献するために情報を公開する場合、体系づけられて整理されたMITRE ATT&CKにマッピングすることで、情報を受け取った側がわかりやすくなります。

[「サイバー攻撃被害に係る情報の共有・公表ガイダンス検討会」][5]がパブコメを募集していた[サイバー攻撃被害に係る情報の共有・公表ガイダンス（案）][6]でも、
>標的型サイバー攻撃や、侵入型ランサムウェア攻撃など、特定の攻撃グループが一定期間内においては同じような戦術を取る場合、TTP 情報を「次の攻撃に備えて」広く共有することは相当程度の予防効果があります。
とされています。

（上記は、必ずしも MITRE ATT&CK上の分類を求めているものではないと思われますが。）


## 4.3.演習等の学習コンテンツの作成
演習等の学習コンテンツを作成する際に、「初期侵入としてどんな攻撃をしよう」「認証情報の窃取方法はどうしよう」「ラテラルムーブメントの手段はどうしよう」と悩むことがあるかと思います。
Deciderは、選択肢を選びながら（分類の概要を読みながら）、絞っていけるので、良いガイドになるように思います。


# 5.Deciderの構築
上記を読んで、Decider を実際に動かしてみようという方向けに、ざっくりと構築方法を共有いたします。
大体2時間もあれば、構築して一通り触ることができると思います。
なお、
 - ある程度Unix系の操作、CUIの操作に慣れている
 - 個人の環境で作成してみたい
 - とりあえずどんなものか動かしてみたい
という方を読者として想定しています。

また、基本的には、公式のGitHubおよびGitHub上の管理者向けガイドを読めばできるので、はまりどころや注意点のみ書くことにします。
※最近公開されたばかりのツールで、今後も活発にアップデートが行われることが予想されます。あくまでも、記事執筆時点（2023/03/05）での情報ですので、ご了承ください。

 - 筆者の環境
ホストOS：Windows 11
仮想環境：VirtualBox 7.0.4
ゲストOS：Ubuntu Server 20.04.5 LTS

公式では、Ubuntu 20.04 および CentOS 7 が動作検証済みとされています。

以降、[公式のガイド][7]を補足する形で記載していきますので、そちらを参照しながら進めてください。
なお、実際の構築手順は、p.9 から始まり、p.16 5.b.i でとりあえず起動ができます。
今回は、p.16 5.b.i までやって起動し、アクセスするところまでの手順です。

<details><summary>p.0 Ubutu kernel panic</summary><div>

VirtualBox で VM に Ubuntu Server をインストールしようとしたら、
```
end Kernel panic – not syncing:
```
的なメッセージが出て、起動に失敗しました。
「どうせ作ってすぐに壊すし」と、プロセッサーを1つしか割り当てていないのが原因のようです。
[こちら][8]を参考に、2つ以上のプロセッサーを割り当ててください。

ちなみに、私は余裕をもって
 - プロセッサー:2
 - メモリ:8G
 - HDD:80G
で作成しました。

</div></details>


<details><summary>p.0 ubuntu のユーザ</summary><div>

OSインストール時に、ユーザを作成する必要があると思います。
その際に、ユーザ名に「decider」を指定するのはやめておきましょう。
ガイドのp.9の下あたりにありますが、ガイドでは、権限を制限したユーザとして「decider」を作成し、そのユーザ権限でDeciderを動かします。

</div></details>


<details><summary>p.9 decider.tar.gz はどこから？</summary><div>

いきなり「tar をコピーしてこい」とか書かれていますが、
そもそもその tar ファイルがどこにあるかわかりませんでした。。。

なので、GitHubからzipで持ってきて、それを展開することに。
ガイドの、

```
sudo mkdir /etc/decider && sudo mv decider.tar.gz /etc/decider/decider.tar.gz
cd /etc/decider
sudo tar -xvf decider.tar.gz
```

の箇所を、

```
sudo apt install -y unzip
cd /tmp
wget https://github.com/cisagov/decider/archive/refs/heads/develop.zip
cd /etc/
sudo unzip -d /tmp/develop.zip ./
sudo mv decider-develop decider
cd decider
```

とする感じでやりました。

ディレクトリの構成として、
```
/etc/decider/app/hogehoge
```
となっていて、カレントディレクトリが

```
/etc/decider
```
となっていれば OK です。

</div></details>


<details><summary>p.9 find: missing argument to '-exec'</summary><div>

以下を実行する際、上記のようなエラーが出た場合、
コマンド末尾の{}と+の間のスペースが抜けている可能性があります。
```
sudo find /etc/decider -type d -exec chmod 755 {} +
```


</div></details>


<details><summary>p.10 から 12の中盤まで、何やればいいの？</summary><div>

この部分は、ただの説明で、何もやらなくていいです。
p.12 の Database Setup 1. Run ~~~ からまた指示に従ってコマンドを打っていきます。

</div></details>

<details><summary>p.13 APP_ADMIN_EMAIL</summary><div>

メールアドレスの形式である必要があるようが、実際にメールに使用されるわけではなく、
ログイン時のログインIDとして使用されるだけです。
example@example.com とかでOKです。

</div></details>

<details><summary>p.13 nano ...?</summary><div>

```
3. Modify ProductionConfig in app/conf.py
sudo -u decider nano app/conf.py
```

脳死で進めた結果、nanoが立ち上がって絶望していることでしょう。
Ctrl + X でそっと閉じて、

```
sudo -u decider vim app/conf.py
```

を実行してください。
ちなみに、個人のローカル環境で立ち上げるだけなら、変更すべき項目はないので、
別に開く必要はありません。

</div></details>

<details><summary>p.16 5.b.i</summary><div>

```
sudo -u decider python3 decider.py --config ProductionConfig
```

を実行したら、とりあえず、動いているものを見ることができます。

VirtualBoxで、あまり何も考えずに構築した場合、ネットワークがNAT設定になっていると思うので、[こちら][9]を参考にポートフォワーディング設定を行うと比較的簡単にアクセスできるようになります。

ホストポート:5000
ゲストポート:5000
で設定をして、
ホストOS(Windows)のブラウザから、
http://localhost:5000
にアクセスするとDeciderにアクセスすることができます。

ログイン画面が出てくるので、p.13 で指定したAPP_ADMIN_EMAILとAPP_ADMIN_PASSでアクセスしてください。

</div></details>

<details><summary>Deciderの使い方は？</summary><div>

詳細な使い方は、GitHub上の[ユーザガイド][10]にあります。

</div></details>



# 6.おわりに
ざっくりと触ってみましたが、まぁ使えるといえば使えますが、多少MITRE ATT&CKにとっつきやすくなる程度かなという気がします。
（MITRE ATT&CKを知らない人はここまでたどり着かないでしょうし、知っている人はこれに頼る必要は薄そう。。。）

個人的には、Wordへのエクスポート機能が、レポート(CSIRTのインシデント対応報告書やホワイトレポート)に使用できそうかなと思っています。
あと、ステップバイステップで選択肢を選んでいくのは、初学者にはわかりやすく、よさそうに見えました。


[1]:https://github.com/cisagov/Decider/
[2]:https://www.cisa.gov/news-events/alerts/2023/03/01/cisa-releases-decider-tool-help-mitre-attck-mapping
[3]:https://attack.mitre.org/techniques/T1133/
[4]:https://mitre-attack.github.io/attack-navigator/
[5]:https://www.nisc.go.jp/council/cs/kyogikai/guidancekentoukai.html
[6]:https://www.nisc.go.jp/pdf/policy/kihon-2/guidance(draft)_honbun.pdf
[7]:https://github.com/cisagov/decider/blob/develop/Decider_Admin_Guide_v1.0.0.pdf
[8]:https://www.souichi.club/technology/end-kernel-panic/
[9]:https://8oclockis.blogspot.com/2018/04/virtualbox.html
[10]:https://github.com/cisagov/decider/blob/develop/Decider_User_Guide_v1.0.0.pdf
[11]:https://www.intellilink.co.jp/column/security/2020/060200.aspx