コンテンツにスキップ

詳細検索クエリ言語🔗

注意

Taegis XDRでは、Alerts および Investigations という用語が、最近 検出 および ケース に変更されました。SophosとTaegisテクノロジーのプラットフォーム統合作業が進行中のため、引き続き旧用語が参照されている場合があります。詳細については、Taegis用語の更新をご覧ください。

クエリ言語は、テナント内で利用可能な検出やイベントを検索するための強力なインターフェースです。Secureworks® Taegis™ XDRのクエリ言語の基本構文、スキーマ、演算子を学び、ゼロから検索クエリを作成しましょう。

クエリ言語には、Taegis Menuから詳細検索に移動してアクセスします。

注意

最後に選択した詳細検索インターフェースがデフォルトの検索設定として保存されます。どちらかの詳細検索オプションの右上にあるボタンで切り替えが可能です。たとえば、直近で詳細検索ビルダーを使用した場合は、右上からクエリ言語を使用を選択する必要があります。

クエリ言語

Taegis AIで生成を選択すると、自然言語のクエリを詳細検索クエリ言語に変換できます。詳細は検索のためのTaegis AIをご覧ください。

クエリジェネレーターへのアクセス

ヒント

検索のヘルプ🔗

検索のヘルプを選択すると、インラインヘルプが開きます。内容は以下の通りです。

  • クエリ作成を支援する「自分で作成」セクション
  • 基本構文
  • 利用可能なデータ型(スキーマ)とフィールド名(入力時にコンテキストに応じて表示)
  • 演算子

検索のヘルプリンク、または下部の矢印アイコンを選択して、インラインヘルプの展開・折りたたみができます。

スキーマライブラリーを選択すると、XDRで検索可能なすべてのスキーマとフィールドを確認できます。

クエリ言語ヘルプ

基本構文🔗

クイックスタート🔗

はじめに、過去24時間の process イベントを検索するシンプルな例を実行できます。

FROM process earliest =-24h

次に、process を他のイベントタイプ(下記の 自分で作成 セクションを参照)に置き換えることもできます。複数のイベントタイプをクエリすることも可能です。例えば、以下のようになります。

FROM process, auth earliest =-12h

クエリ言語の基本🔗

クエリ言語で文字列を指定するには、シングルクォートを使用します(WHERE句は常に省略可能です)。

FROM process WHERE image_path CONTAINS 'powershell.exe'

文字列値自体にシングルクォートが含まれる場合は、最初のシングルクォートの前に e を付け、文字列内のシングルクォートにはバックスラッシュでエスケープしてください。

from process where commandline contains e'echo \'mimikatz\''

演算子および指定された値は大文字・小文字を区別しません。例では、強調のために演算子を大文字で記載しています。

1つの検索で検出とイベントを同時にクエリすることはできません。2つの独立したクエリを実行する必要があります。

個々のイベントタイプに依存しないフィールド名を使用してマルチイベント検索を実行する場合、個別のクエリが実行され、その結果が合算されて返されます。

XDR製品内の検索機能は、検出検索で24,000文字、イベント検索で10,000文字の入力テキストをサポートしています。論理型や特殊文字の使用によりクエリが展開されるため、実行時に最大制限に達する場合があります。

より複雑なクエリオプションや例(ブール論理、正規表現マッチングなど)については、演算子 セクションを参照してください。

一般的なフィールドと論理型を用いた検索🔗

スキーマを指定せずに、関連するすべてのスキーマを自動的に検索することも可能です。

一般的なフィールド は、複数のイベントタイプのスキーマに存在します。例えば、sensor_type = 'ENDPOINT_TAEGIS' と指定すると、Taegis™ Endpoint Agent からのすべての関連スキーマのイベントが返されます。

論理型 は、どのスキーマや特定のフィールドを検索すべきかわからない場合に使用できます。論理型は @ 記号で始まります。これにより、関連するスキーマが自動的に検索されます。例えば、以下のようにクエリできます。

@ip='8.8.8.8'
@user CONTAINS 'system'

論理型の詳細や例については、論理型 セクションを参照してください。

注意

@raw 論理型または original_data フィールドを使用したクエリは、直近20日間のデータのみアクセス可能です。より長い期間をカバーする必要がある場合は、20日ごとにクエリを実行するか、時間範囲を20日以内に絞り込んでください。

検出の検索🔗

検出は、検出スキーマに固有のフィールドだけでなく、イベントスキーマのフィールドでも検索できます。イベントスキーマによる検索は、より多くのフィールドを利用できるため、検出内の限られたフィールドに制約されず、柔軟に検索できます。また、検出内で一般化された特定の関係を持つフィールドも検索可能です。例えば、process.image_pathprocess.parent_image_path の両方のフィールドは、検出スキーマ内では fileName エンティティとして正規化されています。

