未来に繋ぐセキュリティ情報発信

Microsoft Sentinel で検出内容をメール通知する方法

安藤 翔一

こんにちは。 Microsoft Sentinel を使用して脅威情報の調査・研究を行っている安藤です。
Microsoft Sentinel ではさまざまなデータソースからログを集約し、ルールを設定することでアラートおよびインシデントを出力することができますが、サービスのデフォルト機能ではこれらを通知する手段がありません。本記事ではこれらのアラートおよびインシデントを通知する方法についてご紹介します。
本記事で記載している内容では

  1. 有効な Azure サブスクリプション(および十分な Azure IAM 権限)
  2. Exchange Online ライセンスおよび通知用のメールボックス

が準備されている前提で記載しております。
※ 通知方法によってはその他製品ライセンスを必要とする場合もあります。

Microsoft Sentinel のアラート/インシデント通知方法

Microsoft Sentinel では分析ルールという設定によってログデータを分析・集計し、閾値を越えた場合にアラート/インシデントを出力させることができます。
アラートとインシデントの差異は次の通りです。

左右にスクロールしてご覧ください。

項目 アラート インシデント
管理テーブル SecurityAlert SecurityIncident
識別子 SystemAlertId IncidentNumber
含まれる主な情報
  • アラート発生時刻
  • 検出ログを抽出するクエリまたは検出ログを圧縮したクエリ
  • インシデント発生時刻/更新時刻
  • アラート ID
ステータス管理 不可 可能
担当者アサイン 不可 可能
コメント 不可 可能
専用 URL なし あり

これらの通知方法はさまざまな方法がありますが最もスタンダードなものはオートメーションルールから Azure Logic App を呼び出す方法です。オートメーションルールは Microsoft Sentinel の左側ブレードから設定できます。

プレイブックの作成

今回はインシデントに対して担当者をアサインしたタイミングで、担当者向けにアラートおよびインシデントをメールで通知するシステムを作ります。メールの通知内容はインシデントの概要、URL の他、アラート検出内容の一部を含むこととします。

[作成]ボタンから[インシデント トリガーを使用したプレイブック]を選択します。

サブスクリプション、リソースグループ、プレイブック名を入力します。通知アクションのためのログを Log Analytics に保管する場合は「Log Analytics で診断ログを有効にする」にチェックを入れてください。

続いて Microsoft Sentinel に接続するコネクタの設定を行います。マネージド ID か、操作をされているユーザーの権限かどちらかを選択することができますが、マネージド ID を推奨いたします。

[プレイブックの作成]を選択してください。Azure Logic App および API Connection が作成されます。

Azure Logic App が作成されると、インシデント発生時に起動するトリガーが既に設定された状態となっています。

では、このままの状態でインシデントの概要をメール送信する設定を行います。[新しいステップ]から Office 365 Outlook を選択して[メールの送信]あるいは[共有メールボックスからメールを送信する]を選択してください。今回は[メールの送信]を選択します。
※ Office 365 Outlook アクションを使用する場合、接続の作成が必要な場合がありますが本記事では割愛します。

メールの宛先や本文の設定を行います。宛先、件名、本文には以下のように設定します。

左右にスクロールしてご覧ください。

項目 使用する動的なコンテンツ コードビュー上の指定
宛先 インシデント所有者 @{triggerBody()?['object']?
['properties']?['owner']['email']}
件名 インシデント Sentinel ID インシデント通知 -
@{triggerBody()?['object']?
['properties']?['incidentNumber']}
本文 インシデントのタイトル、
インシデントの説明、
インシデント URL
インシデント名:
@{triggerBody()?['object']?
['properties']?['title']} インシデントの説明:
@{triggerBody()?['object']?
['properties']?['description']}
インシデントURL:
@{triggerBody()?['object']?
['properties']?['incidentUrl']}

インシデントのタイトルと説明は、分析ルールの設定値に依存します。デフォルトであれば分析ルール名がインシデントタイトル、分析ルールの説明がインシデントの説明となります。
※ 分析ルールの設定によってこれらを動的に変更することが可能ですが、本記事では割愛いたします。

まずはこの状態で通知させるためにインシデントを発生させます。今回はスケジュール分析ルールを使用します。設定方法の詳細は割愛しますが、下図のように設定しています。

この分析ルールの検出想定は以下となります。

左右にスクロールしてご覧ください。

カラム名 内容
test これはアラートとして検出されるログ部分です
IPAddress 192.0.2.1
AssetName 資産1

オートメーションルールの作成

分析ルールの設定後、オートメーションルールの設定を行います。Microsoft Sentinel の左側ブレードから[オートメーション]を選択し、[作成]をクリックします。

今回はインシデントに対して担当者のアサインを行うこともオートメーションルールで設定します。順序を1としたうえで[インシデントが作成されたとき]をトリガーとしてアクションに[所有者の割り当て]を行い、ユーザー自身に割り当てられるよう設定します。

分析ルールを作成してすぐの場合は条件として分析ルール名を指定できない可能性がありますので、その場合は時間をおいて指定してください。

左右にスクロールしてご覧ください。

設定項目
オートメーションルール名 IncidentAlertTestAssign
トリガー インシデントが作成されたとき
条件 インシデントプロバイダーが次に等しい:すべて
分析ルール名が次に等しい:IncidentAlertTestRule
アクション 所有者への割り当て(自分への割り当て)
ルールの有効期限 無期限
順序 1

次に新しいオートメーションルールとして先ほど作成した Azure Logic App を呼び出すために、アクションとして[プレイブックの実行]を選択します。この際、トリガーは[インシデントの更新時]とします。

