Azure Sentinelに連携したシステムのアラートを取りこぼさずに処理する

こんにちは、ひろかずです

Azure Sentinelを運用していると、Microsoft Cloud App Security(以下、MCAS)やMicrosoft Defender ATP(以下、MDATP)などのアラートに対して、プレイブック(SOAR機能)がトリガーできないことに気付きます

また、MCASからのアラートの内容によって、処理内容を変えることが簡単にはできないことにも気付くことでしょう

今日は、Azure Sentinelに連携したシステムのアラートをトリガーし、プレイブックの中でアラート処理を分岐実行する実装について一筆書きます

tl;dr的な何か

  • SecurityAlertの内容から、スケジュール実行された分析テンプレート以外を検出する分析テンプレートを作成する
  • プレイブックを作成し、SecurityAlertスキーマの内容から、スケジュール実行された分析テンプレート以外を改めてクエリする
  • クエリした内容から、アラート送信元サービス毎に処理を分岐させて通知や対応処理などを行う

ざっくり構成

前提条件

  • Azure Sentinelを有効化している
  • Log Analyticsワークスペースに対する適切な権限を所有している
  • MCASやMDATPなどを動作するよう構成している
  • Azure SentinelとMCASやMDATPなどをコネクタで接続している
  • 投稿可能なSlackを所有している(オプション)

工程

  1. トリガーとなる分析クエリを作成する
  2. 処理するプレイブックを作成する
  3. プレイブック内に分岐を作成し、アラート発信元に合わせた処理を構成する
  4. 分析クエリにプレイブックを設定する

1. トリガーとなる分析クエリを作成する

  • AzureコンソールのAzure Sentinel管理画面を開く
  • ナビゲーションペインの[分析]を選択し、[+ 作成] > [スケジュール済みルール]を選択

  • 名前を設定し、重大度を[情報提供]に設定して、[次: ルールのロジックを設定]を選択

  • ルールのクエリ欄に、以下クエリを貼り付け
SecurityAlert
| where ProviderName != "ASI Scheduled Alerts"

  • [クエリの実行間隔]と[次の時間分の過去データを参照します]に時間(5分〜1日)を設定
    • 設定する時間は同じにすること
  • アラートのしきい値を[次の値より大きい : 0]と設定

  • プレイブックは、ひとまず設定せずに[次: レビュー>]を選択

  • 設定内容を確認し、[作成]を選択

2. 処理するプレイブックを作成する

  • ナビゲーションペインの[プレイブック]を選択し、[+ プレイブックの追加]を選択

  • 名前を設定し、サブスクリプションとリソースグループを設定して、[作成]を選択

  • [空のロジックアプリ]を選択

3. プレイブック内に分岐を作成し、アラート発信元サービスに合わせた処理を構成する

  • 全体概要はこんな感じ

3-1. アラートトリガーからAzure Sentinelに連携されたアラートデータの取得まで

  • 概要はこんなかんじ

  • 分析テンプレートが動作して、検出されると、アラートとして記録されます
  • 他システムから連携されたオリジナルのアラートが存在するので、作成した分析テンプレートで記録されるアラート自体は不要なものです
  • そのため、アラートトリガーを設定することで、アラートIDを取得してクローズできるようにします
  • こんな感じで設定
    • Azure Sentinelのトリガーと、Azure Sentinelの[Change Incident status]コネクタを使用
    • Logic Appの動作テストを行う場合は、本コネクタの作成を動作テスト後に行うこと

  • [Specify subscription id]、[Specify resource group]、[Specify workspace id]は、以下画面から取得します
    • Azureワークスペースの[設定]を選択

  • SecurityAlertスキーマの内容から、スケジュール実行された分析テンプレート以外を改めてクエリする
  • Log Analyticsの[クエリの実行と結果の一覧表示(プレビュー)]コネクタを使用
    • 以下クエリを貼り付け
SecurityAlert
| where TimeGenerated > ago(1h)
| where ProviderName != "ASI Scheduled Alerts"
| summarize arg_max(TimeGenerated, *) by SystemAlertId

3-2. クエリー結果をロードし、アラート送信元サービスで分岐させる

  • 概要はこんな感じ

  • データ操作の[作成]コネクタを使って、[ProbiderName]をロード("作成")
  • データ操作の[作成]コネクタを使って、[DisplayName]をロード("作成2")
  • 制御の[条件]コネクタを使って、"作成"の[出力]コネクタを設定
    • [次の値に等しい]条件式で、値に"MCAS"を設定
  • こんな感じで設定

オプション: 処理分岐せずに、ただSlack通知する

  • 制御の[条件]コネクタの代わりに、Slackコネクタを設定することで、Azure Sentinelに連携したシステムからの通知をSlackに送ることができます

3-3. MCAS以外からの通知の処理

  • ひとまず、MCAS以外からの通知は、Slackに流すだけの処理にします
  • 概要はこんなかんじ

  • データ操作の[JSONの解析]コネクタを使って、Log Analyticsコネクタで取得した[ExtendedLinks]をコンテンツに指定("JSONの解析")
  • スキーマとして、以下JSONスキーマを設定
    • イベントが取得できる場合、[サンプルのペイロードを使用してスキーマを生成する]を選択し、実データをコピペすることで、スキーマは自動生成される(こちらのほうが確実)
{
    "items": {
        "properties": {
            "Category": {
                "type": "string"
            },
            "Href": {
                "type": "string"
            },
            "Type": {
                "type": "string"
            }
        },
        "required": [
            "Href",
            "Category",
            "Type"
        ],
        "type": "object"
    },
    "type": "array"
}
  • Slackの[投稿メッセージ]コネクタに以下のように設定
    • Hrefは、"JSONの解析"の物を使用すること

3-4. MCASからの通知の処理

  • 制御の[条件]コネクタを使って、"作成2"の[出力]コネクタを設定
    • [次の値に等しい]条件式で、値に"Mass share"を設定
    • 他にあれば、適宜指定すること
  • こんな感じで設定

Mass shareアラート以外の場合

  • MCASのアラートは、アラートのパーマリンクが含まれる
  • アラートの内容とパーマリンクをSlack通知するように設定
  • 概要はこんな感じ

  • データ操作の[JSONの解析]コネクタを使って、Log Analyticsコネクタで取得した[ExtendedLinks]をコンテンツに指定("JSONの解析2")
  • スキーマとして、前述のJSONスキーマを設定

  • 制御の[条件]コネクタを使って、"JSONの解析2"のHrefを指定
    • [次の値を含む]条件式で、値に"alerts"を設定
  • Trueの場合において、Slackの[投稿メッセージ]コネクタを設定
  • こんな感じで設定

Mass shareアラートの場合

  • 編集が完了したら[保存]

4. 分析クエリにプレイブックを設定する

  • AzureコンソールのAzure Sentinel管理画面を開く
  • ナビゲーションペインの[分析]を選択し、作成した分析クエリを選択して、[編集]を選択

  • [自動応答]タブにて、作成したプレイブックを指定して、[次: レビュー>]を選択

  • [保存]を選択

以上で、Azure Sentinelに連携したシステムのアラートを取りこぼさずに処理する実装は完了です
お疲れ様でした

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です