脅威モデリング x MINI Hardening 参加体験記

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901407/017ee8af-27d4-47a5-c42d-9948d50ee12b.png)

# はじめに
<!-- 発端や概要を記載 -->
こんにちは、ゆきゆきです。(Twitter: @yu1c1yu1c1)
12/7(土)に開催された脅威モデリング x MINI Hardening（正式名称:TMC Tokyo x ZANSIN）に参加してきました。 
非常に学びのある良いイベントであると感じたので、備忘録と情報共有のため記事を書きます。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [イベントについて](#Chapter1)
1. [内容について](#Chapter2)
    1. [午前の部](#Chapter2.1)
    1. [午後の部](#Chapter2.2)
    1. [学び](#Chapter2.3)
1. [おわりに](#Chapter3)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="Chapter1"></a>
# イベントについて
今回のイベントは脅威モデリング系コミュニティのThreat Modeling Connect、脅威モデリングオープンコミュニティと、MINI Hardening Projectがコラボして実現したイベントになります。

それぞれのコミュニティのリンクは下記です。

- **Threat Modeling Connect**

https://www.threatmodelingconnect.com/

- **脅威モデリングオープンコミュニティ**

https://threatmodeling.connpass.com/

- **MINI Hardening Project(ZANSIN Project)**

https://minihardening.connpass.com/

<a id="#HardeningProject"></a>

私自身MINI Hardeningには一度参加したことがあり内容はなんとなく覚えていたのですが、今回別の趣向を取り入れたいHardeningイベントを行うということだったので、復習もかねて参加することにしました。


<a id="Chapter2"></a>
# 内容について
複数のコミュニティの共催ということで、午前の部、午後の部がそれぞれのコミュニティのワークショップ・ハンズオンのような形でした。ただし全体としてストーリーはつながっており、午前中に脅威モデリングの手法を用いてアプリケーションに存在する脅威*1を特定し、その原因、対策を考え、午後にMINI Hardening (ZANSIN)の環境を題材にして実践、という形で進行されました。

<a id="Chapter2.1"></a>
## 午前の部
脅威モデリングをやります。
ちなみに私は脅威モデリングというものに初めて触れたのでちゃんとできているかは不明です。
DFD、STRIDE、アタックツリー、、、などなど謎の単語に苦しみながら&チームメンバーとわいわいしながらモデル（図？）を作り上げていきます。

1. まずDFD (Data Flow Diagram)を利用して、コンポーネントを可視化します。
![IMG_8096.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901407/b3712598-0596-c0e7-3288-887e3c5cc00e.jpeg)


1. DFDで可視化したコンポーネントに対してどのような脅威が存在するのか、STRIDEを活用して分析をします。
（画像撮り忘れた、、、）

:::note warn
ここで洗い出す脅威はハッカーからの攻撃というよりは、その環境で発生したら困ることを起点に考えるのがコツだそうです。例えばゲームのチート行為とか。セキュリティというと「ハッカーからどのような攻撃が想定されるか」と考えがちだったので、目からうろこでした。
:::

3. 最後に見つかった脅威がどのように攻撃者によって実現されるのか、アタックツリーを用いて具体的な手順を洗い出していきます。最終的に洗い出した手順に対する対策が、午後に行うサーバー堅牢化作業につながってきます。
![IMG_8098.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901407/658d9b22-dcf1-03bf-82d7-f6d9ff13928b.jpeg)

攻撃者のTactics (戦法)をより詳しく知るため、[MITRE ATT&CK®](https://attack.mitre.org/)というマトリックスも活用しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901407/3cf3840b-0af6-ac28-dba9-5d204d66f3df.png)


<a id="Chapter2.2"></a>
## 午後の部
午後はハンズオン形式で行われました。午前に作成した資料をもとに、脅威を取り除きつつ、インシデントレスポンスを行います。
なお今回使用した環境はMINI Hardening運営メンバーによってOSSとして公開されており、環境さえセットアップすればだれでも体験可能です。

https://github.com/ZANSIN-sec/ZANSIN


実際に発生・対応した内容は下記のようなものです。

> 1. SQLインジェクション脆弱性修復
login.php: ユーザー入力を直接SQLクエリに渡す形になっていたため、プレースホルダを使用してSQLインジェクションを防止。
new_user.php: ユーザー登録時に入力されたデータを適切にサニタイズし、プリペアドステートメントを使用してインジェクション攻撃に対処。
player.php: プレイヤー情報の取得処理でのSQLインジェクション脆弱性を修正。ユーザー入力をエスケープし、準備されたクエリを使用。
> 2. ファイルアップロード脆弱性修復
アップロードされるファイルの拡張子とMIMEタイプを検証し、不正なファイル（WebShellなど）のアップロードを防止。
アップロードされたファイルをサーバーの安全なディレクトリに保存し、ファイル名の正規化を実施。
> 3. インシデントレスポンス
WebShell削除: /home/vendor/mini4-game-api-php/public/images/playersディレクトリに不正アップロードされたWebShellを特定し、削除。
リバースシェル停止: Cronジョブに挿入されたPythonによるリバースシェルを確認し、停止・削除。
不正作成されたindex.html削除: 不正に作成されたindex.htmlファイルを特定し、削除。
不正ユーザーの作成によるアクセスの永続化: 不正に作成されたユーザーをロックアウト。その後もサーバーにログインしているユーザーを定期的に監視。
/var/log/nginx/access.log, error.log, /var/log/syslog, /var/log/auth.logなどの監視。

<a id="Chapter2.3"></a>
## 学び
- 脅威モデリングによる脅威の可視化手法の経験
    - （初めての経験だったため練度は低いが）DFD作成からSTRIDE、アタックツリーによる対策の決定までを一連の流れとして経験できた
    - 対策すべきことを網羅的に可視化する際に、便利なツールだと感じた
- 1回目参加の反省を生かした競技への取り組み
    - パスワード変更や不要なユーザーの削除等は確実に実施できた
    - 一方で、パーミッションで777が付与された実行可能ファイル等には気づけず、修正が漏れてしまっていた
- チームメンバーからの学び
    - ソースコードの修正は自分で行うことができなかったが、メンバーが実装してくれたコードを見ることによって学びとなった
    - 単純に監視の目が増えるので、インシデント発生にすぐ気づくことができる。数は力

ZANSINは公開されているので、それを使って復習をし、今回自分ではできなかったところの強化を行いたいと思います。

<a id="Chapter3"></a>
# おわりに
トータル12時間という長丁場でしたがあっという間に終わってしまいました。ZANSINは非常に有意義なプロジェクトですが、いきなり環境を渡されても何をすればよいかわからない、という方に非常にマッチした良いイベントだと感じました。また同じような形式で開催されるかどうかは不明ですが、もし開催されるのであればまた参加したいと思います。今回参加できなかった方も、[ZANSIN](https://github.com/ZANSIN-sec/ZANSIN) を使ってサイバーセキュリティのハンズオンを行ってみてはいかがでしょうか。

お昼で出てきたカレー
![1FA9CE80-E89C-468C-BE3B-F4ADECDF2E6B.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901407/38359259-90c4-59c1-260c-664c00e21c2f.jpeg)