検出を検索するには、クエリの先頭で from detection 句を使用して「detection」データタイプを指定する必要があります。イベントフィールドのみを指定し、検出データタイプを明示的に指定しない場合は、イベント検索が実行されます。イベントフィールドを使用して検出検索を行う場合、フィールド名の前にイベントタイプを付ける必要があります。例えば、プロセスのイメージパスで検出を検索する場合は、process.image_path のように指定します。

検出クエリでも、上記の論理型を使用できます。

検出スキーマ内のタイトルフィールドで検出を検索する例:

from detection where title contains 'Powershell'

イベントスキーマ内の commandline フィールドで検出を検索する例:

from detection where process.commandline contains 'powershell.exe'

論理型フィールドを使用して検出を検索する例:

from detection where @ip = 10.1.1.10

イベントの検索🔗

イベントタイプは、さまざまなデータ型を持つフィールドで構成されています。これらのデータ型には以下が含まれます。

  • プリミティブフィールド:文字列、数値、ブール値などの基本型
  • 構造化フィールド:繰り返し文字列、マップ、ネストされたフィールドを持つオブジェクトなどの複雑な型

イベントが正規化される際、一部のフィールドには自動的にデフォルト値が設定されますが、まったく値が設定されない場合もあります。Taegisデータレイクに保存されたデータを検索するAdvanced Searchを使用する際、これらのフィールドを用いたイベント検索のガイダンスは以下の通りです。

  • 構造化フィールドの検索:IS NULL または IS NOT NULL 演算子を使用して、構造化フィールドの有無を確認できます。
  • プリミティブフィールドの検索:元のログデータにプリミティブフィールドの値が含まれていない場合、デフォルト値が設定されます。

    • 文字列 のデフォルトは空文字列('')
    • 数値 のデフォルトは0
    • ブール値 のデフォルトはfalse

Advanced Searchの スキーマライブラリー を使用して、フィールドや型を確認してください。

演算子🔗

クエリ言語は、以下に示す演算子をサポートしています。すべての文字列値はシングルクォートで囲む必要があり、リテラルとして解釈されます。すべての検索は大文字・小文字を区別しません(containsCONTAINSConTAinS は同等です)。

演算子 説明
= <literal> 大文字・小文字を区別しない完全一致
!= <literal> 等価性のブールNOT
> <number> 数値がより大きい
>= <number> 数値が以上
< <number> 数値がより小さい
<= <number> 数値が以下
contains <string> フィールド内の文字列リテラルに対する大文字・小文字を区別しない部分一致
<fieldname> !contains <string exclusion> フィールド内の文字列リテラルに対する大文字・小文字を区別しない部分一致の否定
matches <string> フィールド内のグロブ形式文字列パターンに対する大文字・小文字を区別するワイルドカード一致
<fieldname> !matches <string exclusion> フィールド内のグロブ形式文字列パターンに対する大文字・小文字を区別しないワイルドカード一致の否定
matches_regex <string> フィールド内の文字列パターンに対する大文字・小文字を区別しない正規表現一致
!matches_regex <string> フィールド内の文字列パターンに対する大文字・小文字を区別しない正規表現一致の否定
in <value list> フィールド値が値リストに含まれていれば真となるブール式
!in <value list> フィールド値が値リストに含まれていなければ真となるブール式
is not null フィールドが存在し、nullでないことをテスト
is null 指定したフィールドが存在しない、またはnullの場合に真を返す

contains🔗

contains 演算子は、クォートされた文字列またはリテラル文字列値の部分一致をテストし、ワイルドカードの展開や一致は行いません。代わりに、contains 演算子を使用してアスタリスク * を指定した場合、* 記号はリテラル文字として扱われます。

例: コマンドラインに’netsvc.exe’が含まれるプロセスイベントを検索

from process commandline contains 'netsvc.exe'

matches🔗

matches 演算子は、値文字列にサポートされているグロブパターンを指定することでワイルドカード検索として実行されます。サポートされているグロブ文字は * および ? です。アスタリスクまたはクエスチョンマーク記号がない場合、クエリはリテラルの等価性検索として実行されます。アスタリスクは0文字以上(空文字も含む)に一致します。クエスチョンマークは任意の1文字に一致します。

例: ドメイン名がサフィックス’.google.com’で終わるdnsqueryイベントを検索

from dnsquery @domain matches '*.google.com'

matches_regex🔗

matches_regex 演算子は、クエリ文字列内で正規表現をサポートします。正規表現値では、ドットなど正規表現構文内で特別な意味を持つ文字をエスケープする必要があります。イベントと検知では異なるバックエンドを使用しており、実行されるクエリによって正規表現エンジンおよび記法が異なります。

