Threat Modeling の概要と STRIDE を使った脅威探しの方法を紹介する。
Threat Modeling 概要
Threat Modeling とはリスクマネジメントの一種であり、ソフトウェアに存在する潜在的な脅威を洗い出すプロセスのことを言う。
ソフトウェア開発における Threat Modeling の目的は、セキュリティの問題を早期に発見することによって、修正によるコスト発生を抑えつつ、安全なプロダクトをデリバリーすることにある。
なお、脅威によるリスクを評価し低減することも含めて Threat Modeling ということもあるが、この記事では脅威を洗い出すことに焦点を当てる。
Threat Modeling の例
Threat Modeling がどんなものかをざっくり把握してもらうために、スマホゲームを例に説明する。
ここではスマホゲームの脅威を「健全なゲーム運営を阻害するもの」として、具体的にどんなものがあるんだろう?をひたすら探す。これが Threat Modeling.
下記は筆者が一人ブレーンストーミングで思いついた脅威の例。みんなも考えてみよう。
- 「キャラクターのパラメータを不正に書き換え」られてゲームバランスを破壊される
- 「データベースに侵入」されてプレイヤーの個人情報を奪われる
- 「DoS攻撃」でゲームサービスを妨害される
- 「大量のプレイヤーが同時にログイン」してゲームの応答が遅くなる
- 「ディスク障害」でデータが消失する
- 「オペミス」でメンテナンス時間が延長する
※「」内が脅威にあたる。脅威は"悪意のある攻撃"とは限らないことに注意
このように、ブレーンストーミングによる Threat Modeling は手っ取り早く始められる。そして、開発チームにセキュリティの専門家がいればそれなりにうまくいく可能性が高い。
ただしブレーンストーミングには次のような課題がある。
- より多くの脅威を見つけ出すには下記が必要
- プロダクトへの深い理解
- セキュリティ関連のスキルセット(攻撃手法、防御手法、一般的な脅威、など)
- 網羅性がわからない(十分に脅威を洗い出せたか?)
- レビューが難しい
なのでもうちょっと体系的なアプローチが欲しくなる。次にその一つである STRIDE を導入する。
STRIDE
STRIDE とは、下記の表のとおり、代表的な6つの脅威の頭文字をとった略語。ちなみに STRIDE は情報システムが持つべき特性の逆転になっている。
- | 脅威 | 侵害されるシステムの特性 |
---|---|---|
S | Spoofing なりすまし |
Authentication / Authenticity 認証 / 真正性 |
T | Tampering 改ざん |
Integrity 完全性 |
R | Repudiation 否認 |
Non-repudiability / Accountability 否認防止 / 責任追跡性 |
I | Information Disclosure 情報開示 |
Confidentiality 機密性 |
D | Denial of Service サービス妨害 |
Availability 可用性 |
E | Elevation of Privilege 権限昇格 |
Authorization 認可 |
各脅威毎に検討する内容の例を上げる。
- Spoofing(なりすまし)
- 他の人になりすます
- 他の端末になりすます
- 他のプロセスになりすます
- Tampering(改ざん)
- ファイルを改ざんする
- メモリを改ざんする
- ネットワーク経路を改ざんする
- Repudiation(否認)
- 「やってないよ」と言い張る
- ログ(記録)がない
- Information Disclosure(情報開示)
- プロセスから漏洩
- データストアから漏洩
- ネットワークから漏洩
- Denial of Service(サービス妨害)
- プロセスへのDoS
- データストアへのDoS
- ネットワークへのDoS
- 人へのDoS
- Elevation of Privilege(権限昇格)
- プロセスの権限を奪う
- 認可ロジックのバグ
- ACLの設定ミス
STRIDE を使った Threat Modeling の例
先ほどのスマホゲームの脅威探しに STRIDE を導入してみよう。6つの観点ベースで脅威を列挙できるので、いきなり始めるよりも整理しやすく、網羅性も可視化しやすくなる。
下記は筆者が STRIDE 観点でブレーンストーミングした例。みんなもやってみよう。
- Spoofing(なりすまし)
- 他のプレイヤーになりすましてログインされる
- 不正なプログラムから(ゲームクライアントになりすまされて)リクエストを投げつけられる
- プレイヤーが偽のゲームサーバに接続させられてIDパスワードを盗まれる
- Tampering(改ざん)
- キャラクターのパラメータを不正に書き換えて強化される
- ゲームクライアントのコードを書き換えられて色々される
- Repudiation(否認)
- 有料アイテムを購入してないのに課金されたというクレーム
- 不正行為でバンしたユーザから異議申し立てされるとか?
- Information Disclosure(情報開示)
- アプリをリバースエンジニアリングされてゲームの隠しデータを見られる
- データベースに侵入されてプレイヤーの個人情報を奪われる
- Denial of Service(サービス妨害)
- DoS攻撃でゲーム運営を妨害される
- 大量に新規登録されてリソースが浪費される
- 大量のプレイヤーが同時にログインしてゲームの応答が遅くなる
- ディスク障害でデータが消失する
- オペミスでメンテナンス時間が延長する
- Elevation of Privilege(権限昇格)
- ゲームにログインしなくてもプレイできたりしない?
- プレイヤーがバグを突いてGM権限でなんか実行できたりしない?
STRIDE を取り入れたことで列挙できた脅威の数が増加し、網羅性もそれっぽく見えるようになった。(前のブレーンストーミングでは Spoofing と Repudiation と Elevation of Privilege が漏れていた)
とはいえブレーンストーミングという手法をとっている以上、依然として属人化や網羅性の課題は残る。
Next
次回は、よりシステマティックに脅威を列挙できるアプローチとして STRIDE-per-element と STRIDE-per-interaction を紹介する。