ステップ 1 - 設計
設計フェーズは、脅威モデリング アクティビティの出発点となります。 何を構築するか、構築するには何を使用するかについて、できるだけ多くのデータを収集します。
目標
- システムの動作を明確に把握する
- システムで使用されるすべてのサービスの一覧を作成する
- 環境および既定のセキュリティ構成に関するすべての前提を列挙する
- 適切なコンテキストの深さレベルを使用するデータフロー ダイアグラムを作成する
重要
このフェーズを完了しないと、システムのセキュリティ設計に関する重要な考慮事項が見過ごされる場合があります。それによって、顧客が危険にさらされるおそれがあります。
ご使用のシステムについて質問する
システムに関してできるだけ多くの質問をします。 考慮すべきいくつかの質問を次に示します。
領域 | 質問 |
---|---|
システムの説明 | 何をするシステムですか? サービスによって処理されるビジネス プロセスは何ですか? それらは明確に定義されていますか? |
システム環境 | システムはクラウドとオンプレミスのどちらで構築されますか? どのオペレーティング システムでビルドされますか? コンテナーを使用しますか? システムはアプリケーションですか、サービスですか、それともまったく異なるものですか? |
シナリオ | システムはどのように使用されますか? どのような方法では使用しませんか? |
アクセス許可 | システムには、スクリプト実行、データ、またはハードウェア アクセスに関する要件がありますか? そうである場合、それらはどのようなものですか? |
クラウド プロバイダー | システムはどのクラウド プロバイダーを使用しますか? プロバイダーによってどのような既定のセキュリティ構成オプションが提供されますか? それらのオプションは、システムのセキュリティ要件にどのように影響しますか? |
オペレーティング システム | システムに使用するオペレーティング システムは何ですか? オペレーティング システムによってどのような既定のセキュリティ構成オプションが提供されますか? それらのオプションは、システムのセキュリティ要件にどのように影響しますか? |
ファーストパーティとサードパーティ | どのようなファーストパーティとサードパーティのサービスをシステムに使用しますか? それらによって、どのような既定のセキュリティ構成オプションが提供されますか? それらのオプションは、システムのセキュリティ要件にどのように影響しますか? |
取引先企業 | システムで使用されるアカウントの種類 (ユーザーや管理者など) は何ですか? これらのアカウントはローカルまたはクラウド対応のどちらですか? 必要なアクセス権とその理由は何ですか? |
ID およびアクセス制御 | システムでは、これらのアカウントをどのようにセキュリティで保護しますか? Microsoft Entra ID に依存しますか? アクセス制御リスト (ACL)、多要素認証 (MFA)、セッション制御などの機能を使用しますか? |
トークンとセッション | システムで SOAP や REST などの要求を処理しますか? さまざまなセッションをどのように処理しますか? |
バイパス | システムでは、バックドアが使用されるか、または必要ですか? その場合、バイパスはどのように機能しますか? |
ログ記録、監視、バックアップ | セキュリティ イベントのログ、異常の監視、システム データのバックアップのためにシステムで使用されるメカニズムは何ですか? どのイベントの種類をキャプチャしますか? |
Network | 使用されるすべての侵入検出、および保護システムはどのようなものですか? 通信はどのように暗号化されますか? |
Data | システムはどのような種類のデータを作成または処理しますか? データ分類の種類は何ですか? システムではどのようにデータ ソースを信頼しますか? どのようにデータを解析しますか? どのような入力と出力の動作が予想されますか? 検証をどのように処理しますか? すべての状態にわたってデータはどのように暗号化されますか? |
シークレットの管理 | システムはキー、証明書、資格情報をどのように処理しますか? |
重要
このリストは広範囲にわたっていますが、すべてを網羅したものではありません。 同僚やセキュリティ チームと相談して、システムの関連するすべてのコンテキストをキャプチャします。
Note
専任のセキュリティ チームがある場合は、初期設計を検討するために、チームとのホワイトボードを使った説明のセッションをスケジュールします。 この連絡先を使用すると、かなりの時間を節約できます。
データフロー ダイアグラムを作成する
回答を使用してデータフロー ダイアグラムを作成します。 そのダイアグラムは、データのライフサイクルの各ステージにわたるデータを示し、信頼ゾーンにおける変更点を含めます。 以下に例を示します。
- Azure でホストされている Web アプリケーションにサインインしてデータにアクセスする、人間のユーザー
- Web アプリケーションで使用されるエラスティック リソースの既定のセキュリティ構成を変更する管理者
- Web アプリケーションのアクティビティ ログを監視し、異常を管理者に通知する自動化された毎日のスクリプト
Microsoft のエンジニアリング チームは、セキュリティ コンプライアンス要件の一部としてデータフロー ダイアグラムを送信します。 これらの図を使用すると、セキュリティに関する会話をより簡単に行うことができます。
ダイアグラム作成ツール
Microsoft のエンジニアは、現在利用できる 2 つのツールのいずれかを使用することをお勧めしています。
- Threat Modeling Tool
- Visio
ダイアグラムの要素
データフロー ダイアグラムは、特定のシステムのデータフローを示しています。 通常は、ユーザーまたはデータ ストアからの要求で始まり、データ ストアまたは分析サービスで終了します。 データフロー ダイアグラムでは、それぞれが表す要素を示すために、異なる図形を使用します。
要素 | 図形 | 定義 |
---|---|---|
プロセス | ![]() |
入力の受け取り、変更、出力へのリダイレクトを行うタスク。 |
データ ストア | ![]() |
永続的および一時的なデータ ストレージ (Web キャッシュ、Azure マネージド データベースなど)。 |
外部エンティティ | ![]() |
直接制御できないタスク、エンティティ、またはデータ ストア (ユーザー、サードパーティの API など)。 |
データフロー | ![]() |
プロセス、データ ストア、外部エンティティの間でのデータ移動 (接続文字列やペイロードなど)。 |
信頼境界 | ![]() ![]() |
信頼ゾーンは、システムでのデータの流れに応じて変化します (ユーザーがインターネットを使用して、セキュリティで保護された企業ネットワークにアクセスする場合など)。 |
データフロー ダイアグラムの要素には、要素がシステム内でどのように使用され、どのようにセキュリティ保護されているかを理解するのに役立つコンテキストも必要です。
データフロー ダイアグラムに含まれる情報
データフロー ダイアグラムに含める情報の量は、いくつかの重要な要因によって異なります。
要因 | 説明 |
---|---|
構築するシステムの種類 | 機密データを処理しない、または内部でのみ使用されるシステムは、外部に公開されているシステムと同じ程度のコンテキストを必要としない場合があります |
セキュリティ チームからの必須コンテキスト | セキュリティ チームにとって、脅威モデルに何を求めるかは明確です。 セキュリティ チームと相談して必要な深度レイヤーを確認します |
適切なコンテキストを含めないと、セキュリティ レビューが不完全になる可能性や、潜在的に脆弱なシステムになる可能性があります。
ダイアグラムのレイヤー
次の 4 つのコンテキスト深度レイヤーのいずれかを選択すると、含める情報量を理解するのに役立ちます。
深度レイヤー | Title | 説明 |
---|---|---|
0 | システム | あらゆるシステムの出発点です。 データフロー ダイアグラムには、主要なシステム パーツに加えて、それらの動作および相互のやりとりの方法を理解するのに役立つ十分なコンテキストが含まれます。 |
1 | プロセス | その他のデータフロー ダイアグラムを使用して、システムの各パーツのデータフロー ダイアグラムに注目します。 すべてのシステムで (特に機密データが処理される場合)、このレイヤーを使用します。 このレイヤーのコンテキストは、脅威の特定、およびリスクを軽減または除去する方法の特定をより効率的に行うのに役立ちます。 |
2 | サブプロセス | システム パーツの各サブパーツのデータフロー ダイアグラムに注目します。 重要と見なされるシステムに使用されます。 たとえば、セキュリティで保護された環境用のシステム、機密性の高いデータを取り扱うシステム、高リスク評価を含むシステムなどがあります。 |
3 | 下位レベル | 非常に重要なシステムおよびカーネルレベルのシステムに注目します。 データフロー ダイアグラムでは、各サブプロセスが細部まで説明されます。 |
Note
ほとんどのデータフロー ダイアグラムには、レイヤー 0 と 1 の両方の深度レイヤーが含まれている必要があります。 セキュリティ チームと相談して必要なレイヤーの深度を確認します