QRadar 検出ルールをMicrosoft Sentinelに移行する

この記事では、QRadar の検出ルールを特定し、Microsoft Sentinel の組み込みルールと比較して、それらに移行する方法について説明します。 既存の検出情報の在庫管理、QRadarとMicrosoft Sentinelのルール用語の比較、Content Hubの組み込み分析テンプレートの採用、オンラインツールでのクエリ変換、カスタムKustoクエリ言語(KQL)クエリの作成など、適切な移行経路の選択を案内します。 最終的には、Microsoft Sentinelの機械学習分析を活用しながら、検出ルールを移行するための構造化されたアプローチができているでしょう。

ルールを特定して移行する

Microsoft Sentinelでは、機械学習分析を使用して、忠実性が高く実用的なインシデントが作成され、既存の検出の一部がMicrosoft Sentinelで冗長になる場合があります。 そのため、すべての検出と分析のルールを盲目的に移行しないでください。 既存の検出ルールを特定するときに、これらの考慮事項を確認します。

  • ビジネスの優先順位と効率性を考慮して、ルールの移行を正当化するユース ケースを必ず選択してください。
  • Microsoft Sentinel のルールの種類を理解していることを確認します。
  • ルールの用語を理解していることを確認します。
  • 過去 6 か月から 12 か月間にアラートをトリガーしていないルールを確認し、まだ関連性があるかどうかを判断します。
  • 日常的に無視する低レベルの脅威やアラートを排除します。
  • 既存の機能を使用し、Microsoft Sentinelの組み込み分析ルールが現在のユース ケースに対応できるかどうかをチェックします。 Microsoft Sentinelは機械学習分析を使用して、忠実性が高く実用的なインシデントを生成するため、既存の検出の一部が不要になる可能性があります。
  • 接続されているデータ ソースを確認し、データ接続方法を確認します。 データ収集の会話を見直して、検出する予定のユース ケース全体でデータの深さと幅を確保します。
  • SOC Prime Threat Detection Marketplace などのコミュニティ リソースを調べて、ルールが使用可能かどうかをチェックします。
  • Uncoder.io などのオンライン クエリ コンバーターがルールに対して機能するかどうかを検討します。
  • ルールが使用できない場合、または変換できない場合は、KQL クエリを使用して手動で作成する必要があります。 ルール マッピングを確認して、新しいクエリを作成します。

検出ルールを移行するためのベスト プラクティスの詳細については、こちらをご覧ください。

分析ルールをMicrosoft Sentinelに移行するには:

  1. 移行する各ルールに対してテスト システムが用意されていることを確認します。

    1. 完全なテスト シナリオやスクリプトなど、移行されたルールの検証プロセスを準備します。

    2. 移行されたルールをテストするためにチームに役立つリソースがあることを確認します。

    3. 必要なデータ ソースが接続されていることを確認し、 データ接続方法を確認します。

  2. 検出が Content Hub の組み込みテンプレートとして使用できるかどうかを確認します。

    • 組み込みのルールで十分な場合は、関連するソリューションをインストールし、テンプレートを使用してワークスペースのルールを作成します。

      1. Microsoft Sentinelで、[コンテンツ管理] > [コンテンツ ハブ] に移動します。
      2. 関連する分析ルールを検索してインストールします。

      詳細については、「Microsoft Sentinelすぐに使えるコンテンツを検出して管理する」および「テンプレートからスケジュールされた分析ルールを作成する」を参照してください。

    • Content Hub で使用できる組み込みのルールでカバーされていない検出がある場合は、 Uncoder.io などのオンライン クエリ コンバーターを試してクエリを KQL に変換してください。

      トリガー条件とルール アクションを特定し、KQL クエリを構築して確認します。

    • Content Hub ソリューションでもオンラインのルール コンバーターでも十分でない場合は、ルールを手動で作成する必要があります。 このような場合は、次の手順を使用してルールの作成を開始します。

      1. ルールで使用するデータ ソースを特定します。 クエリを実行するテーブルを識別するために、Microsoft Sentinelのデータ ソースとデータ テーブルの間にマッピング テーブルを作成します。

      2. ルールで使用するデータ内の属性、フィールド、またはエンティティを特定します。

      3. ルールの条件とロジックを特定します。 この段階では、KQL クエリの作成方法の参考として、ルール テンプレートを使用できます。

        フィルター、相関ルール、アクティブ リスト、参照セット、ウォッチリスト、検出異常、集計などを検討します。 レガシ SIEM から提供されている参照を使用して、クエリ構文を最適にマップする方法を理解することができます。

      4. トリガー条件とルール アクションを特定し、KQL クエリを構築して確認します。 クエリを確認するときは、KQL 最適化ガイダンス リソースを検討してください。

  3. 関連する各ユース ケースでルールをテストします。 期待される結果が得られない場合は、KQL を確認し、もう一度テストすることができます。

  4. 問題なければ、そのルールは移行済みと見なせます。 必要に応じて、ルール アクションのプレイブックを作成します。 詳細については、「Microsoft Sentinelのプレイブックを使用して脅威対応を自動化する」を参照してください。

