高度な捜索のクエリ言語について学習する

高度な捜索は、Kusto クエリ言語に基づいています。 Kustoの演算子や文を使って、専門的な 高度なハンティングスキーマ内で情報を見つけるクエリを作成できます。

この短いビデオを見て、便利な Kusto クエリ言語の基本について説明します。

高度なハンティングでの Kusto クエリ言語の基本を理解するには、最初のクエリを実行します。

最初のクエリを試してみる

Microsoft Defender ポータルで、[ハンティング] に移動して、最初のクエリを実行します。 次の例を使用してください。

// Finds PowerShell execution events that could involve a download
union DeviceProcessEvents, DeviceNetworkEvents
| where Timestamp > ago(7d)
// Pivoting on PowerShell processes
| where FileName in~ ("powershell.exe", "powershell_ise.exe")
// Suspicious commands
| where ProcessCommandLine has_any("WebClient",
 "DownloadFile",
 "DownloadData",
 "DownloadString",
"WebRequest",
"Shellcode",
"http",
"https")
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, RemoteIPType
| top 100 by Timestamp

高度なハンティングで、疑わしい PowerShell のダウンロード コマンドに関するクエリを実行する

クエリの目的を説明する短いコメントがクエリの先頭に追加されました。 このコメントは、後でクエリを保存し、組織内の他のユーザーと共有することを決定した場合に役立ちます。

// Finds PowerShell execution events that could involve a download

通常、クエリ自体はテーブル名で始まり、パイプ (|) で始まるいくつかの要素が続きます。 この例では、まず、 DeviceProcessEventsDeviceNetworkEventsの 2 つのテーブルの和集合を作成し、必要に応じてパイプされた要素を追加します。

union DeviceProcessEvents, DeviceNetworkEvents

時間範囲を設定する

最初のパイプされた要素は、過去7日間を対象とした時間フィルターです。 時間範囲を制限することで、クエリが適切に実行され、管理可能な結果が返され、タイムアウトが回避されるのに役立ちます。

| where Timestamp > ago(7d)

注:

Kustoのタイムフィルターは、あなたが指定したタイムゾーンに関わらずUTCで設定されています。

特定のプロセスを確認する

時間範囲の直後に、PowerShell アプリケーションを表すプロセス ファイル名を検索します。

// Pivoting on PowerShell processes
| where FileName in~ ("powershell.exe", "powershell_ise.exe")

特定のコマンド文字列を検索する

その後、クエリでは、PowerShell を使用してファイルをダウンロードするために通常使用されるコマンド ライン内の文字列を検索します。

// Suspicious commands
| where ProcessCommandLine has_any("WebClient",
    "DownloadFile",
    "DownloadData",
    "DownloadString",
    "WebRequest",
    "Shellcode",
    "http",
    "https")

結果の列と長さをカスタマイズする

クエリによって、検索するデータが明確に識別されるようになったので、結果の見た目を定義できます。 project は特定の列を返し、 top は結果の数を制限します。 これらの演算子は、結果が適切に書式設定され、かなり大きく、処理が容易であることを確認するのに役立ちます。

| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, RemoteIPType
| top 100 by Timestamp

[ クエリの実行 ] を選択して結果を表示します。

ヒント

クエリ結果をグラフとして表示し、フィルターをすばやく調整できます。 ガイダンスについては、クエリ結果の操作に関するページを参照してください。

一般的なクエリ演算子について学習する

最初のクエリを実行し、そのコンポーネントの一般的なアイデアを得ました。 少しバックトラックし、いくつかの基本を学ぶ時間です。 高度な捜索で使用される Kusto クエリ言語は、次のような一般的な演算子をサポートします。

演算子 説明および使用法
where テーブルを、条件を満たす行のサブセットに絞り込みます。
summarize 入力テーブルの内容を集約したテーブルを作成します。
join 各テーブルから指定された列の値を照合して、2 つのテーブルの行を結合し、新しいテーブルを作成します。 方法については、「 KQL でのテーブルの結合 」をご覧ください。
count 入力レコード セットのレコード数を返します。
top 指定された列によって並べ替えられた最初の N レコードを返します。
limit 指定された行数まで返します。
project 含める列を選択し、名前を変更または削除し、新しい計算列を挿入します。
extend 計算列を作成し、結果セットに追加します。
makeset Expr がグループ内でとる個別の値のセットの動的 (JSON) 配列を返します。
find テーブルのセットで述語と一致する行を検索します。

