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

注意

Microsoft 365 Defender を体験してみませんか? Microsoft 365 Defenderを評価してパイロットする方法の詳細については、こちらを参照してください。

適用対象:

  • Microsoft 365 Defender
  • Microsoft Defender for Endpoint

高度な捜索は、Kusto クエリ言語に基づいています。 Kusto 演算子とステートメントを使用して、特殊化されたスキーマ内の情報を検索するクエリを作成 できます

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

これらの概念をよりよく理解するために、最初のクエリを実行します。

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

Microsoft 365 Defender ポータルで 、Hunting に移動して最初のクエリを実行します。 次の例を使用してください。

// 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

高度な捜索でこのクエリを実行する

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

// Finds PowerShell execution events that could involve a download

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

union DeviceProcessEvents, DeviceNetworkEvents

時間範囲を設定する

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

| where Timestamp > ago(7d)

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

時間範囲の直後に、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 テーブルのセットで述語と一致する行を検索します。

これらの演算子の実際の例を見るには、高度な捜索の [はじめに] セクションから実行します。

データ型を理解する

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

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

これらのデータ型の詳細については、 Kusto スカラー データ型に関するページを参照してください

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

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

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

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

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

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

Microsoft 365 Defender ポータルの **[新しいクエリ] ページで複数のクエリを実行する例

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

Microsoft 365 Defender ポータルで [高度な検索で新規作成] を選択して新しいタブを開く

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

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

注意

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

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

[はじめに] セクションでは、一般的に使用されている演算子を使用した簡単なクエリーをいくつか提供します。 これらのクエリを実行して、少し変更してみてください。

Microsoft 365 Defender ポータルの **Advanced hunting** ページの **[作業の開始]** セクション

注意

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

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

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

注意

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