イベントの場合、正規表現エンジンはJava互換です。記法については Java正規表現ドキュメント を参照してください。

検知の場合、正規表現エンジンはLuceneベースです。記法については Elastic正規表現ドキュメント を参照してください。

例: コマンドラインフィールドが小文字英数字で構成され、拡張子が.exeで終わる文字列に一致するプロセスイベントを検索

from process commandline matches_regex '[a-z0-9]*\.exe'

予約語🔗

以下の識別子は予約語であり、検索条件でリテラル値として使用する場合は必ずシングルクォートで囲む必要があります。

from process where commandline contains 'search'

注意

すべての演算子/予約語は大文字・小文字を区別しません(例:ANDandaNd は同等です)。

AGG, AGGREGATE, AND, AS, ASC,
AVG, BY, CONTAINS, COUNT,
CARDINALITY, DESC, DESCENDANT,
EARLIEST, FALSE, FIELDS, FROM,
HEAD, IN, IS, INDEX,
LATEST, MATCHES, MATCHES_REGEX,
MAX, MIN, NOT, NOW, NULL, OF,
OR, SEARCH, SORT, SUM,
TAIL, TOP, TRUE, WHERE

論理型🔗

共通フィールド🔗

複数のイベントタイプに存在するフィールドを検索すると、このフィールドに対するクエリに一致するすべてのイベントタイプから結果が返されます。sensor_type フィールドはすべてのイベントタイプに存在し、特定のデータソースからのすべてのイベントを検索するために使用できます。例えば、sensor_type = 'ENDPOINT_TAEGIS' と指定すると、Taegis エンドポイントエージェントからのすべての関連スキーマのイベントが返されます。

多くのイベントに共通しているが、すべてのイベントに存在するわけではない他のフィールドには、sensor_id, host_id があります。

リソースID🔗

XDRの各イベントには一意の resource_id が付与されていますが、これは通常の共通フィールドではありません。有効な resource_id=<値> で検索すると、イベントタイプに関係なく一致する1件のイベントが自動的に返されます。

CIDR表記🔗

クエリ言語は、IPアドレスフィールドに対して =(リテラル)、matches または IN 演算子を使用する場合、CIDR表記をサポートしています。これらの演算子の否定(例:!=!matches!IN)もCIDR表記でサポートされています。

現時点では、CIDR表記はイベントクエリのみでサポートされています。検出クエリではCIDR表記はサポートされておらず、有効なIPアドレスを使用する必要があります。

例: ソースアドレスがIP範囲 '192.168.2.0/24' 内にあるnetflowイベントを検索するクエリ:

from netflow where source_address = '192.168.2.0/24'

注意

以下の matches クエリは、CIDRクエリではなくテキストのワイルドカードマッチとして動作します:

from netflow where @ip matches '192.168.2*'

以下の matches クエリは、CIDRクエリとして動作します:

from netflow where @ip matches '192.168.2.*.*'

論理型🔗

論理型は、特定のフィールドカテゴリに対して適切なデータスキーマのフィールド名にマッピングされる特別なフィールドです。論理型は、各スキーマごとに個別のフィールド名を覚えて指定する必要をなくすために設計されています。論理型は @ プレフィックスで示されます。@<論理型名> で指定すると、関連するすべてのイベントフィールドが自動的に検索されます。

注意

論理型に否定演算子を使用した場合、検索エンジンはクエリ内の論理型にマッピングされたどのフィールドも指定した値に一致しないことを保証します。

@raw 論理型を使用する場合は、生データ検索時のバックエンドの都合上、バックスラッシュをエスケープする必要があります。詳細はこの論理型セクションの最後の例をご参照ください。

クエリが論理型のみの場合、検出とイベントの結果がタブ表示されます。

例: 値が 'system' のユーザ名フィールドを持つすべての検出とイベントを検索するクエリ:

@user contains 'system'

論理型マッピング🔗

最新の論理型マッピングは、XDRの 詳細検索検索のヘルプ でご確認いただけます。

論理型クエリ例🔗

@raw contains '192.168.0.1'

すべてのタイプを横断して、original_data テキスト(生メッセージ)に '192.168.0.1' が含まれるすべてのイベントを返します。

from netflow @ip = '10.0.0.1'

これは '10.0.0.1' に一致するIPアドレスのクエリとして認識され、次のように展開されます:

from netflow (source_address='10.0.0.1' OR destination_address='10.0.0.1' OR source_nat_address='10.0.0.1' OR destination_nat_address='10.0.0.1')

論理型名は、スキーマフィールド名が使用できる場所であればどこでも使用できます:

from auth @user='bob'

