ストーリー
高橋アーキテクトがデータフロー図を描き始めました。
脅威モデリングとは
脅威モデリングとは、システムに対する潜在的な脅威を特定・評価し、対策を計画するプロセスです。設計段階で実施することで、実装後に脆弱性が見つかるリスクを大幅に減らせます。
脅威モデリングの4つのステップ
graph TD
S1["1. システムの分解<br/>データフロー図(DFD)の作成"]
S2["2. 脅威の特定<br/>STRIDEフレームワークの適用"]
S3["3. リスクの評価<br/>DREADスコアリング"]
S4["4. 対策の計画<br/>セキュリティ要件の定義"]
S1 --> S2 --> S3 --> S4
Step 1: システムの分解 - DFD(データフロー図)
脅威モデリングの第一歩は、システムのデータの流れを可視化することです。
DFDの4つの要素
| 要素 | 記号 | 説明 |
|---|---|---|
| 外部エンティティ | 四角形 | システム外のアクター(ユーザー、外部API) |
| プロセス | 円形 | データを処理するコンポーネント |
| データストア | 二重線 | データの保存場所 |
| データフロー | 矢印 | データの流れ |
| 信頼境界 | 破線 | セキュリティドメインの境界 |
graph TD
Browser["ブラウザ<br/>(外部エンティティ)"]
GW["API Gateway<br/>(プロセス)"]
App["App Server<br/>(プロセス)"]
DB[("Database<br/>(データストア)")]
Browser -->|"HTTPS"| GW
subgraph trust["信頼境界内"]
GW --> App
App --> DB
end
classDef external fill:#ffd,stroke:#cc0
classDef process fill:#ddf,stroke:#33c
classDef datastore fill:#dfd,stroke:#3c3
class Browser external
class GW,App process
class DB datastore
Step 2: STRIDEフレームワーク
STRIDEは6種類の脅威カテゴリを定義し、各コンポーネントに対して体系的に脅威を洗い出すフレームワークです。
6つの脅威カテゴリ
| カテゴリ | 英語 | 説明 | 対策の方向性 |
|---|---|---|---|
| S | Spoofing(なりすまし) | 他者になりすます | 認証 |
| T | Tampering(改ざん) | データを不正に変更する | 完全性チェック |
| R | Repudiation(否認) | 行為を否定する | 監査ログ |
| I | Information Disclosure(情報漏洩) | 機密情報の露出 | 暗号化 |
| D | Denial of Service(サービス拒否) | サービスを利用不能にする | 可用性対策 |
| E | Elevation of Privilege(権限昇格) | 不正に権限を取得する | 認可 |
STRIDEの適用例
// ECサイトの注文APIに対するSTRIDE分析
interface StrideAnalysis {
component: string;
threats: {
category: "S" | "T" | "R" | "I" | "D" | "E";
description: string;
mitigation: string;
}[];
}
const orderApiAnalysis: StrideAnalysis = {
component: "POST /api/orders",
threats: [
{
category: "S",
description: "他人のアカウントで注文を作成される",
mitigation: "JWT認証 + セッション検証",
},
{
category: "T",
description: "注文金額が改ざんされる",
mitigation: "サーバーサイドで価格を再計算",
},
{
category: "R",
description: "注文を行ったことを否認される",
mitigation: "注文の監査ログを記録",
},
{
category: "I",
description: "他の顧客の注文情報が漏洩する",
mitigation: "認可チェック + レスポンスフィルタリング",
},
{
category: "D",
description: "大量の注文リクエストでAPIがダウン",
mitigation: "レートリミット + キュー処理",
},
{
category: "E",
description: "一般ユーザーが管理者APIにアクセス",
mitigation: "RBAC + エンドポイント別の認可",
},
],
};
STRIDE-per-Element
各DFD要素に対して、関連するSTRIDEカテゴリを分析します。
| DFD要素 | S | T | R | I | D | E |
|---|---|---|---|---|---|---|
| 外部エンティティ | o | o | ||||
| プロセス | o | o | o | o | o | o |
| データストア | o | o | o | |||
| データフロー | o | o | o |
プロセスは全てのSTRIDEカテゴリの対象となるため、最も注意が必要です。
脅威モデリングの実施タイミング
| タイミング | 目的 |
|---|---|
| 新規プロジェクト開始時 | 全体アーキテクチャの脅威を分析 |
| 大きな機能追加時 | 新しいデータフローの脅威を分析 |
| 外部連携の追加時 | 信頼境界をまたぐ通信の脅威を分析 |
| セキュリティインシデント後 | 既存の脅威モデルの見直し |
まとめ
| ポイント | 内容 |
|---|---|
| 脅威モデリング | 設計段階で脅威を体系的に洗い出す |
| DFD | データの流れと信頼境界を可視化 |
| STRIDE | 6カテゴリで漏れなく脅威を分類 |
| 適用タイミング | 新規開発・大規模変更時に実施 |
チェックリスト
- 脅威モデリングの4つのステップを理解した
- DFDの4つの要素を把握した
- STRIDEの6つのカテゴリを暗記した
- STRIDE-per-Elementの適用方法を理解した
次のステップへ
次は「攻撃ツリーとリスク評価」を学びます。特定した脅威の深刻度をDREADで定量的に評価する方法を身につけましょう。
推定読了時間: 30分