高度な捜索のクエリ言語について学習する
高度な捜索は、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
クエリについて説明し、検索するテーブルを指定する
クエリの先頭に短いコメントが追加され、その内容が説明されています。 このコメントは、後でクエリを保存し、組織内の他のユーザーと共有することを決定した場合に役立ちます。
// Finds PowerShell execution events that could involve a download
通常、クエリ自体はテーブル名で始まり、その後にパイプ (|
) で始まる複数の要素が続きます。 この例では、まず、2 つのテーブルと DeviceNetworkEvents
、 の和集合を作成し、DeviceProcessEvents
必要に応じてパイプされた要素を追加します。
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 |
テーブルのセットで述語と一致する行を検索します。 |
これらの演算子の実際の例を見るには、高度な捜索の [はじめに] セクションから実行します。
データ型を理解する
高度なハンティングでは、次の一般的な型を含む Kusto データ型がサポートされています。
データ型 | 説明とクエリの意味 |
---|---|
datetime |
通常、イベントのタイムスタンプを表すデータおよび時間の情報。 サポートされている datetime 形式を確認する |
string |
一重引用符 (' ) または二重引用符 (" ) で囲まれた UTF-8 の文字列。
文字列の詳細を読む |
bool |
このデータ型は true または false の状態をサポートします。
サポートされているリテラルと演算子を参照してください |
int |
32 ビット整数 |
long |
64 ビット整数 |
これらのデータ型の詳細については、 Kusto スカラー データ型に関するページを参照してください。
クエリを記述するときにヘルプを参照する
次の機能を利用して、クエリをより速く記述します。
- Autosuggest - クエリを記述するときに、高度なハンティングによって IntelliSense からの提案が提供されます。
- スキーマ ツリー - テーブルとその列の一覧を含むスキーマ表現が作業領域の横に表示されます。 詳細については、アイテムにカーソルを合わせてください。 アイテムをダブルクリックして、クエリ エディターに挿入します。
-
スキーマ参照 - テーブルと列の説明を含むポータル内参照、サポートされているイベントの種類 (
ActionType
値) とサンプル クエリ
エディターで複数のクエリを操作する
クエリ エディターを使用して、複数のクエリを試すことができます。 複数のクエリを使用するには:
各クエリを空の行で区切る。
クエリを実行する前に、クエリの任意の部分にカーソルを置いて、そのクエリを選択します。 これにより、選択したクエリのみが実行されます。 別のクエリを実行するには、それに応じてカーソルを移動し、[ クエリの実行] を選択します。
より効率的なワークスペースを作成するために、同じハンティング ページで複数のタブを使用することもできます。 [ 新しいクエリ ] を選択して、新しいクエリのタブを開きます。
その後、新しいブラウザー タブを開かなくても、さまざまなクエリを実行できます。
注:
高度なハンティングで複数のブラウザー タブを使用すると、保存されていないクエリが失われる可能性があります。 この問題を回避するには、ブラウザー のタブを個別に配置するのではなく、高度なハンティング内のタブ機能を使用します。
サンプル クエリを使用する
[はじめに] セクションでは、一般的に使用されている演算子を使用した簡単なクエリーをいくつか提供します。 これらのクエリを実行して、少し変更してみてください。
注:
基本的なクエリ サンプルとは別に、特定の脅威の捜索シナリオの共有クエリにアクセスすることもできます。 ページの左側または GitHub クエリ リポジトリの共有クエリを調べます。
クエリ言語のドキュメントにアクセスする
Kusto クエリ言語およびサポートされる演算子の詳細については、「Kusto クエリ言語のドキュメント」を参照してください。
注:
この記事の一部のテーブルは、Microsoft Defender for Endpointでは使用できない場合があります。 Microsoft Defender XDRをオンにして、より多くのデータ ソースを使用して脅威を探します。 高度なハンティング ワークフローをMicrosoft Defender for EndpointからMicrosoft Defender XDRに移動するには、「高度なハンティング クエリをMicrosoft Defender for Endpointから移行する」の手順に従います。
関連項目
ヒント
さらに多くの情報を得るには、 Tech Community 内の Microsoft Security コミュニティにご参加ください: 「Microsoft Defender XDR Tech Community」。