脅威モデル(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 の要素別分析を実施する点です。正規の要素→脅威マッピングを適用し、ログ / 監査ストアに条件付きで否認を追加し、そして最も有用なこととして、信頼境界を越えるすべてのフローにフラグを立てます——そこになりすまし・改ざん・情報漏洩が集中するためです。

threatmodel·§
↘ preview
100%
Web App STRIDE threat model: 1 external entity, 1 process(es), 2 data store(s), 3 data flow(s). 3 boundary-crossing flow(s): User→1.1, 1.1→D1, 1.1→D2. User (external) → Spoofing, Repudiation. 1.1 (process) → Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege. D1 (store) → Tampering, Information disclosure, Denial of service. D2 (store) → Tampering, Repudiation, Information disclosure, Denial of service. Web App Internet DMZ Internal HTTPS Request Lookup Auth Event User SR 1.1Web Server STRIDE User DB TID Audit TRID
UTF-8 · LF · 11 lines · 261 chars✓ parsed·10.0 ms·7.5 KB SVG

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.12.3);外部 / ストア ID は通常短いスラグ(UserD1)。
  • <-> フローは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.