これは値 'bob' に対して論理型 'user' とタグ付けされたすべてのフィールドに対してクエリを実行し、次のように展開されます:

from auth (source_user_name='bob' OR extra_subject_domain_user_id='bob' OR extra_target_domain_user_id='bob' OR target_user_name='bob' OR extra_targetoutboundusername='bob' OR extra_userprincipalname='bob' OR extra_virtualaccount='bob')

以下のクエリは、processイベントタイプの 'commandline' フィールドすべてに対して、指定した値を検索します:

from process where @command contains 'add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'

上記のクエリで @raw 論理型を使用する場合は、バックエンドの違いによりバックスラッシュをエスケープする必要があります:

from process where @raw contains 'add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'

ホスト名による検索🔗

クエリ言語は、ホスト名によるイベントおよび検知の検索をサポートしています。hostname フィールドは特別なユースケースであり、まずXDR内のエンドポイントデータベースからホスト名が host_id に変換され、その取得した host_id で検索が実行されます。ホスト名検索はネットワークイベントやクラウドイベントには対応していません。

この変換はバックエンドAPIを使用して行われ、完全一致のみを検索できるため、hostname フィールドはリテラル一致演算子のみをサポートします。

  • =(完全一致)
  • !=(完全一致の否定)
  • IN(完全一致値のリスト)
  • !IN(完全一致値を含むリストの否定)

ホスト名の変換は大文字・小文字を区別し、お客様が指定する値はエンドポイントデータベースに保存されているホスト名と一致している必要があります。

ホスト名検索の例🔗

ホスト名を使ったProcessイベントの検索

例: エンドポイントエージェントがインストールされた「Demo-PC01」から報告されたすべての認証イベントを検索

from auth where hostname = 'Demo-PC01'

例: ホスト「Demo-PC01」に対して発生したすべての検知を検索

from detection where hostname = 'Demo-PC01'

注意

hostname フィールドは論理型フィールド @host とは異なるユースケースです。@host 論理型はさまざまなイベントフィールドにマッピングされます。これらのイベントフィールドは、イベントの元データとして資産名が収集された場合に値が設定されます。@host 論理型は実際のエンドポイントホスト名にはマッピングされません。@host 型のマッピングについては 論理型 セクションをご参照ください。

検出を条件に用いたイベント検索の例🔗

クエリ言語を使用すると、検出の有無に基づいてイベント検索をフィルタリングできます。イベントクエリ内で detection.resource_id 構文を使用することで、検知が発生したイベントを特定できます。detection.resource_id 構文は、以下の演算子をサポートしています。

  • is not null
  • =
  • contains
  • in

これらの演算子と detection.resource_id 構文を用いたクエリは、検出が発生したイベントのみを返すため、セキュリティ関連イベントの特定が容易になります。

検出を条件に用いたイベント検索の例

検出を条件に用いたイベント検索の例🔗

以下のクエリ例を使用して、検知が発生したセキュリティ関連イベントを効率的にフィルタリングおよび特定し、潜在的な脅威の監視と対応能力を強化します。

検知が発生したすべての認証イベントを検索するクエリ:

from auth where detection.resource_id is not null

特定の検知に関連するすべての認証イベントを、完全な検知リソースIDを用いて検索するクエリ:

from auth where detection.resource_id = 'detection://priv:event-filter:12345:1733425433662:cf996f9a-54a2-5cc8-95af-fc438fd911ea'

注意

検知リソースIDは、検知のJSONビューで確認できます。

部分的な検知リソースIDを持っている場合に、contains演算子を使用して関連する認証イベントを検索するクエリ:

from auth where detection.resource_id contains 'cf996f9a-54a2-5cc8-95af-fc438fd911ea'

注意

検知リソースIDは、検知のJSONビューで確認できます。

複数の特定の検知に関連する認証イベントを、完全な検知リソースIDを指定して検索するクエリ:

from auth where detection.resource_id in ('detection://priv:event-filter:12345:1733425433662:cf996f9a-54a2-5cc8-95af-fc438fd911ea', 'detection://priv:event-filter:12345:1733418217531:056862f0-c471-552a-8a5c-731433fbb78a')

注意

検知リソースIDは、検知のJSONビューで確認できます。

配列🔗

配列フィールドに対するクエリは本質的にフラット化され、標準の field.subfield 記法を使用して配列要素のいずれかに対して一致を検索できます。

from http http_response_headers.record.key='Authorization' and http_response_headers.record.value='Bearer 1234'

注意

上記のクエリは、「Authorization」ヘッダーが存在し、かつ値が「Bearer 1234」であるヘッダーを持つレコードを検索しますが、これらが同じヘッダーレコードに属していることは保証されません。特定の配列インデックスでの一致には対応していません。

文字列リテラル🔗