Microsoft Sentinel分析ルールと KQL の詳細については、次のリソースを参照してください。

ルールの用語を比較する

この表は、QRadar と比較して、Microsoft Sentinelのルールの概念を明確にするのに役立ちます。 Microsoft Sentinelのルールタイプには、スケジュールクエリ、Fusion(複数のデータソースからのアラートを自動的にmachine learningを用いてインシデントに相関させる)、Microsoft Security、そしてMachine Learning(ML)行動分析が含まれます。

QRadar Microsoft Sentinel
規則の種類 -イベント
-フロー
- 共通
- オフェンス
- 異常検出ルール
- スケジュールクエリ
- 核融合
- Microsoft Security
- Machine Learning(ML)行動分析
基準 テスト条件で定義する KQL で定義する
トリガー条件 ルールで定義する しきい値: クエリ結果の数
操作 - 攻撃を創出する
- 新しいイベントを送信
- 参照セットまたはデータに追加
- それ以外にも
- アラートまたはインシデントの作成
- ロジックアプリとの統合

ルール サンプルのマップと比較

これらのサンプルを使用して、QRadar のルールを比較し、さまざまなシナリオでMicrosoft Sentinelにマップします。 サンプルクエリは、Microsoft Sentinelで使用されているKusto Query Language(KQL)で書かれています。

ルール 構文 サンプル検出ルール (QRadar) KQL クエリのサンプル リソース
一般的なプロパティ テスト QRadar 構文 - 正規表現の例
- AQLフィルタークエリの例
- 等しい/等しくない例
- 正規表現の例
- AQLフィルタークエリの例
- 等しい/等しくない例
- 正則表現: 正則表現と一致する
- AQLフィルタークエリ: 文字列演算子
- 等しい/等しくない: 文字列演算子
日付/時刻テスト QRadar 構文 - 月中の選択された日の例
- 曜日の選択例
- 例えば、前後/前/で
- 月中の選択された日の例
- 曜日の選択例
- 例えば、前後/前/で
- 日付と時刻のオペレーター
- 選択された月の日: dayofmonth()
- 選択された曜日: dayofweek()
- 後/前/時: format_datetime()
イベントプロパティのテスト QRadar 構文 - IPプロトコルの例
- イベントペイロード文字列の例
- IPプロトコルの例
- イベントペイロード文字列の例
- IPプロトコル: 文字列演算子
- イベントペイロード文字列:
関数: カウンター QRadar 構文 イベント プロパティと時刻の例 イベント プロパティと時刻の例 要約する
関数: 負の条件 QRadar 構文 負の条件の例 負の条件の例 - join()
- 文字列演算子
- 数値演算子
関数: 単純 QRadar 構文 単純な条件の例 単純な条件の例 または
IP/ポート テスト QRadar 構文 - ソースポートの例
- ソースIPの例
- ソースポートの例
- ソースIPの例
ログソーステスト QRadar 構文 ログ ソースの例 ログ ソースの例

一般的なプロパティ テストの構文

一般的なプロパティ テスト 規則の QRadar 構文を次に示します。

一般的なプロパティ テスト 規則の構文を示す図。

一般的なプロパティ テスト: 正規表現の例 (QRadar)

正規表現を使用するサンプルの QRadar 共通プロパティ テスト 規則の構文を次に示します。

when any of <these properties> match <this regular expression>

QRadarのサンプルルールはこちらです:

正規表現を使用する一般的なプロパティ テスト ルールを示す図。

一般的なプロパティ テスト: 正規表現の例 (KQL)

KQL の正規表現を使用した一般的なプロパティ テスト ルールを次に示します。

CommonSecurityLog
| where tostring(SourcePort) matches regex @"\d{1,5}" or tostring(DestinationPort) matches regex @"\d{1,5}"

