セキュリティ管理と構成を検証する
このガイドは、 Google Cloud 環境で攻撃をシミュレートしてセキュリティをプロアクティブにテストするセキュリティ エンジニアを対象としています。継続的なセキュリティ検証の取り組みを実装する方法について説明します。
Security Validation は、攻撃者の手法を模倣したアクションとスクリプトを使用して、 Google Cloud プロジェクトで検出アラートをトリガーします。継続的な運用により脆弱性が特定され、セキュリティ チームは、構成と制御が最新の脅威に想定どおりに対応できるようにすることで、リスクを軽減できます。
このジャーニーを正常に完了すると、セキュリティ ポスチャーの改善を測定可能な形で証明できます。また、新たに実装された検出ルールや統合が手動操作なしで正しく動作することも確認できます。
一般的なユースケース
このセクションでは、Security Validation の一般的なユースケースについて説明します。
セキュリティ ポスチャーの回帰を検出する
目的: 以前にブロックされた攻撃者の動作が環境内で正常に実行されたタイミングを特定します。
価値: 意図しない構成ドリフトをセキュリティ チームと運用チームに通知し、脆弱性が悪用される前に修正できるようにします。
セキュリティ管理のチューニングを検証する
目的: 新しく実装された検出ルールまたはプロダクト統合が想定どおりに動作することを確認します。
価値: ルールの更新や環境の変更によってセキュリティ ポスチャーが改善されたことを測定可能な証拠として提供し、チームが自信を持って新しいベースラインを確立できるようにします。
主な用語
セキュリティ検証コンテキスト: セキュリティ検証コンテキストは、セキュリティ テストの環境を設定します。使用するプロジェクト、テストを実行するアカウント、アクションに必要なその他の詳細を指定します。
Security Validation アクション: 実際の攻撃者の手法を模倣するように設計されたスクリプト。検出ルールをトリガーしてセキュリティ ポスチャーを検証するために使用されます。
ベースライン実行: 今後の実行を比較するための標準リファレンスとして使用される、特定の完了した Security Validation 実行。
モニタリング: セキュリティ検証アクションを実行し、定義されたベースラインに照らして結果を評価するスケジュール設定されたジョブ(API の
SecurityValidationJob)。ドリフト ステータス: 最近の実行がベースラインと一致しているか(正常)、偏差を示しているか(ドリフトが検出された)に基づく、モニターの健全性インジケーター。
相関ウィンドウ: 実行後の 12 時間。この期間中、システムは、実行されたアクションのメタデータ内のイベント フィルタ テンプレートに基づいて、関連するイベントと検出を検索して関連付けます。
モニタリング タイムアウト: 実行後にシステムがイベントと検出の相関関係を待機する最大時間。この時間が経過すると、最終的なドリフト ステータスが評価されます。このタイムアウトは、12 時間のより大きな相関ウィンドウ内で動作します。モニターが成功したと見なされるには、このモニターのタイムアウトに達する前に、期待される結果が観察される必要があります。このタイムアウトまでにチェックに合格しなかった場合、システムはモニターを
failedとしてマークします。この期間はデフォルトで 8 時間ですが、15 分から 10 時間の間で構成できます。
始める前に
次の設定と権限が適用されていることを確認します。
必要な設定
次の設定が完了していることを確認します。
テナントで Security Validation が有効になっている必要があります。
セキュリティ検証は、セルフマネージド プロジェクトでのみ機能します。
1 つまたは 2 つの Google Cloud プロジェクトが必要です。実行とターゲット設定の両方に同じプロジェクトを使用できますが、セキュリティを強化し、テストをクリーンに保ち、設定を簡単に管理できるように、別々のプロジェクトを使用することをおすすめします。
実行プロジェクト: Security Validation は、実行プロジェクトでセキュリティ テストを実行します。この処理には Cloud Run と Cloud Storage を使用します。これらのジョブとバケットは、検証サービスでのみ使用されます。他のユーザーにアクセス権を付与しないでください。
このプロジェクトで Cloud Run API、Resource Manager API、IAM API を有効にする必要があります。また、セキュリティ検証コンテキストを作成するには、
resourcemanager.projects.SetIamPolicy、storage.buckets.SetIamPolicy、storage.buckets.create、storage.buckets.deleteの権限が必要です。この権限を付与するロールの一覧については、IAM 権限のリファレンスをご覧ください。ターゲット プロジェクト: セキュリティ検証アクション スクリプトによって行われた API 呼び出しが動作する場所。アクションが成功するかどうかは、アクションで使用される必要な API がこのプロジェクトで有効になっているかどうか、また、セキュリティ検証コンテキストのサービス アカウントに必要な権限があるかどうかによって異なります。
サービス アカウント: 実行プロジェクトに 1 つ以上のサービス アカウントが必要です。これらのアカウントは、アクション スクリプトを実行します。特定のコンテキストでアクションを実行する必要があるユーザーは、そのコンテキストのサービス アカウントに対する
iam.serviceAccounts.actAs権限を持っている必要があります。
必要な権限
SecOps インスタンス プロジェクトで、次のいずれかの事前定義ロールを割り当てます。
chronicle.viewer: Security Validation のアクション、コンテキスト、ジョブ、実行リソースに対する読み取り専用権限。chronicle.editor: すべてのviewer権限と、セキュリティ検証のコンテキストとジョブを作成、更新、実行、削除する機能が含まれています。chronicle.admin: すべてのeditor権限と、カスタムのセキュリティ検証アクションを作成、更新、削除する機能(API のみ)が含まれます。
上記の事前定義ロールを使用していない場合は、カスタムロールを使用するか、chronicle.admin と同じ権限を含む chronicle.securityValidationAdmin ロールを割り当てることで、同等の権限を付与できます。
詳細については、必要なロールをご覧ください。
継続的なセキュリティ検証を実装する
セキュリティ ポスチャーの検証は、次のような構造化されたプロセスで行われます。
環境の定義
シミュレーションを実行してベースラインを確立する
シミュレーションを自動化してドリフトを検出する。
このワークフローにより、環境の進化に合わせてセキュリティ管理が効果的に維持されます。
Security Validation コンテキストを作成する
セキュリティ検証コンテキストは、セキュリティ テストの環境を設定します。使用するプロジェクト、テストを実行するアカウント、アクションに必要なその他の詳細を指定します。同じコンテキストを異なるアクションで再利用できます。
Security Validation コンテキストを作成する手順は次のとおりです。
[Security Validation] に移動し、[Execution Contexts] タブに移動します。
[Add Execution Context] をクリックします。
[Add Execution Context] ダイアログで、次の操作を行います。
[基本プロパティ] で、コンテキストの名前と説明を入力し、[次へ] をクリックします。
[環境設定] で、 Google Cloud プロジェクト ID、実行サービス アカウント、クリーンアップ サービス アカウントを入力します。[次へ] をクリックします。
action profile(アクション スクリプトの実行用)とsetup/cleanup profile(一部のアクションの一部であるセットアップ スクリプトとクリーンアップ スクリプトの実行用)には、別々のサービス アカウントを使用することをおすすめします。これらのサービス アカウントには、ターゲット プロジェクトで異なる権限を付与できます。[ランタイム変数] で、1 つ以上の変数を追加して、デフォルト パラメータを動的にオーバーライドします。Key-Value ペアを追加します。ここで、
keyはパラメータ名、valueはそのオーバーライド値です。[作成] をクリックします。
セキュリティ検証アクションを実行する
セキュリティ検証コンテキストに対してセキュリティ検証アクションを実行する手順は次のとおりです。
[Security Validation] に移動し、[Content Library] タブに移動します。
アクションを選択して [実行] をクリックします。
ダイアログで、作成した実行コンテキストを選択し、[今すぐ実行] をクリックします。
新しい実行が作成され、[実行履歴] タブに表示されます。
セキュリティ検証モニターを管理する
モニタリング機能を使用すると、成功したアクションを定期的に自動で再実行できます。手動介入なしでセキュリティ ポスチャーを継続的にモニタリングできます。
モニターを作成する
モニターは、正常に完了した実行からのみ作成できます。実行から Monitor を作成する手順は次のとおりです。
[Security Validation] に移動し、[Execution history] タブに移動します。
実行の実行 ID をクリックし、[モニターを作成] をクリックします。
省略可: [モニターを作成] ウィンドウで、モニターに名前を付けます。
モニター名を入力しない場合、モニターはモニター ID で参照されます。
このウィンドウに表示されるベースライン実行の詳細を確認します。
[次へ] をクリックします。
モニターの設定を構成します。
モニターは、特定の時間に実行することも、1 時間ごとに実行することもできます。
特定の時間に Monitor を実行するには、次の操作を行います。
[時間] プルダウンで、[特定の時間に実行] を選択します。
隣のテキスト ボックスに時刻を指定します。
[日数] オプションで、次のいずれかを選択します。
毎日: 毎日指定した時刻に実行されます。
曜日: 選択した曜日(月、水、金など)の指定した時刻にのみ実行されます。
日: 指定した日(15 日など)の指定した時刻に、月に 1 回実行されます。
[月] プルダウンで、[毎月](毎月実行する場合)または [特定の月] を選択して、Monitor を実行する月(1 月、4 月、7 月など)を指定します。
[タイムゾーン] プルダウンで、必要なタイムゾーンを選択します。このフィールドのデフォルトは、ユーザー設定で設定されたタイムゾーンです(ブラウザ設定とは異なる場合があります)。このデフォルト設定を確認または変更するには、[Profile] > [User Preferences] > [Localization] > [タイムゾーン] に移動します。
[次へ] をクリックします。
Monitor を 1 時間間隔で実行するには、次の操作を行います。
[時間] プルダウンで、[1 時間ごとに繰り返す] を選択します。
[hour(s)] フィールドにモニター サイクルの繰り返し頻度を設定し、[minute(s)] フィールドに特定の分マークを設定します。たとえば、1 時間 30 分に設定すると、モニターは 1 時間ごとに 30 分経過した時点で実行されます(90 分ごとに実行されるわけではありません)。
[営業時間] オプションで、次のいずれかを選択します。
1 日中: モニターは、指定された頻度に基づいて、1 日中 24 時間実行されます。
開始時間と終了時間: モニターは、指定された開始時間と終了時間の範囲内(午前 8 時から午後 5 時など)でのみ実行されます。
[日数] オプションで、次のいずれかを選択します。
毎日: 毎日指定した時刻に実行されます。
曜日: 選択した曜日(月、水、金など)の指定した時刻にのみ実行されます。
日: 指定した日(15 日など)の指定した時刻に、月に 1 回実行されます。
[月] プルダウンで、[毎月](毎月実行する場合)または [特定の月] を選択して、モニターを実行する月(1 月、4 月、7 月など)を指定します。
[タイムゾーン] プルダウンで、必要なタイムゾーンを選択します。このフィールドのデフォルトは、ユーザー設定で設定されたタイムゾーンです(ブラウザ設定とは異なる場合があります)。このデフォルト設定を確認または変更するには、[Profile] > [User Preferences] > [Localization] > [タイムゾーン] に移動します。
[次へ] をクリックします。
[期待される結果] で、必要に応じて条件をオンまたはオフにします。少なくとも 1 つの条件を選択する必要があります。
アクションの結果がベースラインと一致する: 実行状態、結果、結果の理由がベースラインと一致するかどうかを評価します。チェックが true と評価されるには、3 つのパラメータがすべて一致する必要があります。
相関イベント プロダクトがベースラインと一致する:
相関イベントをプロダクト別にグループ化します。
現在の実行に、ベースラインにリストされているすべてのプロダクトに対して少なくとも 1 つのイベントがあることを確認します。
このチェックでは、ベースラインにイベントがないプロダクトのイベントは無視されます。
ベースラインに一致するイベントがタイムアウト前に到着しない場合、
falseと評価されます。
相関検出ルールのアラートがベースラインと一致する:
ルールとアラートの状態別に検出結果をグループ化します。
現在の実行に、ベースライン実行で検出されたルールからの検出が少なくとも 1 つあることを確認します。
ベースライン実行で検出がないルールの検出を無視します。
ベースラインに一致する検出がタイムアウト前に到着しない場合は、
falseと評価されます。
[作成] をクリックしてモニターを作成します。
モニターを表示して実行する
作成したモニターを表示する方法は次のとおりです。
[Security Validation] に移動し、[Monitors] タブに移動します。一部の列はデフォルトで非表示になっています。列の表示を管理するには、 [列マネージャー] をクリックします。
リストで特定のモニターを見つけます。
モニターのリンクをクリックして、モニターの詳細ページを開きます。
[今すぐ実行] をクリックして、モニターを実行します。
[Monitor の詳細] ページには、Monitor の概要が一元的に表示されます。これにより、モニターの全体的なステータスと健全性を一目で評価できます。Monitor に関する次の重要な情報が表示されます。
健康状態の概要
次の指標カードには、Monitor の安定性の概要が表示されます。
モニターのヘルス ステータス: 最終的なモニター結果(
Healthyなど)を含む最後の実行に基づく現在の状態と、その状態が維持されている期間が表示されます。最新の正常な結果または異常な結果: ベースラインから逸脱した最新の実行へのポインタを提供します。
結果の鮮度: 最終的なモニターステータスで最後に実行されてからの経過時間が表示されます。
期待される結果
このセクションでは、ベースライン実行から導出された成功基準を定義します。
アクションの結果と理由: ベースライン実行と一致するアクションの結果と理由(例:
NOT_BLOCKEDと付随する理由)。イベントを生成したプロダクト: ベースライン実行と一致する相関イベントのプロダクトのリスト。
アラート検出ルール: ベースライン実行と一致するアラート相関検出ルールのリスト。
[Monitor Results] テーブルには、モニターのすべての実行が表示されます。このテーブルは、テキスト検索、フィルタリング、列構成をサポートしています。
モニターを有効または無効にする
Monitor を有効または無効にするには、次の操作を行います。
[Security Validation] に移動し、[Monitors] タブに移動します。
[ステータス] 切り替えボタンをクリックして、モニターを有効または無効にします。または、[モニターの詳細] ページで [モニターを一時停止] または [モニターを再開] をクリックして、ステータスを変更することもできます。
Monitor を変更または削除する
Monitor を変更または削除する手順は次のとおりです。
[Security Validation] に移動し、[Monitors] タブに移動します。
変更するモニターの メニューをクリックします。
モニターを変更するには [モニターを編集] をクリックし、モニターを削除するには [モニターを削除] をクリックします。[モニターの詳細] ページで [モニターを編集] をクリックして変更することもできます。
[更新] または [確認] をクリックして変更を適用します。
Monitor の結果を確認する
Monitor のすべての実行を表示するには、次の操作を行います。
[Security Validation] に移動し、[Monitors] タブに移動します。
Monitor から メニューをクリックします。
[すべての結果を表示] をクリックします。[実行履歴] ページが表示されます。
実行がフィルタされ、その特定のモニターに関連付けられているすべての実行が表示されます。
前回の実行結果を表示
Monitor の最後の実行結果を表示するには、次の操作を行います。
[Security Validation] に移動し、[Monitors] タブに移動します。
Monitor から メニューをクリックします。
[前回の実行結果を表示] をクリックして、[実行の詳細] を開きます。
その Monitor で実行された最新の実行の詳細が表示されます。
実行結果を確認する
実行した Security Validation アクションは、[実行履歴] タブで確認できます。実行結果を確認するには、次の操作を行います。
[セキュリティ検証] に移動し、[実行履歴] タブに移動して、実行ステータスをモニタリングします。
[実行ステータス] 列には、実行が成功したか、エラーが発生したかが表示されます。成功すると、Google SecOps でセキュリティ検証アクションによってトリガーされた生成イベントと検出結果を表示できます。
実行 ID をクリックして、実行の詳細を表示します。
[アクション実行の詳細] ページには、検証アクションのステータス、結果、詳細な分析が表示されます。このページでは、アクションのアクティビティによってトリガーされた検出ルールを把握して、セキュリティ ポスチャーを検証します。
[相関の進行状況] には、実行のリアルタイムの相関ワークフローの進行状況が表示されます。相関関係の実行中、タスクが完了するまでイベントの合計数が増加する可能性があります。
Correlated Rules テーブルを分析する
[相関ルール] テーブルには、アクションの実行中にトリガーされた検出ルール(カスタムルールとキュレーテッド ルールの両方)が一覧表示されます。
このテーブルには、カスタムルールとキュレートされたルールの両方が表示されます。これには、次の 2 つのグループが含まれます。 * アクションのメタデータで明示的に定義されたルール * 関連するイベントによってトリガーされる追加のルール
これにより、想定どおりに動作したルールと、さらに調査が必要なルールを特定できます。
表には以下の列があります。
ルール名: 検出ルールの名前。ルール名をクリックして、ルール定義とその検出履歴を表示します。
検出数: ルールによってトリガーされた検出の数。値
0は、一致するイベントが見つからなかったことを示します。検出: [検出] ページへのリンク。この実行でトリガーされた検出が表示されます。
アクションに関連付けられている: ルールがアクションのメタデータの一部であったかどうかを示します。
はい: アクションのメタデータにルールが含まれています。システムは、アクションの実行時にトリガーされることを想定しています。
いいえ: このアクションのメタデータにはルールは含まれていませんが、そのロジックが生成されたイベントと一致し、トリガーされました。
次の表は、結果を特定するのに役立ちます。
| [アクションへの関連付け] 列 | 検出数の列 | 意味 |
|---|---|---|
YES
|
1 以上
|
成功: 期待されるルールが 1 つ以上の検出を正常にトリガーしました。 |
NO
|
1 以上
|
アクティビティによって予期しないルールがトリガーされた。 |
YES
|
0
|
想定されるルールで検出がトリガーされませんでした。 |
関連付けられたイベントを分析する
Security Validation アクションを実行したら、関連付けられたイベントを使用して、シミュレートされた脅威に環境とセキュリティ管理がどのように対応したかを評価します。
分析には、相関ワークフローのリアルタイム ステータスと、生成されたすべてのイベントの詳細なテーブルの 2 つのコンポーネントが含まれます。
[Event Correlation Status] には、現在のワークフローの状態が次のいずれかとして表示されます。
実行中: システムは、相関イベントを積極的に検索しています。
完了: すべてのイベント相関アクティビティが正常に完了しました。
エラー: 相関ワークフローでエラーが発生し、完了できませんでした。
[Correlation workflow complete at] は、相関が完了すると予想される時刻または完了した時刻を示します。
イベント テーブルには、アクションによって生成されたすべてのイベントが一覧表示されます。このデータを使用して、環境とセキュリティ管理における個々のレスポンスを分析します。
表には以下の列があります。
Event: イベント ID。クリックすると、UDM 検索でイベントの詳細が表示されます。
イベントのタイムスタンプ: ソースシステム(サーバーやファイアウォールなど)でイベントが発生した時刻。
観測されたタイムスタンプ: Security Validation サービスがイベントを検出して実行に関連付けた時刻。
プロダクト: イベントを生成したプロダクト。
セキュリティ結果アクション: UDM イベントの
security_result.actionフィールドに基づくイベントの結果(BlockedまたはNot blocked)。
アクションの対象が、実行されている Google SecOps インスタンス以外のリージョンに設定されている場合があります。実行結果には、実行プロジェクトから取得したログが表示されます。
高度なアセットと参照にアクセスする
構成例と参照データ マッピングについては、次のアセットをご覧ください。
実装例: signJWT を使用してアクセス トークンを生成する
signJWT 権限アクションを使用してアクセス トークンを生成する例を考えてみましょう。この例では、Security Validation コンテキストがすでに設定されており、そのコンテキスト内でアクションを実行していることを前提としています。このアクションにより、Cloud Audit Logs が生成され、signJWT 脅威検出ルールを使用してアクセス トークンの生成がトリガーされます。
次の設定が必要です。
有効な API: Identity and Access Management(IAM)サービス アカウント認証情報 API は、ターゲット プロジェクトと実行プロジェクトの両方で有効にする必要があります。
サービス アカウントの権限: Security Validation コンテキストの
profileフィールドで指定されたサービス アカウントには、ターゲット プロジェクトに対するiam.serviceAccounts.signJwt権限が必要です。これは、サービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)を介して付与できます。このロールは、プロジェクトまたはターゲット サービス アカウント(このアクションでは、ターゲット プロジェクトのデフォルトの Compute Engine サービス アカウント)に付与できます。IAM 監査ロギング: このアクションによって生成されたイベントをキャプチャするには、ターゲット プロジェクトで IAM 監査ロギング(
ADMIN_READ)を有効にする必要があります。カスタム エクスポート フィルタ: SecOps Google Cloud の取り込みを介してこのアクションによって生成されたイベントを取り込むには、
log_id("cloudaudit.googleapis.com/data_access")を含むカスタム エクスポート フィルタを設定する必要があります。ルールセット: 検索ビューと調査ビューで検出結果を表示するには、[Cloud Threats] -> [Google Cloud] IAM Abuse ルールセットを有効にして、アラートに設定する必要があります。
モニタリング スケジュールの例
継続的なモニタリングの繰り返しスケジュールを構成する際は、これらの例を参考にしてください。
| 構成 | 実行するタイミング |
|---|---|
| 時間: 特定の時間(午後 10 時)に実行 日: 曜日(月曜日) 月: 毎月 タイムゾーン: EST |
毎週月曜日の午後 10 時(東部標準時)に実行されます。 |
| 時間: 特定の時間(01:00)に実行 日: 日(1) 月: 指定(1 月、4 月、7 月、10 月) タイムゾーン: PST |
1 月、4 月、7 月、10 月の初日の午前 1 時(太平洋標準時)に実行されます。 |
| 時間: 特定の時間(14:00)に実行 日: 毎日 月: 毎月 タイムゾーン: UTC |
毎日午後 2 時(協定世界時)に実行されます。 |
| 時間: 特定の時間(09:30)に実行 日: 日(15) 月: 指定(2 月、4 月、6 月、8 月、10 月、12 月) タイムゾーン: EST |
2 か月ごと(2 月、4 月、6 月、8 月、10 月、12 月)の 15 日の午前 9 時 30 分(米国東部標準時)に実行されます。 |
|
時間: 1 時間ごとに繰り返す インターバル: 1 時間ごと 時間: すべての時間 |
ノンストップで実行されます。1 日 24 時間、毎正時(1:00、2:00、3:00 など)に実行されます。 |
|
時間: 1 時間ごとに繰り返す インターバル: 4 時間ごと 時間: 開始時間と終了時間(午後 10 時~午前 6 時) |
夜間のみ実行されます。午後 10 時、午前 2 時、午前 6 時に実行され、トラフィックが少ない時間帯のサーバー ステータスをキャプチャします。 |
トラブルシューティング
レイテンシと上限
新しくトリガーされたモニター実行の結果は、相関ウィンドウにより、検出データとイベントデータがすぐに反映されません。
エラーの修正
| エラー | 問題の説明 | 修正 |
|---|---|---|
| IAM 権限エラー | サービス アカウントに対する権限 iam.serviceaccounts.actAs が拒否されました。
|
アクションを実行する直前にコンテキストを作成または更新した場合は、数分待ってからもう一度お試しください。IAM の変更は整合性がありますが、ロールの割り当てがシステム全体に反映されるまでに時間がかかることがあります。 アクションを実行する ID に、指定されたサービス アカウントに対する iam.serviceaccounts.actAs 権限があることを確認します。 |
検証とテスト
次のスケジュールされた間隔を待たずに、Monitor が正しく構成されていることを確認するには、Monitor の詳細ページの [今すぐ実行] ボタンを使用します。相関ウィンドウが経過したら、ページを更新して実行ステータスを確認します。