脅威モデリング入門。STRIDEで設計段階に脅威を洗い出す
対象の目安: 設計に関わる開発者やリード / 入門

脆弱性は実装のミスから生まれるものばかりではありません。認証をどこに置くか、どのデータをどの経路で受け渡すか、どこまでを信頼するかといった設計上の判断そのものに、後から高くつく穴が潜みます。脅威モデリングは、こうした設計の弱点を動くコードができる前に洗い出し、対策を先回りで組み込むための作業です。図を描き、起こり得る悪いことを列挙し、対策を決め、十分かを確かめるという流れを、チームで一度立ち止まって行います。
この記事では、脅威を分類するニーモニックであるSTRIDEを軸に、データフロー図と信頼境界の描き方、6つの観点での脅威の洗い出し、対策の紐付けと優先度付けまでを、設計に関わる開発者とリード向けに整理します。難しい理論ではなく、ホワイトボードから始められる実務として説明します。
脅威モデリングとは何をする作業か
脅威モデリングは、システムを構造として捉え直し、攻撃者の視点で起こり得る悪いことを設計段階で列挙する作業です。OWASPは脅威モデリングを、アプリケーションのセキュリティに影響する情報を構造化して表現したものと定義し、設計の欠陥を実装より前に見つけられる点に価値があるとしています。実装後に見つかるバグと違い、設計の欠陥は書き直しの範囲が広く修正が重くなりがちです。図の段階で気づければ、実装後や本番稼働後に手を入れるより、影響範囲と修正コストを抑えやすくなります。
作業の骨格は、Threat Modeling Manifestoが示す4つの問いに集約できます。何を作っているか、何が問題になり得るか、それにどう対処するか、そして十分にやれたか、の4つで、OWASP Threat Modeling Cheat Sheetもこの問いを採用しています。最初の問いでシステムの姿を共有し、次の問いで脅威を洗い出し、三番目で対策を決め、最後に見落としがないかを見直します。この順序を一巡させることが、脅威モデリングの一回分になります。
セキュリティを設計に織り込むという発想は、CI/CDに検査を組み込むシフトレフトの考え方とも地続きです。開発の流れのなかで早く問題に気づく仕組みは、あわせて理解しておくと導入しやすくなります。
あわせて読みたい
DevSecOps入門。CI/CDにセキュリティを組み込むSAST・DAST・SCA・シークレットスキャン
STRIDEはセキュリティ特性の裏返し
STRIDEは、脅威の見落としを減らすための6分類のニーモニックです。あらかじめ用意した分類を各要素に当てて検討を促す構造化プロンプトであり、完全な脅威の列挙を保証するものではありません。MicrosoftのLoren KohnfelderとPraerit Gargが1999年に社内文書として考案し、その後Microsoftのセキュリティ開発ライフサイクル(SDL)に組み込まれてきました。6つの頭文字は、それぞれシステムが守るべきセキュリティ特性が破られた状態を表します。裏を返せば、各分類はその特性を守ることが対策になるという対応関係を持ちます。
| STRIDE分類 | 脅威の内容 | 破られる特性 | 守るための代表的な対策 |
|---|---|---|---|
| Spoofing(なりすまし) | 他人の認証情報を使って別人になりすます | 真正性(認証) | 強い認証、多要素認証、セッション管理 |
| Tampering(改ざん) | データやコードを不正に書き換える | 完全性 | 通信経路のTLS、署名やハッシュ、サーバ側での認可と所有権確認、重要値のサーバ側再計算 |
| Repudiation(否認) | 行為を後から否認され追跡できない | 否認防止 | 改ざん耐性のある監査ログ、記録の保全 |
| Information disclosure(情報漏えい) | 権限のない者へ情報が露出する | 機密性 | 暗号化、アクセス制御、最小開示 |
| Denial of service(サービス妨害) | 正規利用者へのサービスを妨げる | 可用性 | レート制限、冗長化、リソース保護 |
| Elevation of privilege(権限昇格) | 与えられた以上の権限を奪う | 認可 | 最小権限、権限境界の検証、認可の一元化 |
この対応を頭に入れておくと、脅威の洗い出しが機械的に進みます。ある要素を前にして、なりすまされたら、書き換えられたら、と6つの問いを順に当てるだけで、思いつきに頼らず一定の網羅性を持って検討でき、見落としを減らせます。破られる特性は情報セキュリティの基本原則と重なるため、機密性と完全性と可用性の考え方を押さえておくと理解が早くなります。
あわせて読みたい
情報セキュリティを機密性と完全性と可用性で整理する考え方
データフロー図と信頼境界を描く
脅威を当てる前に、システムを分解して図にします。よく使われるのがデータフロー図(DFD)で、OWASPも脅威モデリングで最も一般的な手法だとしています。DFDは4種類の要素で構成します。処理を行うプロセス、データが置かれるデータストア、要素間を流れるデータフロー、そしてシステムの外にいる外部エンティティです。利用者やブラウザ、外部サービスは外部エンティティとして描き、内部の処理やデータベースと線でつなぎます。
この図の上に信頼境界を引きます。信頼境界は、信頼のレベルが変わる位置に引く線です。制御している主体が変わるところ、たとえば利用者のブラウザとサーバのあいだ、アプリケーションとデータベースのあいだ、自社システムと外部認証サービスのあいだなどが境界になります。Microsoftのツールでは赤い点線で表現され、どこで支配する主体が切り替わるかを示します。
信頼境界を越えるデータフローは、脅威が集まりやすい場所です。境界の内側だけを流れるデータより、境界をまたぐデータのほうが、なりすましや改ざん、情報漏えいの入口になりやすいためです。図を描いたら、境界を横切る矢印を優先して見ていくと効率よく脅威を拾えます。
簡単なWebアプリで脅威を洗い出す
具体的に、利用者がブラウザからWebサーバへアクセスし、Webサーバがデータベースへ問い合わせ、認証だけを外部の認証サービスに委ねる構成を考えます。ここではWebサーバとデータベースを自社が管理する同一の信頼領域に置き、ブラウザと外部認証サービスは別の主体が管理するものと仮定します。信頼境界は信頼のレベルが変わる場所に引く線で、どこに入るかは構成に依存します。Webサーバとデータベースをそれぞれ別の主体や環境が管理するなら、そのあいだにも境界が入りますし、同一領域なら入りません。この仮定のもとでは、ブラウザとWebサーバのあいだ、Webサーバと外部認証サービスのあいだが主な境界です。STRIDEは境界だけでなく、プロセス、データストア、データフロー、外部エンティティという各要素に当てて脅威を洗い出します。
要素ごとに想定される脅威と対策を数行にまとめると、次のようになります。
| 対象要素(DFD要素) | STRIDE分類 | 想定される脅威 | 対策 |
|---|---|---|---|
| ブラウザ(外部エンティティ) | Spoofing | 別の利用者になりすましてログインする | 多要素認証、セッションIDの再生成、Cookieの保護 |
| ブラウザからWebサーバへのデータフロー | Tampering | 通信途中でリクエストが改ざんされる | 通信途中の改ざんにはTLS、署名やハッシュによる完全性の検証 |
| Webサーバ(プロセス) | Elevation of privilege | 一般利用者が管理者向けの操作へ到達する。正規利用者がパラメータやIDを操作して他人の資源を指定する(IDORや認可回避、業務ロジックの悪用) | 最小権限、認可の一元化、権限境界の検証、リクエストごとの認可と所有権のサーバ側確認、重要値のサーバ側再計算、状態遷移の検証 |
| Webサーバからデータベースへのデータフロー | Information disclosure | 経路上でクエリや結果が盗み見られる | 通信の暗号化、最小権限のDBアカウント |
| データベース(データストア) | Tampering / Information disclosure / Denial of service | 他人のレコードを不正に読み書きする。ストレージ容量の枯渇、ロック競合や接続数の枯渇による応答不能 | サーバ側の認可チェック、プレースホルダによるSQLインジェクション対策、DB権限の分離、容量と接続数の監視やリソース制限 |
| 外部認証サービス(外部エンティティ) | Spoofing / Repudiation | 認証応答を偽装して正規の認証を装う。操作の事実を後から否認される | トークンの署名検証、発行者と受信者の検証、改ざん耐性のある監査ログ |
表のように、同じ要素でも観点を変えると別の脅威が見えてきます。ここで区別したいのが、通信の改ざんと認可の回避です。通信途中の書き換えは完全性が破られるTampering(改ざん)の問題で、TLSで守れます。一方、正規の利用者がリクエストのパラメータやIDを操作して他人の資源へ手を伸ばすIDORや認可回避は、認可(Authorization)が破られる問題であり、STRIDEではElevation of privilege(権限昇格)に当たります。どちらも値の形式は正しいため入力検証では止まらず、認可回避の側は、リクエストごとに認可と所有権をサーバ側で確かめ、金額などの重要値をサーバ側で再計算し、状態遷移が正しいかを検証することで防ぎます。STRIDEは要素の種類ごとに当てるのが実務的で、外部とやり取りするプロセスには6分類すべてを、データフロー、データストア、外部エンティティには当てはまる分類だけを検討します。データフローには改ざんと情報漏えいとサービス妨害、データストアには改ざんと情報漏えいとサービス妨害、外部エンティティにはなりすましと否認、というように要素の性質に合う分類へ絞ると、無駄なく見落としを減らせます。権限昇格への対策として繰り返し出てくる最小権限は、脅威モデリング全体を通じて効く原則です。
あわせて読みたい
最小権限の原則(Least Privilege)。なぜ権限を絞ることが最強の防御の一つなのか
対策を紐付けて優先度を付ける
脅威を挙げただけでは設計は変わりません。3番目の問いである、どう対処するか、へ進みます。挙げた脅威それぞれに対して、対策を紐付けるか、リスクを受容するか、設計を変えて脅威そのものをなくすかを決めます。OWASP Threat Modeling Cheat Sheetは、脅威の特定のあとに対応と緩和策を検討し、最後に見直しと妥当性確認を行う流れを示しています。
ここで、洗い出したすべての脅威に同じ労力をかけるのは現実的ではありません。影響の大きさと起こりやすさで優先度を付け、上から対処します。優先度付けの考え方は、既知の脆弱性を悪用の実績や予測で並べ替える運用と発想が共通しており、限られた工数をどこへ向けるかという判断の土台になります。
あわせて読みたい
脆弱性対応の優先順位付け。CVSSだけに頼らないEPSSとCISA KEVの使い方
最後の問い、十分にやれたか、では、図と脅威の一覧を関係者で見直します。OWASPは、脅威モデルを開発チームやセキュリティ担当だけでなく、すべての関係者でレビューすべきだとしています。設計が変われば図も脅威も変わるため、脅威モデリングは一度で終わらせず、設計の節目ごとに更新していく作業として位置づけます。
STRIDE以外の手法との関係
脅威モデリングの手法はSTRIDEだけではありません。攻撃者の目的から分析するPASTA、プライバシーに焦点を当てたLINDDUN、攻撃の道筋を木構造で描くAttack Treeなど、目的に応じた手法があります。STRIDEは技術的な脅威を分類に沿って見落としを減らしながら拾うのに向き、入門にも実務にも広く使われています。どれか一つが正解ではなく、対象と目的で選ぶか組み合わせます。
なお、MITRE ATT&CKはSTRIDEと役割が異なりますが、対立するものではなく補い合います。STRIDEはアーキテクチャの要素から脅威の分類を導く手法で、ATT&CKは実在する攻撃者の戦術と技術を体系化した知識ベースです。STRIDEで洗い出した脅威に対し、ATT&CKは具体的な攻撃シナリオや、どこで何を検知すべきかという要件を補います。両者を併せると、設計上の弱点と現実の攻撃手口の両面から検討できます。OWASP Top 10は、代表的なWebアプリケーションのセキュリティリスクをまとめた啓発文書で、何が問題になり得るかを考える際の具体的なチェック材料になります。
あわせて読みたい
OWASP Top 10とは。開発者が押さえるべきWebの代表的リスクと対策を一気に理解する
ツールと始め方
作業を支援するツールもあります。Microsoft Threat Modeling ToolはSDLの一部として提供され、図を描くと要素に応じた脅威候補を自動で挙げ、対策の管理まで行えます。OWASP Threat Dragonはオープンソースの脅威モデリングツールで、STRIDEをはじめLINDDUNなどの手法に対応し、図の作成とルールに基づく脅威の生成を支援します。Web版とデスクトップ版があり、無償で試せます。
ただしツールは必須ではありません。OWASPも、まずはホワイトボードや紙で始めてよいという立場です。過度に複雑な図を作ることが目的ではなく、チームで同じ絵を見ながら、何が問題になり得るかを言葉にすることに価値があります。慣れてきたら、図の資産化や脅威の追跡のためにツールを導入すると効果が続きます。
脅威モデリングを始めるときの確認
- 対象システムをプロセス、データストア、データフロー、外部エンティティに分解してデータフロー図を描いたか
- 信頼のレベルが変わる位置に信頼境界を引き、境界をまたぐデータフローを把握したか
- プロセスには6分類すべてを、データフロー、データストア、外部エンティティには当てはまる分類を当てて、なりすまし、改ざん、否認、情報漏えい、サービス妨害、権限昇格を検討したか
- 洗い出した脅威に対策を紐付け、受容、緩和、設計変更のいずれかを決めたか
- 影響と起こりやすさで優先度を付け、上位から対処する計画にしたか
- 図と脅威の一覧を開発とセキュリティ以外の関係者も含めて見直したか
- 設計が変わったら脅威モデルを更新する運用にしたか
まとめ
脅威モデリングは、動くコードができる前に設計の弱点を洗い出し、対策を先回りで組み込む作業です。STRIDEはそのための6分類のニーモニックで、なりすまし、改ざん、否認、情報漏えい、サービス妨害、権限昇格の各分類が、真正性、完全性、否認防止、機密性、可用性、認可という守るべき特性の裏返しに対応します。進め方は、データフロー図を描いて信頼境界を引き、各要素の種類に応じてSTRIDEの分類を当てて脅威を挙げ、対策を紐付けて優先度を付ける、という順序です。信頼境界を越えるデータフローに重点を置くと効率よく脅威を拾えます。OWASPの4つの問いを骨格に、まずはホワイトボードから一巡させ、設計の節目ごとに更新していくことで、セキュリティを後付けの検査ではなく設計の一部として扱えるようになります。
出典・参考
関連する記事
情報セキュリティを機密性と完全性と可用性で整理する考え方
情報セキュリティの土台となる機密性、完全性、可用性の3要素が何を守るのかを定義から整理し、暗号化やバックアップといった対策がどの要素に効くか、3つが緊張関係に立つ場面、真正性などの追加要素までを、これから学ぶ人向けにNISTやJIS Q 27000の一次情報をもとに説明します。
DevSecOps入門。CI/CDにセキュリティを組み込むSAST・DAST・SCA・シークレットスキャン
セキュリティを開発の最後の検査にせず、CI/CDに自動チェックとして組み込む考え方を解説します。SAST・DAST・SCA・シークレットスキャンの役割の違いと、シフトレフトを現場で回す導入順序・判断基準を具体的にまとめます。
OWASP Top 10とは。開発者が押さえるべきWebの代表的リスクと対策を一気に理解する
Webアプリケーションの代表的なセキュリティリスクをまとめたOWASP Top 10について、その位置づけ、各カテゴリで何が問題になりどう防ぐか、そして開発プロセスへの組み込み方までを、開発者目線で具体例つきに解説します。