過去にオートメーションルールを作成してプレイブックの実行アクションを設定していない場合、プレイブック実行のためのアクセス許可を設定する必要があります。こちらは[プレイブックのアクセス許可を管理]から設定を行います。

先ほど Azure Logic App を作成したリソースグループを選択します。その後[適用]をクリックします。

アクセス許可を適用した場合はその時点でプレイブックを読み込めない可能性があるため、右上の×ボタンから設定を中止し、設定しなおしてください。

引き続きオートメーションルールを以下の通り設定します。

左右にスクロールしてご覧ください。

設定項目
オートメーションルール名 IncidentAlertTestAction
トリガー インシデントの更新時
条件 インシデントプロバイダーが次に等しい:すべて
分析ルール名が次に等しい:IncidentAlertTestRule
所有者:変更
アクション プレイブックの実行:test
ルールの有効期限 無期限
順序 2

オートメーションルールの設定を完了したので、分析ルールによるインシデント発報を待ちますが、テストとしてはルールの無効化後、再度有効化することで即時発報させることができます。

インシデントが発報されると、オートメーションルールが動作してプレイブックが実行されます。作成した Azure Logic App を確認すると実行されていることがわかります。

アラート詳細情報の取得

続いて、通知するメールにアラートの詳細情報を追記するようにします。
詳細情報を追記する方法としては2種類あり、1つ目が分析ルールに対してエンティティを設定し、エンティティを取り出す方法です。こちらは実装がシンプルですが、取得できる内容に制限があるため本記事での解説は割愛します。
2つ目が Azure Logic App からアラートの詳細情報を確認する方法です。発報されたインシデントには関連するアラート ID の情報が含まれています。まずは発生したインシデントに関連するアラート ID を確認して当該アラートの情報を出力させます。

インシデントトリガーの下に[データ操作>選択]アクションを追加します。

[選択]アクションには以下のように設定してください。

左右にスクロールしてご覧ください。

設定項目
開始 @{triggerBody()?['object']?['properties']?['Alerts']}
マップ(キー) SystemAlertId
マップ(値) @item()['properties']['systemAlertId']

続いて選択アクションの下にもアクションを追加します。monitor と検索いただき、[Azure Monitor ログ]を選択します。

[クエリを実行して結果を一覧表示する]アクションを選択します。
※ Azure Monitor ログ アクションを使用する場合、接続の作成が必要な場合がありますが本記事では割愛します。

[クエリを実行して結果を一覧表示する]アクションには以下のように設定してください。

左右にスクロールしてご覧ください。

設定項目
サブスクリプション @triggerBody()?['workspaceInfo']?['SubscriptionId']
リソースグループ @triggerBody()?['workspaceInfo']?['ResourceGroupName']
リソースの種類 Log Analytics Workspace
リソース名 @triggerBody()?['workspaceInfo']?['WorkspaceName']
クエリ let AlertIdTable = datatable(AlertIds:string)
[```
@{body('AlertIdsを抽出')}
```]
| extend AlertIds = parse_json(AlertIds)
| mv-expand AlertIds
| evaluate bag_unpack(AlertIds)
| extend SystemAlertId = tostring(SystemAlertId);
SecurityAlert
| join kind=rightouter AlertIdTable on SystemAlertId
時間範囲 Set In Query

これによりインシデントに含まれるアラートの情報を取得することができました。続いてアラートに含まれるクエリを実行して、その出力からアラート詳細情報を取得します。
Azure Monitor ログアクションの後に[制御>For each]アクションを追加して、先ほど追加したアクションの出力を引数とします。

追加した For each アクションの中に再び Azure Monitor ログアクションを追加し、以下のように設定します。

左右にスクロールしてご覧ください。

設定項目
サブスクリプション @triggerBody()?['workspaceInfo']?['SubscriptionId']
リソースグループ @triggerBody()?['workspaceInfo']?['ResourceGroupName']
リソースの種類 Log Analytics Workspace
リソース名 @triggerBody()?['workspaceInfo']?['WorkspaceName']
クエリ @{json(items('For_each')['ExtendedProperties'])
['Query']}
時間範囲 Set In Query

ここまでの実行結果が以下となります。

このように分析ルールで設定したクエリが改めて実行され、フィルタリングされたログデータや検出したアラート詳細情報を取得することができます。この値を取り出してメール送信するために変数を初期化してアラート詳細情報を追加します。

最後に格納した変数をメール本文に追加します。必要な情報の選択や、どのような見た目とするか(例えば HTML テーブルとして表出力する)なども Azure Logic App 上で実装できます。
以下は HTML テーブル化した情報をメール本文に追加した例です。

まとめ

いかがでしたでしょうか。Microsoft Sentinel で検出内容をメール通知する方法についてご紹介しました。
今後も Microsoft Sentinel の活用方法についてブログを公開してまいりますので、ご覧いただければ幸いです。また、当社では Microsoft Sentinel による自動監視と、セキュリティ専門アナリストによる有人調査を組み合わせたサービス「MSS for Microsoft Sentinel」をご提供していますので、ご興味のある方はぜひ下記からお問い合わせください。

関連ページ

お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください。

セキュリティソリューションに関する資料請求・お問い合わせ

関連製品・サービス

開催中のセミナー

最新トレンドや業務に役立つ知識が得られる SBテクノロジーのセミナー 参加無料 オンデマンド配信あり

ホワイトペーパー

SBT セキュリティサーベイ 2023

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録