🤖

生成 AI で Sentinel インシデントの過検知調査やトリアージがしたい

に公開

はじめに

Microsoft Sentinel を運用している環境では、日々大量のセキュリティインシデントが発生します。これらのインシデントの中には、実際のセキュリティ脅威ではない「過検知 (False Positive)」も多く含まれており、セキュリティアナリストによる適切なトリアージが重要な課題となっています。

従来のアプローチでは、静的な条件に基づくオートメーションルールを設定することで、一定の自動化を実現できます。しかし、以下のような複雑な判断が必要なケースでは、従来のルールベースでの自動化は困難でした:

  • 業務で使用される可能性があるファイル名などの曖昧な基準による判定
  • コンテキストに依存する複合的な条件の評価

そこで今回は、Azure OpenAI を活用して、これらの複雑な判断を自動化するプレイブックを検証してみました。

事前準備

本ソリューションを実装するために、以下のリソースとサービスの準備が必要です。

IP地理情報取得APIの設定

IP アドレスから地理情報を取得するため、whois 情報を提供する API サービスを準備します。今回は、Logic Appsでコネクタが提供されている ip2location を使用します。

Logic Apps の権限設定

Logic Apps でSentinel インシデントを操作するために、以下の設定を行います:

  1. Logic Apps のマネージドIDを有効化
  2. Sentinel レスポンダーロールを付与(インシデントへのコメント追加や更新を行うため)

Azure OpenAI リソースの準備

Azure OpenAI を使用してインシデントの分析を行うため、Azure OpenAI リソースを作成し、以下のいずれかの方法で認証を設定します:

  • 方法1: API キーを取得
  • 方法2: Entra ID 認証を使用し、Logic Apps のマネージド ID に適切なロールを付与

Logic Apps 実装

ワークフローの全体像

本ソリューションでは、以下の流れでインシデントの自動トリアージを実行します:

  1. Sentinel インシデントトリガー: 新しいインシデントが発生した際に自動実行
  2. IP エンティティの抽出: インシデントに含まれる IP アドレス情報を取得
  3. 地理情報の取得: 各IPアドレスの whois 情報を外部 API から取得
  4. 生成 AI 分析: エンティティ情報と whois 情報を Azure OpenAI で分析
  5. 自動処理: 分析結果に基づいてインシデントのクローズまたはコメント追加

各ステップの詳細実装

1. Sentinel インシデントトリガーの設定

新しいインシデントが作成された際に、自動的にワークフローが開始されるよう設定します。

2. 変数の初期化

処理中のデータを格納するための変数を初期化します:

  • whois 一時格納変数: whois 情報を取得する際の一時的なデータ保存用
  • whois 結果格納変数: 取得した whois 情報の最終的な格納用
  • Azure OpenAI 応答格納変数: Azure OpenAI からの分析結果を保存用

3. IPエンティティの抽出

インシデントに含まれるIPアドレスエンティティを取得します。

4. whois情報の取得

抽出された IP エンティティに対して、ip2location API を使用して whois 情報を取得します。複数の IP アドレスがある場合は、自動的に For each ループが設定されます。

5. whois 情報の蓄積

取得した whois 情報を一時変数に追記していきます。

6. JSON 形式への整形

For each ループ完了後、蓄積された whois 情報を JSON 配列形式に整形します。
使用する数式: concat('[',replace(variables('tmp'),'}{','},{'),']')

7. Azure OpenAI による分析

収集したエンティティ情報と whois 情報を基に、Azure OpenAI で過検知判定を実行します。

システムプロンプトの例

Sentinel で検出したインシデントについて、調査要否を判断する AI エージェントです。入力される情報はインシデントのエンティティであるユーザー、IP アドレス、URL、ホスト (マシン)、ファイルの情報と IP アドレスの whois 情報です。以下のいずれかの条件に合致する場合、正規の操作とみなし過検知と判断します。
- ユーザーがシステムアカウントもしくはゲストユーザーと考えられる場合
- すべての IP アドレスの所有者が Microsoft の場合
- ユーザーの所属国とすべての IP アドレス国情報が一致する場合
- ファイル名にテストや test などテスト用であることを示唆する場合

上記に基づき、以下の JSON フォーマットで応答してください。
{"falsePositive": "true or false", "reason": "日本語で判断基準と判断のもとになった情報を出力"}

8. Azure OpenAI 応答の解析とアクション実行

Azure OpenAI からの応答を JSON 形式でパースし、結果に基づいて適切なアクションを実行します。

9. 条件分岐による処理

分析結果が過検知 (False Positive) の場合はインシデントをクローズし、正規検知の場合はコメントを追記します。
Logic Apps の条件 (Condition) で true/false を比較する際は、bool() 関数を使用してBoolean 型に変換する必要があります。


実行結果の検証

実際にソリューションを動作させて、生成 AI によるインシデント分析の精度を確認しました。

正規検知 (True Positive) と判断されたケース

実際のセキュリティ脅威として判断し、継続的な調査が必要と評価されたインシデントの例です。



過検知 (False Positive) と判断されたケース

正常な業務活動として判断し、自動的にインシデントをクローズしたケースの例です。


まとめ

本記事では、Azure OpenAI を活用し、IP の地理情報やエンティティ情報をもとにインシデントの自動トリアージを行う Logic Apps プレイブックを検証しました。サンプルではインシデントをクローズしていますが、生成 AI による判定は100%の精度ではないため、クローズせずコメントのみを追加する柔軟な対応も選択肢の一つかと思います。これにより、チェック作業の簡略化と運用効率の向上が期待できます。

ARM テンプレート サンプル

https://github.com/katsato-ms/Microsoft/blob/main/Logic Apps/Check-FalsePositiveByAI/azuredeploy.json

Microsoft (有志)

Discussion