シングルクォートの使用🔗

  • '<string value>' は文字列リテラル値を囲むために使用します。
  • バックスラッシュやエスケープシーケンスはリテラルとして解釈されます。
  • 文字列値自体にシングルクォート ' が含まれている場合、シングルクォートは使用できません。エスケープ(次のセクション参照)されていない ' が文字列内にあると、構文エラーになります。

例: ディレクトリパス 'Windows\system32' のプロセスイベントをクエリする場合:

from process where image_path contains 'Windows\system32'

エスケープ解釈修飾子の使用🔗

  • e'<string value>' はエスケープシーケンスを含む文字列値を囲むために使用します。
  • 文字列値自体に1つ以上のシングルクォート ' が含まれている場合、エスケープ修飾子を使用し、シングルクォートをバックスラッシュ(\)でエスケープする必要があります。
  • エスケープシーケンスを指定するには:
  • \n — 改行
  • \r — 復帰
  • \t — タブ
  • \b — バックスペース
  • \f — フォームフィード
  • \\ — エスケープされた \

例: commandline フィールドに改行が含まれるプロセスイベントをクエリする場合:

from process where @command contains e'dir\nmkdir test'

例: 値にシングルクォートが含まれ、エスケープが必要なプロセスイベントをクエリする場合

from process where commandline contains e'echo \'mimikatz\''

タイムレンジ🔗

クエリを限定されたタイムレンジに制約するには、以下を使用します。

  • earliest=[+-]<delta><unit>[@unit]
  • latest=[+-]<delta><unit>[@unit]

ここで、delta は整数、unit は以下のいずれかです。

  • s — 秒
  • m — 分
  • h — 時間
  • d — 日
  • w — 週
  • mo — 月
  • y — 年

オプションの [@unit] を指定すると、結果の時刻値が指定した秒、分、時間、日、週、月、または年で切り捨てられ、生の時刻値ではなくなります。

クエリで latest の時間制約のみが指定された場合、earliest の時間制約には直前の24時間がデフォルトで適用されます。

絶対的なタイムレンジは、フォーマットされた日付文字列としても指定できます。

earliest='2019-06-1T00:00:00' AND latest='2019-06-30T00:00:00'

注意