これらのオペレーターのライブ例を見るには、Microsoft DefenderポータルのAdvanced Huntingページの「はじめに」ペインから実行してください。

データ型を理解する

高度なハンティングでは、次の一般的な型を含む Kusto データ型がサポートされています。

データ型 説明とクエリの意味
datetime 通常、イベントのタイムスタンプを表す日付と時刻の情報。 サポートされている日時形式
string 一重引用符 (') または二重引用符 (") で囲まれた UTF-8 の文字列。 文字列データ型
bool このデータ型は true または false の状態をサポートします。 サポートされているブール型リテラルと演算子
int 32 ビット整数
long 64 ビット整数

Kustoスカラーデータ型について詳しく知りたい方は、 Kustoスカラーデータ型をご覧ください。

クエリを記述するときにヘルプを参照する

次の機能を利用して、クエリをより速く記述します。

  • Autosuggest - クエリを記述するときに、高度なハンティングによって IntelliSense からの提案が提供されます。
  • スキーマ ツリー - テーブルとその列の一覧を含むスキーマ表現が作業領域の横に表示されます。 詳細については、アイテムにカーソルを合わせてください。 アイテムをダブルクリックして、クエリ エディターに挿入します。
  • スキーマ参照 - テーブルと列の説明、サポートされているイベントの種類 (ActionType 値) とサンプル クエリを含むポータル内参照

エディターで複数のクエリを操作する

クエリ エディターを使用して、複数のクエリを試すことができます。 複数のクエリを使用するには:

  • 各クエリを空の行で区切る。

  • クエリを実行する前に、クエリの任意の部分にカーソルを置いて、そのクエリを選択します。 これにより、選択したクエリのみが実行されます。 別のクエリを実行するには、それに応じてカーソルを移動し、[ クエリの実行] を選択します。

    Microsoft Defender ポータルの **新しいクエリ** ページでの複数のクエリ実行の例

    より効率的なワークスペースを作成するために、同じハンティング ページで複数のタブを使用することもできます。 [ 新しいクエリ ] を選択して、新しいクエリのタブを開きます。

    Microsoft Defender ポータルで [高度なハンティングで新規作成] を選択して新しいタブを開く

    その後、新しいブラウザー タブを開かなくても、さまざまなクエリを実行できます。

    Microsoft Defender ポータルで高度なハンティング ページを離れることなく、さまざまなクエリを実行する

注:

高度なハンティングで複数のブラウザー タブを使用すると、保存されていないクエリが失われる可能性があります。 この問題を回避するには、ブラウザー のタブを個別に配置するのではなく、高度なハンティング内のタブ機能を使用します。

サンプル クエリを使用する

[はじめに] セクションでは、一般的に使用されている演算子を使用した簡単なクエリーをいくつか提供します。 「 はじめ に」セクションでサンプル クエリを実行し、小さな変更を加えてみます。

Microsoft Defender ポータルの **高度なハンティング** ページの **はじめに** セクション

注:

基本的なクエリ サンプルとは別に、特定の脅威の捜索シナリオの共有クエリにアクセスすることもできます。 ページの左側または GitHub クエリ リポジトリの共有クエリを調べます。

クエリ言語のドキュメントにアクセスする

Kusto クエリ言語およびサポートされる演算子の詳細については、「Kusto クエリ言語のドキュメント」を参照してください。

注:

この記事の一部のテーブルは、Microsoft Defender for Endpointでは使用できない場合があります。 Microsoft Defenderを有効にして、より多くのデータ ソースを使用して脅威を検出します。 高度なハンティング ワークフローをMicrosoft Defender for EndpointからMicrosoft Defenderに移動するには、「Microsoft Defender for Endpoint から高度なハンティング クエリを移行する」の手順に従います。

ヒント

さらに詳しく知りたいですか? Tech Community 内の Microsoft Security コミュニティにご参加ください: 「Microsoft Defender XDR Tech Community」。