脅威モデル(STRIDE DFD)
エンジンが要素ごとに STRIDE 脅威をマッピングし、すべての信頼境界を越えるフローにフラグを立てるセキュリティデータフロー図。
脅威モデルとは
脅威モデルは、信頼境界がアノテートされたセキュリティデータフロー図(DFD)です:外部エンティティ(ユーザー、サードパーティ)、プロセス(サービス)、データストア(データベース、ログ)、そしてそれらの間のフロー。Microsoft の STRIDE フレームワーク——なりすまし(Spoofing)、改ざん(Tampering)、否認(Repudiation)、情報漏洩(Information disclosure)、サービス拒否(Denial of service)、権限昇格(Elevation of privilege)——は各要素が直面する脅威を分類します。参照文献は Shostack, Threat Modeling: Designing for Security (2014) です。
Schematex の差別化ポイントは、エンジンが単なるボックス描画ではなく、STRIDE の要素別分析を実施する点です。正規の要素→脅威マッピングを適用し、ログ / 監査ストアに条件付きで否認を追加し、そして最も有用なこととして、信頼境界を越えるすべてのフローにフラグを立てます——そこになりすまし・改ざん・情報漏洩が集中するためです。
1. 最初の脅威モデル
threatmodel キーワード(エイリアス stride)、オプションのタイトルで始め、次に要素を宣言してフローを配線します:
threatmodel "Login flow"
external: User
process 1.1: Web Server
datastore D1: User DB
User -> 1.1 : "Login request"
1.1 -> D1 : Lookup各要素は kind: ID: Label(または kind: Label、id はラベルからスラグ化——external: Mobile App は id Mobile_App になる)です。フローは SOURCE -> TARGET : label で、ラベルは必須(越えるデータに名前を付ける)です。
2. 要素の種類とフロー
external: User # 外部エンティティ(攻撃者側)
process 1.1: Web Server # プロセス / サービス
datastore D1: User DB # データストア
datastore D2: Audit log # ログ / 監査ストア(条件付きで否認を追加)
User -> 1.1 : "HTTPS Request" # 有向フロー、引用符付きまたは裸のラベル
1.1 <-> D1 : Read/Write # <-> は2つの有向フローに展開- プロセス ID は多くの場合ドット付き DFD 番号(
1.1、2.3);外部 / ストア ID は通常短いスラグ(User、D1)。 <->フローは2つの有向フローに展開されます。- 名前 / id が
log|audit|journalにマッチするストア(または明示的なヒントを持つ)はログストアとして扱われます。
エンジンが適用するフロールール: ストア→ストアのフローなし(データストアはパッシブ)、外部→外部のフローなし、すべてのエンドポイントは宣言済みの要素でなければならない。
3. 信頼境界
boundary "Internet" { User }
boundary "DMZ" { 1.1 }
boundary "Internal" { D1, D2 }boundary "name" { id, id, … } は要素を信頼ゾーンにグループ化します。1つの要素は最大1つの境界に所属できます;メンバーは宣言済みでなければなりません。どの境界にも属さない要素は暗黙の非信頼ゾーンを共有します。
4. 計算された STRIDE 分析
これが差別化ポイントです。エンジンは要素別 STRIDE マッピングを適用します:
| DFD 要素 | 適用される脅威 |
|---|---|
| 外部エンティティ | S, R |
| プロセス | S, T, R, I, D, E |
| データストア | T, I, D(+ ログの場合 R) |
| データフロー | T, I, D |
- データストアの**否認(Repudiation)**は条件付きです——ログ / 監査 / ジャーナルストアに追加されます(Shostack の緑の「?」)。
- 境界越え:エンドポイントが異なる信頼ゾーンに属するフローはフラグが立てられます——そこになりすまし / 改ざん / 情報漏洩が集中するためです。同じ(または暗黙の)ゾーンにある2つの要素は越境しません。
各要素とフローは、data-* に適用可能な STRIDE カテゴリを持ち、分析を検査可能にします。
5. よくある間違い
# 誤り — ラベルのないフロー
User -> 1.1
# 誤り — ストア→ストア(データストアはパッシブ)
D1 -> D2 : x
# 誤り — 外部→外部
A -> B : x
# 誤り — 未知のフローエンドポイント
P -> Ghost : x
# 誤り — 2つの境界に属する要素
boundary "A" { P }
boundary "B" { P }すべてのフローにラベルが必要です;ストアと外部は同じ種類同士ではフローのパートナーになれません;エンドポイントは宣言済みでなければなりません;要素は最大1つの信頼境界に属します。重複する id は拒否されます。
6. 標準準拠
要素の語彙、DFD の慣例、要素別 STRIDE テーブルは Shostack (2014) と Microsoft 脅威モデリングツールに従っています。条件付きログストア否認と信頼境界越えの強調は、公開された STRIDE 要素別チャートと一致しています。
7. ロードマップ
保留中:DREAD / リスクスコアリング、脅威-軽減策リンケージ、マルチプロセス分解(DFD レベル)、アタックツリーへのドリルダウン。
Found this useful?
Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.