Mímisbrunnr知恵の泉

← サイバーセキュリティ 一覧

🎓 レベル:標準 | 重要度:A(必須) 📎 前提:情報セキュリティとは(CIAとAAA)

要点(BLUF)

概念:守る前に「何が起こりうるか」を書き出す

脅威モデリングは、システムを作る・変える前に「どの資産が、誰から、どんな脅威にさらされるか」を構造的に列挙する作業です。攻撃ツールは使いません。設計図(データの流れ・信頼境界)を眺めて、起こりうる悪いことを先に洗い出します。

問いはシンプルに4つです。

  1. 何を作っているか(データフロー図)
  2. 何がうまくいかないか(脅威の列挙)
  3. どう対処するか(緩和策)
  4. 十分にやれたか(検証)

この「2. 何がうまくいかないか」を漏れなくやるための道具が STRIDE です。

仕組み:STRIDE で脅威の型を網羅する

STRIDE は Microsoft が体系化した分類で、6つの頭文字が脅威の型を表します。守りたい性質(CIA/AAA)と裏表の関係にあります。

記号脅威の型侵される性質守る側の対策の方向
S Spoofingなりすまし真正性(認証)強い認証・MFA・署名
T Tampering改ざん完全性ハッシュ・署名・入力検証
R Repudiation否認(やってないと言い張る)監査可能性監査ログ・タイムスタンプ
I Information Disclosure情報漏えい機密性暗号化・アクセス制御
D Denial of Serviceサービス妨害可用性冗長化・レート制限
E Elevation of Privilege権限昇格認可最小権限・権限分離

各コンポーネントに対して「ここで S は起こるか? T は?…」と順に当てていけば、思いつきに頼らず網羅的に脅威を出せます。

図解:信頼境界と攻撃面

脅威は信頼境界(trust boundary)を越えるところに集中します。境界とは「ここから先は信用度が変わる」線で、ユーザー入力がアプリに入る点、アプリがDBに触る点などです。

flowchart LR
    U["利用者(外部・低信頼)"] -->|"入力(境界を越える)"| W["Webアプリ"]
    W -->|"クエリ(境界を越える)"| DB["データベース(内部)"]
    W --> EX["外部API(第三者)"]
    classDef boundary stroke-dasharray: 5 5
    U:::boundary
    EX:::boundary

境界を越える矢印の一本一本が攻撃面です。攻撃面を小さく保つ=不要な入口・機能・公開ポートを減らすことが、最も費用対効果の高い防御になります。

防御側の使い方:設計レビューに組み込む

脅威モデリングは特別なイベントではなく、設計レビューに溶かし込むのが実務です。

攻撃の再現は不要です。「この境界でなりすまし(S)が起きたら何が壊れるか」を言葉で詰めるだけで、必要な認証・暗号・検証が見えてきます。

なぜ安全か:漏れを「型」で潰すから

人間は自分が想像できる攻撃しか思いつけません。STRIDE のような型のチェックリストは、想像力の偏りを補正し「考え忘れ」を減らします。さらに攻撃面を小さく保てば、そもそも守るべき入口が減るので、同じ労力でより堅くなります。

仕組みの直観

脅威モデリングは家を建てる前の防犯設計です。完成後に泥棒の手口を一つずつ試すのではなく、図面の段階で「窓はここ、勝手口はここ、塀の死角はここ」と入口(攻撃面)を数え、それぞれに鍵や照明(緩和策)を割り当てます。入口が少ない家ほど、見張る場所も少なくて済みます。

⚠️ よくある誤解・設定ミス

対応 lab

机上手法のため専用 lab はありません。STRIDE の T(改ざん)が実際に検知される様子は、第2章の security-study/labs/symmetric_aead_demo.py(改ざん検知)や digital_signature_demo.py(なりすまし拒否)で具体的に確認できます。

関連