Sentinel でインシデント検知時に、SOAR を用いてウォッチリストに登録したホワイトリストユーザーを除外する

# 1. はじめに
Microsoft Sentinel でインシデント検知運用を行うと、様々な形で誤検知チューニングを行う必要が出てきます。
誤検知チューニングの方法は幾つかの方法があるのですが、この記事では SOAR 機能と呼ばれるロジックアプリを用いて、インシデントに含まれるアカウント(ユーザー)情報から、Sentinel のウォッチリスト (DB) をチェックして自動クローズさせる手法をご紹介します。

なお、前回 IP アドレス/サブネットで自動クローズする手法をご紹介していますので、IP 設定についてはこちらをご参照下さい。

https://qiita.com/hisnakad/items/59bd4e5d3c4497964298

# 2. [参考] 誤検知チューニングどこで行う？
本記事ですが、インシデントを検知した後にロジックアプリを起動して除外する方法になります。
誤検知チューニングの方式をまとめると、以下のイメージです。今回の投稿はこちらの青枠の箇所を試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/5effb32e-e802-5337-3513-de47cb2f0615.png)

# 3. プレイブックテンプレートを用いる
ロジックアプリ開発に慣れている方は自作出来そうな要件ですが、Sentinel ウォッチリストを取り込んでマッチングさせるテクニックが必要なので、今回 Sentinel のプレイブックテンプレートを用いることにしました。
元々は Github Azure Sentinel で公開されていたものですが、現在は Microsoft Sentinel のプレイブックテンプレート画面から選んでデプロイすることが出来るようになっています。
テンプレートを見ると、他にもウォッチリストの入出力の参考になるものがあるので、自社カスタマイズされる方は参考になるのではと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/54196460-b384-ba10-20e6-42c6c5dc1253.png)

# 4. やってみる
ユーザー情報をウォッチリストの DB に lookup して除外するテンプレートは存在しないのですが、途中までプロセスが同じで使いまわしが可能なプレイブックテンプレートが提供されています。本記事では以下のプレイブックテンプレートを活用して検証を行いました。
**「ウォッチリスト - ユーザー VIP の場合にインシデントの重要度とタイトルを変更する - インシデント トリガー」**

## 4.1 テンプレートのデプロイ
実際にデプロイして試してみます。
テンプレートからデプロイするので、ロジックアプリを保存するリソースグループ、リージョン、プレイブック名を記入します。デフォルトでは ``Watchlist-ChangeIncidentSeverityandTitleIFUserVIP`` がプレイブック名になっていますが、今回の目的は対象のユーザーがあればクローズする意図なので、名前を **``Watchlist-CloseIncidentSafeUsers``** と変更しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/a599dfba-7182-1a62-d7f2-d635daaf0f25.png)

Sentinel 側に lookup するウォッチリスト名がパラメータになっています。（この後作成する必要あり）
ホワイトリストユーザーを登録して管理するウォッチリスト名を記入しましょう。
本検証では ``whitelist-users-for-entities`` と付けています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/78ac9c80-7e7e-f5c6-f24c-1a43ddeec43e.png)

ロジックアプリから Microsoft Sentinel へはマネージド ID、Azure Monitorに対して API 接続が行うテンプレートになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/56885a30-e7f2-85a3-c4ae-97b9a0da2e9d.png)

## 4.2 ウォッチリストの作成
ロジックアプリから lookup するためのホワイトリストユーザーを登録するウォッチリストを作成します。
**エイリアス**がロジックアプリ側からクエリーチェックするキーワードなのでご注意下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/a54e1ac0-5d93-a81e-ea3a-390bb013c470.png)

ウォッチリストの登録方法は幾つかの方法があります。
大量のデータが有る場合は Azure Storage に一度アップロードしたものを用いることが出来ますが、今回は Azure Portal から CSV でアップロードを行いました。

https://learn.microsoft.com/ja-jp/azure/sentinel/watchlists#options-to-create-watchlists

サーチキーは ``username`` としてウォッチリストを作成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/c6a80718-fe28-724d-c4b0-f22230f1ce29.png)

## 4.3 ロジックアプリを編集する
次にロジックアプリを編集します。
テンプレートでデプロイしたロジックアプリを開き、ロジックアプリデザイナーを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/457862c3-bae5-b733-d878-b03fbe146790.png)

今回、VIP ユーザーでは・・・といった条件は不要になるため、規定の True 条件 (元々は VIP ユーザーのウォッチリストに Match していたら True) の内容を削除しちゃいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/81988788-f13d-1be2-3314-7a1a9dc74ec2.png)

変わりに、規定条件が True (ウォッチリストのホワイトリストユーザーに　Match していたら) の場合、インシデントを自動クローズする処理を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/203b2ec5-dce6-c857-67c9-7823d6ac3266.png)

フローを日本語化するとこんな感じです。

1. Sentinel のインシデント作成時にロジックアプリ起動する
1. インシデント情報から、エンティティ属性のアカウントを取得 (/entities/account 属性)
1. For Each 繰り返し処理
1. ウォッチリスト取得 (指定したホワイトリストユーザー DB)
1. Condition 条件 (エンティティがホワイトリストユーザーに Match するか)
    1. [Yes]
        1. インシデントを更新 (自動クローズ)
    1. [No]

## 4.4 ロジックアプリ API の承認と権限設定
Sentinel のウォッチリストを読み取るための権限が必要になるため、このロジックアプリの Managed ID に対して Sentinel レスポンダーロールを付与してあげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/3632653a-4ee0-2669-3ceb-35daa77780c5.png)

# 5. 最後にオートメーションで対象のインシデントや分析ルールを指定する
ロジックアプリとウォッチリストの設定が終わりましたら、起動するためのオートメーション設定を Sentinel で行います。
オートメーション設定では多数の設定を行うケースがほとんどなので、このルールを起動するための順番には注意しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/1771fedc-e301-fae9-71e0-ef9d1c16a48d.png)

# 6. テスト結果例
このテンプレートが実行され、成功すると以下のようなアクションになります。

- エンティティにホワイトリストのアカウント名/ユーザー情報が含んだインシデントが生成される（誤検知）
- ロジックアプリが起動して、ウォッチリストをチェックして自動クローズする
    - 重要度変更 ( Informational )
    - ステータスを Closed
    - コメント追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/60e94ce3-6df3-d153-ac1b-2389bc16307e.png)

# 9. まとめ
Sentinel のプレイブックテンプレートは様々なものが提供されているのですが、ロジックアプリの中身まで見ないとどのような処理が行われて何が出来るのか分かり難いと思いました。誤検知チューニングの方法の一例になりますが、どなたかの参考になれば幸いです。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。