MS Sentinel 分析ルールの検証(Azure Activity)

Microsoft Sentinel の分析ルールを使うと、取り込んだログを定期的に検索し、怪しい操作を自動で見つけられます。この記事では、Azure Activity のログを対象にした分析ルールをテンプレートから作成し、実際にインシデントが作られるところまで確認します。

具体的には、リソースグループを追加した操作を Azure Activity のログから検出し、Microsoft Sentinel にインシデントを作らせます。

前提

分析ルールを作る前に、Azure Activity のログを Microsoft Sentinel に取り込むデータコネクタの設定が必要です。設定手順は次の記事を参照してください。

MS SentinelにAzure Activityログを取り込む(コンテンツハブ)

この記事でわかること
  1. 分析ルール、アラート、インシデントの関係
  2. テンプレート「Suspicious Resource deployment」から分析ルールを作る手順と、各設定の意味
  3. リソースグループを追加して、インシデントが作られることの確認

分析ルールとは?

分析ルールは、Log Analytics ワークスペースに取り込んだログに対して KQL(Kusto Query Language)のクエリを実行し、条件に合う結果が見つかったらアラートを生成する仕組みです。アラートは、設定に従ってインシデント(調査の単位)にまとめられます。運用者は、インシデントを見て調査や対応を進めます。

Azure サブスクリプションリソースグループの作成などの操作Log AnalyticsAzureActivityテーブル分析ルールスケジュール済み1 日ごとにクエリを実行過去 14 日分を参照アラートしきい値を超えたら生成(エンティティ付き)インシデントアラートをまとめた調査の単位記録検索クエリ結果 > 0作成自動応答オートメーション ルール(今回は設定なし)
図1 Azure Activity のログからインシデントが作られるまで

分析ルールにはいくつかの種類があります。今回の Azure Activity のテンプレート一覧に出てくるのは、次の 2 種類です。

ルールの種類動き
Scheduled(スケジュール済み)決めた間隔(5 分〜14 日)でクエリを実行し、決めた期間(5 分〜14 日)のログを検索する。もっともよく使われる種類
NRT(ほぼリアルタイム)1 分ごとにクエリを実行する。スケジュール済みルールより設定できる項目が限られる

今回使うテンプレート:Suspicious Resource deployment

今回は動作確認用に、スケジュール済みのテンプレート「Suspicious Resource deployment(不審なリソースのデプロイ)」を使います。説明には「以前は見られなかった呼び出し元によって、まれなリソースおよびリソースグループのデプロイが行われたことを検出する」という意味の英文が書かれています。

テンプレートのクエリは、次のようになっています(Azure-Sentinel の GitHub リポジトリで公開されているテンプレート、バージョン 2.0.4 のクエリです)。

ルールのクエリ(テンプレートの既定)

// Add or remove operation names below as per your requirements. For operations lists, please refer to https://learn.microsoft.com/en-us/Azure/role-based-access-control/resource-provider-operations#all
let szOperationNames = dynamic(["Microsoft.Compute/virtualMachines/write", "Microsoft.Resources/deployments/write", "Microsoft.Resources/subscriptions/resourceGroups/write"]);
let starttime = 14d;
let endtime = 1d;
let RareCaller = AzureActivity
| where TimeGenerated between (ago(starttime) .. ago(endtime))
| where OperationNameValue in~ (szOperationNames)
| summarize count() by CallerIpAddress, Caller, OperationNameValue, bin(TimeGenerated,1d)
// Returns all the records from the right side that don't have matches from the left.
| join kind=rightantisemi (
AzureActivity
| where TimeGenerated > ago(endtime)
| where OperationNameValue in~ (szOperationNames)
| summarize StartTimeUtc = min(TimeGenerated), EndTimeUtc = max(TimeGenerated), ActivityTimeStamp = make_set(TimeGenerated,100), ActivityStatusValue = make_set(ActivityStatusValue,100), CorrelationIds = make_set(CorrelationId,100), ResourceGroups = make_set(ResourceGroup,100), ResourceIds = make_set(_ResourceId,100), ActivityCountByCallerIPAddress = count()
by CallerIpAddress, Caller, OperationNameValue) on CallerIpAddress, Caller, OperationNameValue;
RareCaller
| extend Name = iif(Caller has '@',tostring(split(Caller,'@',0)[0]),"")
| extend UPNSuffix = iif(Caller has '@',tostring(split(Caller,'@',1)[0]),"")
| extend AadUserId = iif(Caller !has '@',Caller,"")

このクエリは、「特定の操作をした」だけで検出するのではありません。過去の操作と比べて、新しい組み合わせの操作が行われたときに検出します。

