📑
脅威モデリングを体験してきました
脅威モデリングとは
モデルを作成してセキュリティーを理解することが脅威モデリングになります。
システムの潜在的な脅威をチームで議論して見つけていく活動で、脅威モデリングを行うことで以下メリットがあります。
- 設計段階でセキュリティーの要件が定義ができる
- チーム内でセキュリティー要件を深く理解できる
- コードを書く前に脅威を特定できる
進め方
取り組んでいる対象を知る
対象のシステムをダイヤフロム図を使って図に書き出しました。
ここでポイントは信頼境界(Trust Boundary)を明確に記載することです。
スマートフォンアプリとクラウドサーバー、セキュリティデバイスを連携させるスマートホームセキュリティシステムについて取り組みました。
- 赤マル箇所:
- プロセス:アプリケーション部分
- 四角で囲まれた箇所
- 外部エンティティ:コントロールできないもの(ブラウザ、sqlクライアント等)
- 点線で囲まれた箇所
- 信頼境界(TrustBoundary): ファイルアクセス、ファイアーウォール、認証、アクセス権限
- 青文字箇所
- データストア: 保存されたデータ
- 矢印
- データフロー: データの流れ
脅威・対策を考える
STRIDEで脅威を考えて、DREADでリスク分析を行いました。
STRIDEとは以下の頭文字を指します。
- なりすまし (Spoofing)
- 改ざん (Tampering)
- 否認(Repudiation)
- 漏洩 (Information Disclosure)
- DoS (Denial of Service)
- 権限昇格 (Elevation of Privilege)
DREADは以下の頭文字を指します。
手動で計算できますが、リスクレーティング計算機でリスクを計算することもできます。
- 潜在的な損害(Damage potential)
- 再現可能性(Reproductivity)
- 攻撃利用可能性(Exploitability)
- 影響ユーザー(Affected users)
- 発見可能性(Discoverability)
どこで何が起きるのかがある程度わかっていて、以下の表を使って脅威を特定しました。
?は場合によって脆弱性が起きることを表しています
なりすまし (Spoofing) | 改ざん (Tampering) | 否認(Repudiation) | 漏洩 (Information Disclosure) | DoS (Denial of Service) | 権限昇格 (Elevation of Privilege) | |
---|---|---|---|---|---|---|
プロセス | ⚫︎ | ⚫︎ | ⚫︎ | ⚫︎ | ⚫︎ | ⚫︎ |
外部エンティティ | ⚫︎ | ⚫︎ | ||||
データストア | ⚫︎ | ? | ⚫︎ | ⚫︎ | ||
データフロー | ⚫︎ | ⚫︎ | ⚫︎ |
ユーザー認証に着目して「脅威」、「対策」、「リスク分析」を行った時の写真です。
うまくいった点、そうでなかった点を考える
今回の体験ではチームで反省会はしなかったのですが、個人的に考えました。
うまくいった点
- ダイヤフロム図が適切な粒度でかけた(細かすぎず荒すぎずな粒度)
うまくいかなかった点
- STRIDEの「なりすまし (Spoofing)」と「漏洩 (Information Disclosure)」の線引きがうまくできなかった
感想
脅威モデリングの体験を通して、セキュリティーの議論ができていい刺激になりました。
また、セキュリティの脆弱性を事前に発見し、対策を考えることの重要性を実感しました。
今回はシステム全体の構成で脆弱性を考えましたが、機能単位で実施することもできるということなので開発工程に組み込んでいきたいと思いました。
Discussion