一般的なプロパティ テスト: AQL フィルター クエリの例 (QRadar)

以下はAQLフィルタークエリを用いたQRadar共通属性テストルールの例の構文です:

when the event matches <this> AQL filter query

QRadarのサンプルルールはこちらです:

A Q L フィルター クエリを使用する一般的なプロパティ テスト ルールを示す図。

一般的なプロパティ テスト: AQL フィルター クエリの例 (KQL)

こちらがKQLでのAQLフィルタークエリに関する一般的なプロパティテストルールです:

CommonSecurityLog
| where SourceIP == '10.1.1.10'

共通プロパティテスト: 等しい/等しくないの例 (QRadar)

以下は equals または not equals 演算子を用いるサンプルQRadar共通プロパティテストルールの構文です:

and when <this property> <equals/not equals> <this property>

こちらがQRadarのサンプルルールです:等 価/等しくないものを用いる共通性質テストルールを示す図です。

一般的なプロパティのテスト: 等しい/等しくないの例 (KQL)

KQLにおける共通性質テストのルールは、KQLの equals または not equals 演算子を使ったものです:

CommonSecurityLog
| where SourceIP == DestinationIP

日付/時刻テストの構文

これが日付/時刻テストルールのQRadar構文です:

日付/時刻テストルールの構文を示す図。

日付/時刻テスト: 月の選択日の例 (QRadar)

以下は、月の指定日を使用するQRadarの日付/時刻テストのサンプルの構文です:

and when the event(s) occur <on/after/before> the <selected> day of the month

QRadarのサンプルルールはこちらです:

選択した日を使用する日付/時刻テスト ルールを示す図。

日付/時刻テスト: 月の選択日の例 (KQL)

こちらがKQLの日付・時間テストルールで、月の指定日を指定しています:

SecurityEvent
 | where dayofmonth(TimeGenerated) < 4

日付/時刻テスト: 選択した曜日の例 (QRadar)

選択した曜日を使用するサンプル QRadar 日付/時刻テスト ルールの構文を次に示します。

and when the event(s) occur on any of <these days of the week{Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}>

QRadarのサンプルルールはこちらです:

選択した曜日を使用する日付/時刻テスト ルールを示す図。

日付/時刻テスト: 選択した曜日の例 (KQL)

こちらがKQLの日付・時間テストルールで、曜日が指定されています:

SecurityEvent
 | where dayofweek(TimeGenerated) between (3d .. 5d)

日付/時刻テスト: after/before/at の例 (QRadar)

以下は、 afterbefore、または at 演算子を使うサンプルQRadarの日付/時刻テストルールの構文です:

and when the event(s) occur <after/before/at> <this time{12.00AM, 12.05AM, ...11.50PM, 11.55PM}>

QRadarのサンプルルールはこちらです:

after/before/at 演算子を使用する日付/時刻テスト ルールを示す図。

日付/時刻のテスト: after/before/at の例 (KQL)

KQLで afterbefore、または at 演算子を使う日付・時間テストのルールは以下の通りです:

SecurityEvent
| where format_datetime(TimeGenerated,'HH:mm')=="23:55"

TimeGenerated は UTC/GMT です。

イベント プロパティ テスト構文

イベントプロパティテストルールのQRadar構文は以下の通りです:

イベント プロパティ テストルールの構文を示す図。

イベント プロパティ テスト: IP プロトコルの例 (QRadar)

以下はIPプロトコルを使用するQRadarイベントプロパティテストルールのサンプルの構文です:

and when the IP protocol is one of the following <protocols>

QRadarのサンプルルールはこちらです:

I P プロトコルを使用するイベント プロパティ テスト ルールを示す図。

イベント プロパティ テスト: IP プロトコルの例 (KQL)

こちらがKQLのIPプロトコルフィルターを用いたイベントプロパティテストルールです:

CommonSecurityLog
| where Protocol in ("UDP","ICMP")

イベント プロパティ テスト: イベント ペイロード文字列の例 (QRadar)

以下は Event Payload 文字列値を使うQRadarイベントプロパティテストルールの例文です:

and when the Event Payload contains <this string>

QRadarのサンプルルールはこちらです:

イベント ペイロード文字列を使用するイベント プロパティ テスト ルールを示す図。

イベント プロパティ テスト: イベント ペイロード文字列の例 (KQL)

KQL の Event Payload 文字列を持つイベント プロパティ テスト ルールを次に示します。 パフォーマンスを最適化するには、テーブル名がわかっている場合は、 search コマンドを使用しないでください。