14 日前1 日前実行時過去の操作(基準)呼び出し元・IP アドレス・操作の組み合わせを集める直近 1 日の操作基準に無い組み合わせだけを残す(join kind=rightantisemi)→ 1 件以上あればアラート比較対象の操作VM の作成・更新デプロイリソースグループの作成
図2 Suspicious Resource deployment のクエリの考え方
クエリの部分意味
szOperationNames対象にする操作。VM の作成・更新(Microsoft.Compute/virtualMachines/write)、デプロイ(Microsoft.Resources/deployments/write)、リソースグループの作成・更新(Microsoft.Resources/subscriptions/resourceGroups/write)の 3 つ
starttime = 14d
endtime = 1d
14 日前から 1 日前までを「過去の操作(基準)」、直近 1 日を「新しい操作」として分ける
join kind=rightantisemi直近 1 日の操作のうち、基準の中に同じ「IP アドレス(CallerIpAddress)・呼び出し元(Caller)・操作(OperationNameValue)」の組み合わせが無いものだけを残す
extend Name
extend UPNSuffix
extend AadUserId
呼び出し元を、ユーザー名・ドメイン部分・ユーザー ID に分ける。あとで説明するエンティティ マッピングで使う
補足

このルールは、同じ管理者が同じ IP アドレスから、過去 13 日間(14 日前〜1 日前)に同じ操作をしていると検出しません。毎日リソースを作る環境では検出されにくく、普段リソースを作らない人や、いつもと違う場所からの操作を見つけるためのルールです。

分析ルールの作成(Azure Activity)

規則のテンプレートを開く

Microsoft Sentinel のメニューから 構成 ›› 分析 をクリックします。分析ルールの画面が開き、検証時は有効なルール(アクティブな規則)が 1 つだけありました。「規則のテンプレート」タブをクリックすると、コンテンツハブでインストールしたソリューションに含まれるテンプレートが一覧で表示されます。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から操作する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

Microsoft Sentinel(分析)画面イメージ
Microsoft Sentinel ›› 分析
1アクティブな規則1
重要度別の規則 高 (1)  中 (0)  低 (0)  情報提供 (0)
アクティブな規則2規則のテンプレート異常
重要度名前ルールの種類データ ソース
中GitHub Signin …ScheduledMicrosoft Entra…
中Cross-tenant A…ScheduledMicrosoft Entra…
中TI map Domain…ScheduledWindows DNS via l…
高Authentication …ScheduledMicrosoft Entra ID
⋮ (中略)
図3 分析の画面で規則のテンプレートを表示したところ(実際の画面ではなく、操作のポイントを示したイメージです)
No.項目内容
1アクティブな規則有効になっている分析ルールの数。検証時は 1 つ(重要度「高」のルール。赤が高、オレンジ・黄が中・低、グレーが情報提供)
2規則のテンプレートインストール済みのテンプレートの一覧。Azure Activity 以外のソリューションのテンプレートも混ざって表示される

Azure Activity のテンプレートだけに絞り込みます。「フィルターの追加」をクリックし、「ソース名」を選びます。ソース名の一覧で「Azure Activity」にチェックを入れて、「適用」をクリックします。

Microsoft Sentinel(分析 ›› 規則のテンプレート)画面イメージ
1フィルターの追加
フィルターの追加
重要度
ルールの種類
2ソース名
データ ソース
戦術
ソース名
☐ Microsoft Entra ID
☐ Microsoft Defender XDR
3☑ Azure Activity
☐ Apache Log4j Vulnerability Detection
⋮(中略)
4適用キャンセル
図4 ソース名で Azure Activity に絞り込む(実際の画面ではなく、操作のポイントを示したイメージです)
No.項目内容
1フィルターの追加テンプレートの一覧を絞り込む条件を追加する
2ソース名テンプレートの提供元(ソリューション)で絞り込む
3Azure Activityチェックを入れる
4適用クリックすると、一覧が Azure Activity のテンプレートだけになる

これで、Azure Activity の分析ルールのテンプレートだけが表示されます。データ ソースがすべて Azure Activity になっていることを確認します。

テンプレートからルールを作成する(全般)

一覧から「Suspicious Resource deployment」を右クリックし、「ルールの作成」をクリックします(テンプレートを選択して、右側の詳細の「ルールの作成」をクリックしても同じです)。