日付は ISO 8601標準 で記載してください(例:(2019-07-01, 2019-06-01T00:00:00)

関数🔗

検索結果は、さらに「パイプ(|)」で追加の関数に渡すことで、より詳細に絞り込むことができます。

search | 関数

クエリが複数のデータタイプにまたがる場合、関数は各データフィールドごとに独立して動作します。

例: processおよびauthデータタイプそれぞれについて最大5件の結果をクエリします。合計で最大10件の結果が返されます。

from process, auth where @user contains 'admin' | head 5

sort🔗

sortは、指定したフィールドや順序で結果をソートします。1つのイベントタイプのみをクエリする場合は任意のフィールドでソートが可能ですが、複数のイベントタイプをクエリする場合は、event_time_usecおよびingest_time_usecフィールドのみでのソートがサポートされます。検出に対するソートは現在サポートされていません。

search | sort field [ASC|DESC] (, field [ASC|DESC])?

from dnsquery query_name MATCHES '*.secureworks.com' earliest=-30d | sort query_name desc

from netflow source_address='10.0.0.1' earliest=-1d@d | sort source_address asc

from auth, process earliest=-1d | sort event_time_usec asc

headは、検索順で各イベントタイプから最初の_N_件の結果を返します。

search | head N

from dnsquery @domain MATCHES '*.secureworks.com' earliest=-30d | head 10

tail🔗

tailは、各イベントタイプの結果セットの末尾から_N_件の結果を返します。tailは、結果の順序を逆にしてから最後の_N_件を返します。

search | tail N

from dnsquery @domain MATCHES '*.secureworks.com' earliest=-30d | tail 10

fields🔗

注意

field演算子はAPI経由でのみ利用可能であり、XDRアプリケーションでは利用できません。

fieldsは、データが返される際に含める/除外するフィールドセットをクエリで制限します。デフォルトでは、original_dataを除くすべてのフィールドが結果に返されます。必要なフィールドのみを選択すると、クエリの実行効率が向上します。fields関数はカラムセレクターのように動作します。

search | fields field (, field)?

from dnsquery @domain MATCHES '*.secureworks.com' earliest=-30d | fields query_name

集計🔗

aggregate を使用すると、クエリの結果をグループ化し、指定された操作をクエリ結果に対して実行できます。

演算子 説明
sum クエリで返されたすべての行のフィールドの合計を計算します。
min フィールドの最小値を求めます。
max フィールドの最大値を求めます。
avg クエリで返されたすべての行のフィールドの平均値を求めます。
count フィールドを持つ行数をカウントします。フィールドが指定されていない場合は、すべての行がカウントされます。
cardinality フィールドに対して一意かつnullでない値を持つ行数をカウントします。
(aggregate) by 指定したフィールドの値ごとに結果をグループ化または集計し、それぞれの値のカウントを表示します。

集計クエリは次の形式を取ります。

search | aggregate [sum|min|max|avg|count|cardinality](field)

by🔗

by 句は、オプションでフィールドリストまたは時間の単位を指定でき、指定したフィールドまたは時間単位ごとに結果をグループ化します。

search | aggregate _aggregation (, _aggregation)? by field
search | aggregate _aggregation (, _aggregation)? by int unit

ここで unit

  • s — 秒
  • m — 分
  • h — 時間
  • d — 日

例: powershellがコマンドラインに含まれるProcessイベントから、ユーザー名ごとのリストとそのカウントを取得する:

from process where commandline contains 'powershell' | aggregate count(username) by username

過去3日間でユーザー名 'bob' の最も早いおよび最も遅い認証イベントを取得する:

from auth where source_user_name = 'bob' and earliest=-3d | aggregate min(event_time_usec), max(event_time_usec)

過去24時間のCisco ASAからのnetflowについて、転送バイト数の合計と平均を取得する:

from netflow where sensor_type='CISCO_FIREWALL_ASA' | aggregate sum(tx_byte_count) as sum_tx, avg(tx_byte_count)

*.netに一致するドメインのカウントを過去1日分取得する:

from dnsquery where query_name MATCHES '*.net' latest=-1d | aggregate count by query_name

過去24時間の各時間ごとのdnsqueryイベントのカウントを取得する:

from dnsquery earliest=-1d | aggregate count by 1h

注意

集計は現時点ではイベントクエリのみサポートされています。複数のイベントタイプクエリで集計を実行する場合、集計はイベントタイプごとに実行されます。集計クエリは現在、論理型での集計をサポートしていません。また、集計クエリからのレポート作成も現時点ではサポートされていません。

🔗

過去2時間以内のZeekからのGenericイベントを検索

from generic where sensor_type = 'zeek' earliest = -2h

過去2時間以内で「secureworks」という文字列を含むGenericイベントを検索

from generic where original_data contains 'secureworks' earliest = -2h

または、論理型 @raworiginal_data のエイリアスとして使用する場合:

from generic where @raw contains 'secureworks' earliest = -2h

重大度が高または重大な検出をすべて検索:

from detection where severity >= 0.6

重大度が低の検出をすべて検索:

from detection where severity >= 0.2 and severity < 0.4

検出タイトルに「Powershell」が含まれる検出をすべて検索:

from detection where title contains 'Powershell'

コマンドラインイベントフィールドに「mimikatz」が含まれる検出をすべて検索:

from detection where @command contains 'mimikatz'

イベントに関連付けられたユーザー名が「admin」である検出をすべて検索:

from detection where @user contains 'admin'

検知機名が「Taegis Watchlist」である検出をすべて検索:

from detection where metadata.creator.detector.detector_name = 'Taegis Watchlist'

検知機IDが「event-filter」で生成された検出をすべて検索:

from detection where metadata.creator.detector.detector_id contains 'event-filter'

プロセスの親イメージパスに「cmd.exe」が含まれる検出を検索:

from detection where process.parent_image_path contains 'cmd.exe'

IPアドレスフィールドを持つすべてのイベントタイプでIP「10.0.0.1」を検索:

@ip='10.0.0.1'

ドメイン名フィールドを持つすべてのイベントタイプで「redcloak.secureworks.com」を検索:

@domain='redcloak.secureworks.com'

IPアドレス「10.0.0.1」のnetflowイベントのみを検索:

from netflow @ip='10.0.0.1'

IPアドレス「10.0.0.1」のnetflowおよびauthイベントタイプを検索:

from netflow, auth @ip='10.0.0.1'

IPアドレス範囲「192.168.2.0/24」のnetflowイベントのみを検索:

from netflow where @ip='192.168.2.0/24'

IPアドレス範囲「192.168.2.0/24」のnetflowおよびauthイベントタイプを検索:

from netflow, auth where @ip matches '192.168.2.0/24'

IPアドレス範囲「192.168.2.0/24」のnetflowイベントのみを検索:

from netflow, auth where @ip matches '192.168.2.*'

IPアドレス範囲「192.168.0.0/16」のnetflowイベントのみを検索:

from netflow, auth where @ip matches '192.168.*'

IPアドレス範囲「192.168.0.0/16」のnetflowイベントのみを検索:

from netflow, auth where @ip in ('192.168.0.0/16')

ユーザー「bob」のauthを検索:

from auth where @user='bob'

過去30日間のdnsqueryイベントを検索:

from dnsquery earliest=-30d

過去30日から過去10日までのdnsqueryイベントを検索:

from dnsquery earliest=-30d latest=-10d

過去2日間のdnsqueryイベントを、その日の始まり(この例では昨日の00:00:00)から検索:

from dnsquery earliest=-2d@d

指定した日付/時刻から現在までのdnsqueryイベントを検索:

from dnsquery earliest='2021-04-01T00:00:00'

コマンドラインフィールドに「exe」というフレーズが含まれるprocessイベントを検索:

from process commandline contains 'exe'

コマンドラインフィールドに「exe」というフレーズが含まれないprocessイベントを検索:

from process commandline !contains 'exe'

sensor_typeフィールドが「ENDPOINT_CROWD_STRIKE」と等しくないprocessイベントを検索:

from process sensor_type != 'ENDPOINT_CROWD_STRIKE'

コマンドラインフィールドが小文字と数字で構成され、拡張子が「.exe」で終わる文字列に一致するprocessイベントを検索:

from process commandline matches_regex '[a-z0-9]*\.exe'

sensor_typeが「ENDPOINT_TAEGIS」または「ENDPOINT_CROWD_STRIKE」のいずれかであるprocessイベントを検索:

from process sensor_type IN ('ENDPOINT_TAEGIS','ENDPOINT_CROWD_STRIKE')

ドメイン名が「.google.com」で終わるdnsqueryイベントを検索。ワイルドカードを使用して等価性を指定する場合は、フィールド名の明記が必須です:

from dnsquery @domain matches '*.google.com'

sensor_typeが「ENDPOINT_CROWD_STRIKE」かつprocess_idが「5201」であるprocessイベントを検索。演算子が指定されていない場合、フィールドはデフォルトでANDされます:

from process where sensor_type='ENDPOINT_CROWD_STRIKE' process_id='5201'

sensor_typeが「ENDPOINT_TAEGIS」またはprocess_idが「5201」であるprocessイベントを検索:

from process sensor_type='ENDPOINT_TAEGIS' OR process_id='5201'

ディレクトリパスが「Windows\system32」であるprocessイベントを検索:

from process where image_path contains 'Windows\system32'

値にエスケープが必要なシングルクォートが含まれるprocessイベントを検索:

from process where commandline contains e'echo \'mimikatz\''

ユーザーアカウントがロック解除された(Windows Event ID 4767)authイベントを検索:

from auth where win_event_id='4767'

sensor_typeが「ENDPOINT_CROWD_STRIKE」で、過去1日(現在時刻から24時間)以内のprocessイベントを10件、タイムスタンプ降順で検索:

from process sensor_type='ENDPOINT_CROWD_STRIKE' earliest=-1d | head 10

sensor_typeが「ENDPOINT_TAEGIS」で、過去1日(現在時刻から24時間)以内のprocessイベントを10件、タイムスタンプ昇順で検索:

from process sensor_type='ENDPOINT_TAEGIS' earliest=-1d | tail 10

target_user_nameフィールドがnullであるauthイベントを検索:

from auth target_user_name is null

target_user_nameフィールドがnullでないauthイベントを検索:

from auth target_user_name is not null

commandlineに改行が含まれるprocessイベントを検索:

from process where @command contains e'dir\nmkdir test'

Genericイベントの検索🔗

Genericイベントの一般的な検索:

from generic

Generic Query

指定したセンサーからのGenericイベントの一般的な検索:

from generic where sensor_type = 'zeek'

Generic Zeek Query

Genericイベントの生データ検索🔗

このクエリは、指定したデータを2時間のウィンドウでGenericイベントから検索します:

from generic where original_data contains 'secureworks' EARLIEST = -2h

Searching Raw Data of Generic Events

注意

XDRは、正規化されていないデータのみをGenericイベントとして保存します。すべての正規化されたイベントには、original_data フィールドに元の未加工メッセージが含まれています。詳細はFAQ: Genericイベントと正規化データをご参照ください。

検出を条件に用いたイベント検索の例🔗

以下のクエリ例を使用して、検知が発生したセキュリティ関連イベントを効率的にフィルタリングおよび特定し、潜在的な脅威の監視と対応能力を強化します。

検知が発生したすべての認証イベントを検索するクエリ:

from auth where detection.resource_id is not null

特定の検知に関連するすべての認証イベントを、完全な検知リソースIDを用いて検索するクエリ:

from auth where detection.resource_id = 'detection://priv:event-filter:12345:1733425433662:cf996f9a-54a2-5cc8-95af-fc438fd911ea'

注意

検知リソースIDは、検知のJSONビューで確認できます。

部分的な検知リソースIDを持っている場合に、contains演算子を使用して関連する認証イベントを検索するクエリ:

from auth where detection.resource_id contains 'cf996f9a-54a2-5cc8-95af-fc438fd911ea'

注意

検知リソースIDは、検知のJSONビューで確認できます。

複数の特定の検知に関連する認証イベントを、完全な検知リソースIDを指定して検索するクエリ:

from auth where detection.resource_id in ('detection://priv:event-filter:12345:1733425433662:cf996f9a-54a2-5cc8-95af-fc438fd911ea', 'detection://priv:event-filter:12345:1733418217531:056862f0-c471-552a-8a5c-731433fbb78a')

注意

検知リソースIDは、検知のJSONビューで確認できます。

検索クエリの実行🔗

クエリの準備ができたら、次のいずれかの方法で実行します。

  • 検索ボタンを選択
  • キーボードでShift + Enterを押す

ヒント

クエリ結果テーブルの調整方法については、検索結果の並べ替え・フィルター・再配置をご覧ください。

検索クエリの保存🔗

クエリ言語検索を保存するには、入力フィールド上部の保存を選択し、検索名を入力してから保存を選択します。

クエリ言語検索の保存

検索の共有🔗

検索を共有するには、検索結果テーブル上部のリンクをコピーを選択するか、共有リンクアイコン を選択してURLをクリップボードにコピーします。

共有リンクのコピー

保存済み検索の表示🔗

自分や組織の他のメンバーが保存したクエリ言語検索を表示するには、入力フィールド下の保存済み検索を選択します。クエリ言語の保存済み検索は、詳細検索ビルダーと同様に機能します。詳細は保存済み検索をご覧ください。

クエリ言語の保存済み検索

検索結果のフィルターと再配置🔗

クエリ言語の検索結果テーブルには、データのフィルターや再配置のための以下のコントロールがあります。

列メニュー🔗

列名の右側にあるメニューアイコンを選択して、テーブルで利用可能な列のメニューを開きます。

詳細検索カラムメニュー

列フィルター🔗

列メニューを開き、フィルターアイコンを選択します。列フィルターにテキストを入力すると、テーブルの結果が更新されます。あるいは、利用可能な場合はチェックマークを使用して、グループ化されたフィールド値でフィルターすることもできます。

検索カラムのフィルター

列を固定する🔗

テーブルの左側または右側に列を固定できます。固定したい列のハンバーガーアイコンを選択してメニューを開き、列を固定 を選択し、どちら側に列を固定するかを選択してください。

カラムの固定

列の自動サイズ調整🔗

自動サイズ調整機能を使用して、テーブルの表示を整えます。列が狭すぎて情報が隠れている場合に役立ちます。

  • この列を自動サイズ調整 を選択すると、選択した列のみサイズが調整されます。

  • すべての列を自動サイズ調整 を選択すると、表示されているすべての列のサイズが調整されます。

検索カラムの自動サイズ調整

表示する列を選択🔗

列メニューを開き、列アイコンを選択し、表示したい列にチェックを入れるか外すことで、テーブルに表示する列を選択できます。

テキストボックスを使用して、列名を素早くフィルタリングできます。

または、検索結果テーブル右側のカラムドロワーを開いてください。

表示カラムの選択

列の並べ替え🔗

ヘッダーをドラッグ&ドロップして列を並べ替えてください。

検索カラムの再配置

列のリセット🔗

テーブルの列をデフォルトのサイズと順序にリセットするには、列メニューから列のリセットを選択してください。

カラムのリセット

検索結果のエクスポート🔗

XDRの検索結果からデータをCSVファイルとしてエクスポートできます。

選択した項目のエクスポート🔗

  1. ダウンロードしたい結果をチェックボックスで選択します。
  2. 結果テーブルの右上にあるアクションメニューから、選択した項目をCSVとしてエクスポートを選択します。ダウンロードリクエストが送信され、処理されます。
  3. データエクスポートに移動し、リクエストのステータスを確認し、利用可能なファイルをダウンロードします。

すべての項目のエクスポート🔗

  1. 結果テーブルの右上にあるアクションメニューから、すべてをCSVとしてエクスポートを選択します。ダウンロードリクエストが送信され、処理されます。
  2. データエクスポートに移動し、リクエストのステータスを確認し、利用可能なファイルをダウンロードします。

注意

ダウンロード可能なファイルには有効期限があり、ダウンロードテーブルのファイル有効期限列に記載されています。

ヒント

ダウンロード可能なファイルは最大100,000行に制限されています。100,000行を超えるデータセットが必要な場合は、日付ピッカーや検索パラメータを使ってデータテーブルを絞り込むか、または必要な全データセットをカバーするように複数回リクエストを送信してください。