脅威モデリングの原理(STRIDE・攻撃木・信頼境界)
設計段階で攻撃面を体系的に洗い出せる。データフロー図と信頼境界で対象を可視化し、STRIDE で脅威を漏れなく分類、攻撃木とリスク評価で対策の優先順位まで決める枠組み。
- 1.脅威モデリングは、データフロー図で対象を分解し、信頼境界を引き、各要素に STRIDE を当てて脅威を網羅的に列挙する構造化手法です。
- 2.信頼境界はデータが信頼レベルの異なる領域へ越境する線で、ここに集中して検証・認証・正規化を置くと攻撃面を効率よく塞げます。
- 3.攻撃木は目標を根、攻撃経路を枝として AND/OR で表す木構造。DREAD 等のリスク評価で点数化し、対策の優先順位を決めます。
脅威モデリングとは何か
脅威モデリングは、システムの構造を分解して攻撃者が悪用しうる経路を体系的に洗い出し、どこに対策を置くべきかを設計段階で決める作業です。実装が終わってから侵入テストで穴を探すのではなく、設計図の上で先回りして攻撃を想定する点に本質があります。修正コストが最も安い設計段階で欠陥を潰せるため、OWASP Top 10 でも「安全でない設計(A04)」として脅威モデリングの不足が独立カテゴリに挙げられています。
核心は次の4つの問いに答えることです。(1) 何を作っているか(対象の可視化)、(2) 何がうまくいかないか(脅威の列挙)、(3) どう対処するか(緩和策)、(4) 十分にやったか(検証)。この記事は主に (1) と (2) の原理――データフロー図・信頼境界・STRIDE・攻撃木――を扱います。
データフロー図と信頼境界
最初の工程は、システムを**データフロー図(DFD)**として描き、攻撃面を見える化することです。DFD は次の4種類の要素だけで構成します。表記が少ないのは、脅威の当てはめを機械的に行えるようにするためです。
| 要素 | 意味 | 代表例 |
|---|---|---|
| プロセス | データを加工する実行主体 | Web サーバー・API・バッチ |
| データストア | データが静止して置かれる場所 | DB・ファイル・キャッシュ |
| 外部エンティティ | 境界の外にいる主体 | ユーザー・外部サービス |
| データフロー | 要素間を流れるデータ | HTTP リクエスト・SQL クエリ |
ここに引くのが信頼境界(trust boundary)です。これは信頼レベルの異なる領域の境目――言い換えれば、データの出所をそのままでは信用できなくなる線です。ブラウザとサーバーの間、アプリと DB の間、特権プロセスと非特権プロセスの間などに現れます。
信頼境界が重要なのは、脅威は境界を越えるところで生まれるからです。境界の内側だけで完結するデータフローには検証の必要が薄く、逆に境界を越えてくる入力はすべて「攻撃者が制御しうるもの」と見なさねばなりません。だからこそ入力検証・認証・正規化・出力エンコードといった対策は、信頼境界の上に集中して配置するのが原則です。境界の数とその上を通るフローの本数が、そのまま検査すべき攻撃面の量になります。
信頼境界を「社内ネットワークの外周」のような物理・ネットワーク的な線と混同しないでください。同一サーバー内でも、特権で動くデーモンとユーザー入力を捌くワーカーの間には境界があります。場所ではなく『どこからどこへ信頼レベルが落ちるか』で引くのが、ゼロトラスト と通じる発想です。
STRIDE による脅威分類
DFD の各要素・各フローに対し、何が起こりうるかを漏れなく当てるための分類が STRIDE です。Microsoft が体系化したもので、6つの脅威カテゴリの頭文字を取っています。それぞれがある安全性質の侵害に対応しているのがポイントです。
| STRIDE | 脅威 | 侵害される性質 | 主な対策 |
|---|---|---|---|
| S: Spoofing | なりすまし | 真正性(Authentication) | 認証・署名 |
| T: Tampering | 改ざん | 完全性(Integrity) | 署名・MAC・ハッシュ |
| R: Repudiation | 否認 | 否認防止(Non-repudiation) | 監査ログ・署名 |
| I: Information Disclosure | 情報漏えい | 機密性(Confidentiality) | 暗号化・アクセス制御 |
| D: Denial of Service | サービス妨害 | 可用性(Availability) | レート制限・冗長化 |
| E: Elevation of Privilege | 権限昇格 | 認可(Authorization) | 最小権限・入力検証 |
STRIDE の威力は、要素の種類ごとに当てはまる脅威があらかじめ決まっていることです。これにより「思いつき」ではなく機械的に列挙できます。たとえば外部エンティティには S と R が、データフローには T・I・D が、データストアには T・I・R・D が、プロセスには6種すべてが当たりうる、という対応表(STRIDE-per-element)に沿って各要素を点検します。
例: ログイン API(プロセス、信頼境界を跨ぐフローを受ける)
S: 他人になりすましてログインできるか → 認証強度・MFA
T: リクエストボディを改ざんできるか → TLS・サーバー側検証
R: 不正ログイン試行が記録されず否認されるか → 監査ログ
I: エラー応答から有効ユーザーを推測できるか → 応答の均一化
D: 試行を大量に送り認証処理を枯渇させられるか → レート制限
E: 一般権限から管理者操作へ昇格できるか → 認可チェックの分離
この6観点を境界をまたぐフロー1本ごとに回せば、見落としが構造的に減ります。なお D(サービス妨害)は緩和の考え方が他と異なるため、専用の整理として DDoS 対策 を併読すると理解が深まります。
慣れないうちは「これは認証で防いでいるから脅威ではない」と、列挙の段階で対策の有無を判断しがちです。これは見落としの温床です。まず『起こりうる脅威』をすべて挙げ切ってから、別工程で『既存の緩和策で十分か』を評価してください。列挙フェーズで間引くと、緩和の前提が崩れた時に脅威ごと消えてしまいます。
攻撃木とリスク評価
STRIDE が「要素ごとに脅威を広く挙げる」横の網羅だとすれば、**攻撃木(attack tree)は「ある目標を達成する経路を深く掘る」縦の分析です。攻撃者の最終目標を根(ルート)**に置き、それを達成する手段を子ノードへ分解していきます。
ノードの結合には2種類あります。AND ノードは子をすべて満たさないと達成できない(攻撃者にとって難しい)、OR ノードはどれか1つで達成できる(守る側にとって脆い)。この区別が防御の急所を示します。
目標: 管理者データを読み出す [OR]
├─ 認証情報を窃取する [OR]
│ ├─ フィッシングでパスワードを奪う
│ └─ 漏えい DB のパスワード再利用を突く
├─ 認可の不備を突く(IDOR) [AND]
│ ├─ 有効なセッションを得る
│ └─ 他人の ID を指す参照を改ざんする
└─ DB へ直接到達する [OR]
└─ SQL インジェクションで読み出す
葉(リーフ)に近いほど具体的な攻撃手段で、ここに「コスト」「必要な技能」「検知されやすさ」などの属性を載せると、根までの**最も安価な経路(攻撃者が選ぶ道)**が見えてきます。OR の枝はどれか1つでも生きていれば目標が成立するため、最弱の枝を塞ぐのが効率的な防御になります。
列挙した脅威に優先順位を付けるのがリスク評価です。古典的な DREAD は5観点を点数化して合算します。
| DREAD | 評価する軸 |
|---|---|
| Damage | 成功したときの被害の大きさ |
| Reproducibility | 再現のしやすさ |
| Exploitability | 悪用に要する難易度・コスト |
| Affected users | 影響を受ける利用者の範囲 |
| Discoverability | 発見されやすさ |
DREAD は直感的ですが、評価者によって点数がぶれやすく、特に Discoverability は「見つかりにくいから低リスク」とする発想が隠蔽による安全に傾く弱点があります。そのため現在は、より客観的な CVSS や、単純に「発生可能性 × 影響度」のリスクマトリクスへ置き換える運用も多く見られます。重要なのは点数の絶対値ではなく、同じ基準で全脅威を並べ替え、上位から対処するという相対化です。
資格試験では「改ざんはどの安全性質を侵すか(→完全性)」「権限昇格に対応する STRIDE の頭文字は(→E)」のように、STRIDE と CIA トライアド・基本対策の対応関係が問われます。S→認証、T→完全性保護(署名/MAC)、R→監査ログ、I→暗号化/最小権限、D→可用性、E→認可、という対応を機械的に引き出せるようにしておくと確実です。
まとめ
脅威モデリングは、データフロー図でシステムを分解し → 信頼境界を引き → 各要素に STRIDE を当てて脅威を網羅し → 攻撃木で経路を深掘りし → リスク評価で優先順位を決める、という一連の構造化された設計作業です。場当たり的な「思いつき列挙」を、要素と境界に紐づく機械的な手順へ落とし込む点に価値があります。
実務では、まず信頼境界をまたぐ重要なフローに STRIDE を回して脅威台帳を作り、攻撃木で最弱の枝を見極め、リスク順に緩和策を設計・検証します。設計段階の脅威モデルは、実装後の ペネトレーションテスト と相互補完の関係にあり、「先回りで潰す」と「実際に突いて確かめる」を両輪で回すことで、攻撃面を継続的に縮小できます。
セキュリティ Article
脅威モデリングの原理(STRIDE・攻撃木・信頼境界)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
脅威モデリング
比較で見る軸
難易度: advanced / カテゴリ: セキュリティ / タグ数: 5
導入後に効く点
信頼境界はデータが信頼レベルの異なる領域へ越境する線で、ここに集中して検証・認証・正規化を置くと攻撃面を効率よく塞げます。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- セキュリティ
- タグ数
- 5
判断チェックリスト
- 自社の用途が「脅威モデリング / STRIDE」に近いか確認する。
- 強みである「脅威モデリングは、データフロー図で対象を分解し、信頼境界を引き、各要素に STRIDE を当てて脅威を網羅的に列挙する構造化手法です。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。