Microsoft Sentinel(分析 ›› 規則のテンプレート)画面イメージ
フィルター:ソース名 : Azure Activity
重要度名前ルールの種類データ ソース手法
中NRT Microsoft Entra ID H…NRTAzure ActivityT1578
低New CloudShell UserScheduledAzure ActivityT1059
低Creation of expensive computes …ScheduledAzure ActivityT1578
低Rare subscription-level operatio…ScheduledAzure ActivityT1003 +1
1 低Suspicious Resource deployment 2+ ルールの作成ScheduledAzure ActivityT1496
中NRT Creation of expensive comp…NRTAzure ActivityT1578
低Subscription moved to another t…ScheduledAzure ActivityT1496
図5 Azure Activity のテンプレート一覧からルールを作成する(実際の画面ではなく、操作のポイントを示したイメージです)
No.項目内容
1Suspicious Resource deployment重要度「低」、種類「Scheduled」のテンプレート。名前が「NRT」で始まるものは NRT ルールのテンプレート
2ルールの作成右クリックで表示される。クリックすると、テンプレートの内容が入った状態でルールの作成画面が開く

ルールの作成画面が開き、最初に「全般」タブが表示されます。名前、説明、重要度などは、テンプレートの値があらかじめ入っています。そのまま「次へ:ルールのロジックを設定 >」をクリックします。

分析ルール ウィザード(全般)画面イメージ
全般 / ルールのロジックを設定 / インシデントの設定 / 自動応答 / 確認と作成
1名前Suspicious Resource deployment
説明Identifies when a rare Resource and ResourceGroup deployment occurs by a previously unseen caller.
重要度 低
MITRE ATT&CK2 個選択済み
2状態 有効
3次へ:ルールのロジックを設定 >
図6 全般タブ(実際の画面ではなく、設定のポイントを示したイメージです)
No.項目設定内容
1名前・説明・重要度・MITRE ATT&CKテンプレートの値のまま。MITRE ATT&CK は、このルールが検出する攻撃の戦術(Impact)と手法(T1496)
2状態有効(緑)のまま。有効で作成すると、ルールは作成した直後に 1 回目のクエリを実行し、その後は設定した間隔で実行される
3次へルールのロジックの設定に進む

ルールのロジックを設定する

「ルールのロジックを設定」タブでは、クエリ、エンティティ マッピング、実行の間隔などを設定します。今回は、すべてテンプレートの既定のままにします。ルールのクエリには、上で説明したクエリが入っています。

