はじめに
『脅威モデリング セキュアなソフトウェアを作るために』(原題:Threat Modeling: Designing for Security)を読みました。
著者はAdam Shostackほかで、設計フェーズからセキュリティを組み込むための体系的な方法論を解説した一冊です。SCの勉強をしていて脅威モデリングという概念は知っていたものの、「実際どうやるのか」という実務レベルの理解が欲しくて手を伸ばしました。
同業エンジニアに向けて、本書のエッセンスをまとめます。
本書の構成
| 章 | テーマ |
|---|---|
| はじめに | 脅威モデリングの基礎・セキュリティ用語 |
| 第1章 | システムのモデリング(DFD・シーケンス図・アタックツリー等) |
| 第2章 | 脅威のモデル化・一般化アプローチ |
| 第3章 | 脅威モデリングの方法論(STRIDE・PASTAなど) |
| 第4章 | 脅威モデリングの自動化 |
| 第5章 | 継続的脅威モデリング(CTM) |
| 第6章 | 脅威モデリングチャンピオンとしての役割 |
| 付録A | 実例 |
| 付録B | 脅威モデリング宣言 |
脅威モデリングとは何か
本書の定義によれば、**脅威モデリングとは「システムを分析し、望ましくない設計の選択に起因する弱点を探すプロセス」**です。
セキュリティスキャナーを走らせてチェックリストを埋める作業ではなく、論理的で知的なプロセスです。チーム全員が参加し、議論を生み出し、設計を明確化することで初めて効果を発揮します。
「garbage in, garbage out(GIGO)」
システムに関する不正確な情報を元に脅威モデリングを行っても、不正確な結果しか得られない。
なぜ必要なのか
- 設計フェーズで問題を発見できれば、リリース後の修正コストと比べて圧倒的に安く済む
- クリーンなアーキテクチャ・明確な信頼境界・集中的なセキュリティテストにつながる
- チームにセキュリティを意識する習慣を根付かせる
なお本書は「コンプライアンスのためにやる」という姿勢を明確に否定しています。形式的な実施は意味がないどころか、やった気になる分だけ有害とすら書いています。
主要なセキュリティ概念の整理
本書の「はじめに」で重要なセキュリティ用語が丁寧に整理されます。
弱点(Weakness) → 悪用可能性(Exploitability)→ 脆弱性(Vulnerability)
↓
攻撃者(Adversary)が脅威(Threat)を発生させ → 損失(Loss)が生じる
これらを**CIAトライアド(機密性・完全性・可用性)**で評価し、リスクとして定量化します。
リスクの計算手法として以下の3つが紹介されています。
- CVSS(Common Vulnerability Scoring System):0.0〜10.0の数値で脆弱性の深刻度を算出
- DREAD:Damage / Reproducibility / Exploitability / Affected users / Discoverabilityの5軸で定性評価
- FAIR:財務的インパクトに着目した定量的リスクモデリング(経営レイヤー向け)
CVSSは「重大度」を測るものであり、「リスク」ではないという指摘が印象的でした。攻撃者がいつ動くかやリソースの価値は含まれていないため、CVSSスコアだけでリスク管理をするのは不十分です。
第1章:システムのモデリング
脅威モデリングの第一歩は、システムを適切に抽象化することです。本書では以下のモデルタイプを解説しています。
データフロー図(DFD)
最も広く使われる形式です。要素・コンテナ・外部エンティティ・データストア・データフロー・信頼境界の6種類の記号でシステムを表現します。
DFDには**レベル(L0〜Ln)**があり、L0がコンテキストビュー(全体像)、L1以降が詳細化という構造をとります。
シーケンス図
「誰が何をいつ呼び出すか」という時系列の相互作用を表現します。DFDでは見えにくいビジネスロジックの欠陥やTOCTOU(Time of Check Time of Use)のような競合状態も可視化できます。本書では「シーケンス図はDFDと対等なパートナーである」という立場をとっています。
アタックツリー
攻撃者視点で「目的を達成するための手段の木」を描きます。ルートノードが攻撃ゴール、リーフノードが具体的なアクションです。MITRE ATT&CKフレームワークとの組み合わせが有効です。
第3章:脅威モデリングの方法論
STRIDE
Microsoftが提唱した、脅威を6カテゴリに分類するフレームワークです。
| カテゴリ | 脅威の例 |
|---|---|
| Spoofing(なりすまし) | 他人のIDでの認証 |
| Tampering(改ざん) | データの不正書き換え |
| Repudiation(否認) | 「やっていない」と主張する行為 |
| Information Disclosure(情報漏洩) | 機密データへの不正アクセス |
| Denial of Service(DoS) | サービス停止 |
| Elevation of Privilege(権限昇格) | 不正な管理者権限取得 |
DFDの各要素にSTRIDEを適用することで、系統的に脅威を洗い出せます。
その他の手法
- PASTA(Process for Attack Simulation and Threat Analysis):7段階のプロセスでビジネスリスク中心に分析
- LINDDUN:プライバシー脅威に特化したフレームワーク
- VAST(Visual, Agile, Simple Threat modeling):アジャイル開発向け
方法論に「正解はない」とされており、チームや組織に合ったものを選ぶことが重要だと本書は主張しています。
第4章・第5章:自動化と継続的脅威モデリング
コードによる脅威モデリング
Infrastructure as Codeの考え方と同様に、脅威モデルもコードとして管理することで、CI/CDパイプラインに組み込める可能性があります。
継続的脅威モデリング(CTM)
アジャイル開発との親和性を高めるため、変更が発生するたびに脅威モデルを更新するというアプローチです。Autodeskが提唱したCTM手法では、コードの変更と脅威モデルを連動させることで、設計の陳腐化を防ぎます。
脅威モデルを「一度作って終わり」ではなく「生きたドキュメント」として維持することが、現代の開発体制では不可欠です。
セキュアな設計原則
本書の「はじめに」では、Saltzer and Schroederの古典的論文(1975年)をもとに、実践的な設計原則が整理されています。
- ゼロトラスト:事前の信頼を置かず、すべてのアクセスを毎回検証する
- 最小権限:必要最小限のアクセス権のみを付与する
- 多層防御:単一の防御に頼らず、複数の制御層を重ねる
- ビルドイン、ボルトオンではない:セキュリティは後付けではなく設計段階から組み込む
- フェイルセキュア:障害が発生したとき、安全側に倒れる設計にする
- 不明瞭さに頼らない:実装の詳細が公開されても安全であるように設計する
特に「ビルドイン、ボルトオンではない」という原則はシステム設計全般に刺さります。TLS対応・認証・ロギングなどは最初から設計に含めるべきであり、後から追加しようとすると必ずどこかに穴が生まれます。
所感
よかった点
本書の最大の強みは**「なぜやるのか」から「どうやるのか」までを一冊で押さえている**点です。脅威モデリングが「形式的なチェック」ではなく「設計の質を高めるための思考活動」であるという主張が一貫しており、読後に実務に活かすイメージが持ちやすいです。
セキュリティの概念(弱点・脆弱性・リスク・深刻度)の整理が丁寧なため、SC試験の学習と並行して読むと相乗効果があります。
気になった点
訳文が機械翻訳ベースかつ日本語版が存在しないため(今回読んだのも翻訳済み版ではなく自力で和訳されたもの)、日本語で読もうとすると一定のコストがかかります。英語で読むなら問題ありません。
また、実装よりも設計・プロセスに重点が置かれているため、「今すぐコードに活かせるTips」を期待すると肩透かしをくらう可能性があります。設計・アーキテクチャに関心のあるエンジニアに向いている本です。
まとめ
脅威モデリングは特別なセキュリティ専門家だけの作業ではなく、設計に関わるすべてのエンジニアが参加すべき活動です。本書はその入り口として非常に体系的にまとまっており、特にシステム設計・アーキテクチャに関わる方にはおすすめできます。
SCの学習、Clean Architectureの実践、CI/CDパイプラインの整備といった文脈と非常に相性がよく、一読の価値があります。