CommonSecurityLog
| where DeviceVendor has "Palo Alto"

search "Palo Alto"

関数: カウンター構文

こちらがカウンターを使う関数ルールのQRadar構文です:

カウンターを使用する関数ルールの構文を示す図。

カウンタ: イベントプロパティと時間の例 (QRadar)

以下は、定義された数のイベントプロパティを一定分に使うサンプルQRadar関数ルールの構文です」

and when at least <this many> events are seen with the same <event properties> in <this many> <minutes>

QRadarのサンプルルールはこちらです:

イベント プロパティを使用する関数ルールを示す図。

カウンター: イベント プロパティと時刻の例 (KQL)

こちらがKQLにおけるイベントの性質と時間条件に関するカウンタールールです:

CommonSecurityLog
| summarize Count = count() by SourceIP, DestinationIP
| where Count >= 5

関数: 負の条件構文

以下は負の条件を使う関数ルールのQRadar構文です:

負の条件を使用する関数ルールの構文を示す図。

負の条件の例 (QRadar)

以下は負の条件を使うサンプルQRadar関数ルールの構文です:

and when none of <these rules> match in <this many> <minutes> after <these rules> match with the same <event properties>

QRadar で定義されている 2 つのルールを次に示します。 否定条件は以下のルールに基づいています。

負の条件ルールに使用するイベント プロパティ テスト ルールを示す図。

負の条件ルールに使用される一般的なプロパティ テスト ルールを示す図。

以下は、以前に定義された2つのQRadarルール(Test2とTest6)に基づくネガティブ条件ルールのサンプルです:

負の条件を持つ関数ルールを示す図。

負の条件の例 (KQL)

こちらがKQLの rightanti 結合に関するネガティブ条件ルールです:

let spanoftime = 10m;
let Test2 = (
CommonSecurityLog
| where Protocol !in ("UDP","ICMP")
| where TimeGenerated > ago(spanoftime)
);
let Test6 = (
CommonSecurityLog
| where SourceIP == DestinationIP
);
Test2
| join kind=rightanti Test6 on $left. SourceIP == $right. SourceIP and $left. Protocol ==$right. Protocol

関数: 単純な条件構文

こちらが単純な条件を使う関数ルールのQRadar構文です:

単純な条件を使用する関数ルールの構文を示す図。

単純な条件の例 (QRadar)

以下は単純な条件を用いたQRadar関数ルールの例文です。

and when an event matches <any|all> of the following <rules>

QRadarのサンプルルールはこちらです:

単純な条件を持つ関数ルールを示す図。

単純な条件の例 (KQL)

KQLの簡単な条件ルールは以下の通りです:

CommonSecurityLog
| where Protocol !in ("UDP","ICMP") or SourceIP == DestinationIP

IP/ポートテストの構文

IPやポートテストのルールのQRadar構文は以下の通りです:

IP/ポート テスト 規則の構文を示す図。

IP/ポート テスト: ソース ポートの例 (QRadar)

以下はソースポートを指定するQRadarルールの文法です:

and when the source port is one of the following <ports>

QRadarのサンプルルールはこちらです:

ソース ポートを指定する規則を示す図。

IP/ポート テスト: ソース ポートの例 (KQL)

こちらがKQLのIP/ポートテストルールで、ソースポートフィルター付きです:

CommonSecurityLog
| where SourcePort == 20

IP/ポート テスト: ソース IP の例 (QRadar)

以下はソースIPを指定するQRadarルールのサンプルの構文です:

and when the source IP is one of the following <IP addresses>

QRadarのサンプルルールはこちらです:

ソース IP アドレスを指定する規則を示す図。

IP/ポート テスト: ソース IP の例 (KQL)

こちらがKQLの送信元IPフィルターを用いたIP/ポートテストルールです:

CommonSecurityLog
| where SourceIP in ("10.1.1.1","10.2.2.2")

ログソーステストの構文

ログソーステストルールのQRadar構文はこちらです:

ログ ソース テスト ルールの構文を示す図。

ログ ソースの例 (QRadar)

ログソースを指定するQRadarルールの例の構文は以下の通りです:

and when the event(s) were detected by one or more of these <log source types>

QRadarのサンプルルールはこちらです:

ログ ソースを指定するルールを示す図。

ログ ソースの例 (KQL)

こちらがKQLのログソーステストルールです。

OfficeActivity
| where OfficeWorkload == "Exchange"

次のステップ