分析ルール ウィザード(ルールのロジックを設定)画面イメージ
全般 / ルールのロジックを設定 / インシデントの設定 / 自動応答 / 確認と作成
1ルールのクエリ| join kind=rightantisemi ( ⋯(テンプレートのクエリ)
2エンティティ マッピング
エンティティ識別子列
アカウントFullNameCaller
NameName
UPNSuffixUPNSuffix
アカウントAadUserIdAadUserId
IPAddressCallerIpAddress
3クエリの実行間隔1 日
次の時間分の過去のデータを参照14 日
実行の開始◉ 自動○ 特定の時刻 (プレビュー)
4アラートのしきい値クエリ結果件数が 次の値より大きい 0
5イベント グループ化◉ すべてのイベントを単一のアラートにグループ化する
○ 各イベントに対するアラートをトリガーする
6抑制アラートの生成後にクエリの実行を停止する: オフ
< 前へ7次へ:インシデントの設定 >
図7 ルールのロジックを設定タブ(実際の画面ではなく、設定のポイントを示したイメージです)
No.項目設定内容
1ルールのクエリテンプレートのクエリのまま。変更すると、画面の下ですぐに文法がチェックされる
2エンティティ マッピングクエリ結果の列を、Sentinel が扱うエンティティ(アカウント、IP など)に対応付ける。対応付けたエンティティはアラートとインシデントに表示され、STEP 4 のアラートのグループ化にも使われる
3実行間隔 1 日/過去 14 日分を参照1 日に 1 回、過去 14 日分のログを対象にクエリを実行する。クエリの中で 14 日前までさかのぼるので、参照する期間も 14 日にしている。どちらも 5 分〜14 日の範囲で設定でき、参照する期間は実行間隔以上にする
4アラートのしきい値クエリ結果が 0 件より多い、つまり 1 件でも結果があればアラートを生成する
5イベント グループ化既定は「すべてのイベントを単一のアラートにグループ化する」。1 回の実行で結果が何件あっても、アラートは 1 件にまとめられる。結果 1 件ごとにアラートを出す場合は「各イベントに対するアラートをトリガーする」を選ぶ
6抑制オン(最大 24 時間)にすると、アラートを生成したあと、指定した時間はクエリを実行しない。既定はオフで、アラートが出たあとも設定した間隔で実行を続ける
7次へインシデントの設定に進む

インシデントの設定

「インシデントの設定」タブでは、アラートからインシデントを作るかどうかと、複数のアラートを 1 つのインシデントにまとめるかどうかを設定します。インシデントの作成は既定で有効です。既定のままだと、アラート 1 件ごとにインシデントが 1 件作られます。

今回は、同じアラートでインシデントが増えすぎないように、アラートのグループ化を有効にしました(既定は無効)。

分析ルール ウィザード(インシデントの設定)画面イメージ
全般 / ルールのロジックを設定 / インシデントの設定 / 自動応答 / 確認と作成
インシデントの設定
1この分析ルールによってトリガーされるアラートからインシデントを作成する 有効
アラートのグループ化
2この分析ルールによってトリガーされる関連アラートをインシデントにグループ化する 有効
3選択した期間内に作成されたアラートのみにグループを制限する5 時間
4次の方法で単一のインシデントにグループ化する◉ すべてのエンティティが一致した場合にアラートを 1 つのインシデントにグループ化する (推奨)
○ このルールによってトリガーされるすべてのアラートを 1 つのインシデントにグループ化する
○ 選択したエンティティ型と詳細が一致する場合、アラートを 1 つのインシデントにグループ化する。
5閉じた一致するインシデントを再度開く 無効
< 前へ6次へ:自動応答 >
図8 インシデントの設定タブ(実際の画面ではなく、設定のポイントを示したイメージです)
No.項目設定内容
1インシデントを作成する有効(緑)のまま。無効にすると、アラートだけが作られてインシデントは作られない
2アラートのグループ化有効にする。最大 150 件のアラートを 1 つのインシデントにまとめられる。150 件を超えた分は、同じ内容の新しいインシデントにまとめられる
3グループを制限する期間この期間内に作られたアラートだけをまとめる。期間の外のアラートは別のインシデントになる。検証では 5 時間
4グループ化の方法推奨の「すべてのエンティティが一致した場合」を選ぶ。STEP 3 でマッピングしたエンティティ(アカウントと IP)の値がすべて同じアラートを、1 つのインシデントにまとめる
5閉じた一致するインシデントを再度開く無効のまま。閉じたインシデントに当てはまるアラートが後から出たとき、閉じたインシデントを開き直さず、新しいインシデントを作る
6次へ自動応答の設定に進む

自動応答と、確認と作成

「自動応答」タブでは、このルールのインシデントに対して動くオートメーション ルール(担当者の割り当てやプレイブックの実行など)を確認・追加できます。今回は何も設定せず、「次へ:確認と作成 >」をクリックします。

「確認と作成」タブで、設定内容の検証に合格したことを確認し、「保存」をクリックします。

分析ルール ウィザード(確認と作成)画面イメージ
1 検証に合格しました。
全般 / ルールのロジックを設定 / インシデントの設定 / 自動応答 / 確認と作成
名前Suspicious Resource deployment
MITRE ATT&CKImpact (1)
重要度 低
状態有効
ルールのクエリ// Add or remove operation names below as per your requirements. ⋯
< 前へ2保存
図9 確認と作成タブ(実際の画面ではなく、確認のポイントを示したイメージです)
No.表示・項目意味・操作
1検証に合格しました。(緑)設定に誤りがない。エラーがある場合は、エラーのあるタブに印が付くので、そのタブを開いて直す
2保存クリックするとルールが作成され、「アクティブな規則」タブに表示される。テンプレートの一覧では、使ったテンプレートに「In use」(使用中)の印が付く

インシデントの確認

インシデントを発生させるため、Azure portal でリソースグループを 3 つ(sentineltest1〜3)追加しました。リソースグループの作成は、クエリの対象の操作 Microsoft.Resources/subscriptions/resourceGroups/write として Azure Activity のログに記録されます。

Azure portal(リソース グループ)画面イメージ
名前サブスクリプション場所
NetworkWatcherRGAzure subscription 1Japan East
Sentinel_BlogAzure subscription 1Japan East
1sentineltest1Azure subscription 1Japan East
sentineltest2Azure subscription 1Japan East
sentineltest3Azure subscription 1Japan East
図10 追加したリソースグループ(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1sentineltest1〜3検証のために追加したリソースグループ。これらの作成操作を分析ルールで検出する

Microsoft Sentinel のメニューから 脅威管理 ›› インシデント を開きます。しばらくすると、Suspicious Resource deployment のインシデントが作られました。

Microsoft Sentinel(インシデント)画面イメージ
脅威管理 ›› インシデント
1インシデントを開く1 (新しいインシデント 1 / アクティブなインシデント 0)
重大度インシデント番号タイトル
2 低3Suspicious Resource deployment
図11 作成されたインシデント(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1インシデントを開く:1対応が終わっていないインシデントの数。まだ誰も手を付けていない「新規」が 1 件
2低/3/Suspicious Resource deployment重大度はルールの重要度(低)、タイトルはルール名になる。番号 3 なのは、以前の検証で番号 1、2 のインシデントが作られていたため

インシデントを選択すると、右側に概要が表示されます。「すべての詳細を表示」をクリックすると、詳細の画面が開きます。

Microsoft Sentinel(インシデントの詳細)画面イメージ
Suspicious Resource deployment / インシデント番号 3
重大度/状態/所有者 低 新規 未割り当て
説明Identifies when a rare Resource and ResourceGroup deployment occurs by a previously unseen caller.
1証拠イベント 3 アラート 3 ブックマーク 0
作成時刻/最終更新時刻2024/8/16 0:24:10 / 2024/8/16 0:34:11
2エンティティ(2 個)アカウント:admin@(伏せています)
IP:(伏せています)
戦術と手法Impact (1)
インシデントのタイムライン
3Suspicious Resource deployment  低 Microsoft Sentinel
Suspicious Resource deployment  低 Microsoft Sentinel
Suspicious Resource deployment  低 Microsoft Sentinel
類似インシデント
重大度インシデント番号タイトル状態
4 低2Suspicious Resource deployment終了 – 不明
低1Suspicious Resource deployment終了 – 不明
図12 インシデントの詳細(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1証拠:イベント 3、アラート 3このインシデントにまとめられたアラートの数。右側の概要を開いたとき(0:29 更新)は 2 件で、詳細を開いたとき(0:34 更新)には 3 件に増えていた。アラートのグループ化を有効にしたので、同じエンティティのアラートが新しいインシデントにならず、このインシデントに追加されている
2エンティティSTEP 3 のエンティティ マッピングで対応付けた、操作したアカウントと接続元の IP アドレス。誰がどこから操作したかが、ここでわかる
3インシデントのタイムラインインシデントに含まれるアラートが時刻の順に並ぶ
4類似インシデント同じルールなどで作られた過去のインシデント。以前の検証で作り、終了にしたもの
Defender ポータルの場合

この記事の画面は、検証時(2024 年 8 月)の Azure portal の Microsoft Sentinel です。Microsoft Sentinel は、2027 年 3 月 31 日以降は Azure portal でのサポートが終わり、Microsoft Defender ポータルだけで使えるようになります。

  • 分析ルールは Microsoft Sentinel ›› Configuration ›› Analytics(英語表示の場合)から、同じウィザードで作成できます。
  • インシデントは Investigation & response ›› Incidents & alerts ›› Incidents(英語表示の場合)で確認します。
  • Defender ポータルに接続した環境では、インシデントは Microsoft Defender XDR が作ります。アラートのグループ化の設定はインシデントを作るときだけ使われ、Defender の相関エンジンが別のまとめ方をすることがあります。「閉じた一致するインシデントを再度開く」は使えません。

うまくいかないとき

状態よくある原因確認すること
テンプレートの「ルールの作成」が押せないテンプレートに必要なデータソース(AzureActivity)が接続されていない、またはデータが届いていないAzure Activity のデータコネクタの状態
ルールを保存できないワークスペースへの書き込み権限がないMicrosoft Sentinel 共同作成者などのロールの割り当て
リソースグループを作ってもインシデントが出ない過去 13 日間に、同じアカウント・同じ IP アドレスで同じ操作をしているこのルールの検出条件(新しい組み合わせだけを検出する)
しばらく待ってもインシデントが出ないルールは 1 日に 1 回の実行。作成直後の 1 回目より後の操作は、次の実行まで検出されないログの画面で AzureActivity テーブルに操作が記録されているか、ルールの実行間隔
同じようなインシデントが大量に作られるアラートのグループ化が無効で、アラート 1 件ごとにインシデントが作られているインシデントの設定のアラートのグループ化。必要なら抑制も使う

まとめ

手順やることポイント
STEP 1分析の「規則のテンプレート」をソース名 Azure Activity で絞り込むコンテンツハブで入れたソリューションのテンプレートが表示される
STEP 2Suspicious Resource deployment からルールを作成状態「有効」で作ると、作成直後に 1 回目が実行される
STEP 3ルールのロジックは既定のまま1 日ごとに過去 14 日分を検索し、新しい「アカウント・IP・操作」の組み合わせを検出
STEP 4アラートのグループ化を有効にするエンティティが同じアラートを、1 つのインシデントにまとめる
STEP 5検証に合格したことを確認して保存自動応答は今回は設定なし
確認リソースグループを追加し、インシデントを確認エンティティで、誰がどこから操作したかがわかる

コメント