正規表現(一般に regex と呼ばれる)は、テキスト内の検索パターンを指定する一連の文字です。
正規表現を使用する前に、次のルールについて理解しておきます。
- プラットフォーム検索では、すべてのトークンが正規化され、大文字はすべて小文字に変換され、すべてのバックスラッシュ (
\
) はスラッシュ (/
) に変換されます。 - 正規表現ステートメント内にバックスラッシュや大文字を含めないでください。
- 正規表現でのバックスラッシュの使用は、エスケープに対してのみ有効です。
目標 | サンプル検索 | ||||
---|---|---|---|---|---|
一般的な正規表現を使用する。 例: |
|
||||
二重の拡張子を持つプロセス名を探す。 例:file.doc.txt |
process_name:/\\.[^\\.]{2,3}\\.[^\\.]{2,3}/ process_name:/\\..{3}\\..{3}/ |
||||
指定されたプロセス以外に対してクロス処理を実行したすべての Powershell。 |
|
||||
指定されたドメイン以外のドメインへのネットワーク接続を探す。 | process_name:winword.exe AND netconn_domain:/@~(microsoft.com)/ |
||||
サブフォルダではなくフォルダ内のファイルを探す。 例:C:\Users\<user>\subfolder\123.exe ではなく C:\Users\<user>\123.exe |
filemod_name:/c:\/users\/[^\/]+\/[^\/]+\.exe/ |
||||
部分文字列ではなく、正確なファイル名を探す。 例:installer-x64.exe ではなく x64.exe を探す |
(process_original_filename:x64.exe AND -process_original_filename:/@&~(x64.exe)/) |
プラットフォーム検索でサポートされる正規表現構文
プラットフォーム検索を使用する場合、Java でサポートされている正規表現はすべて、Lucene 構文でサポートされます。したがって、field:/regex/
です。
- このドキュメントは、プラットフォーム検索と互換性があります:https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html。
- この正規表現バリデータは、プラットフォーム検索と互換性のある結果を生成します:https://regex101.com
field:/.*something/
で開始する場合は注意してください。- これらは、値が多いフィールド(「高カーディナリティ」とも呼ばれる)では十分に機能しません。
field:/*something/
のように、先頭のワイルドカード検索はうまく機能しません。
-
すべての正規表現クエリでは、
field:/regex/
のようにフィールド名を明確に指定する必要があります。フィールド名のない正規表現クエリは失敗します。たとえば、
/regex/
は有効なクエリではありません。
プラットフォーム検索でサポートされる事前定義された文字クラス
事前定義された文字クラスはサポートされていません。
例:\d \D \w \W \s \S
機能する | process_name:/power.+?\..{3}/ |
機能する | process_name:/power.+?\.[a-z0-9]{3}/ |
機能しない | process_name:/power.+?\.\w{3}/ |
正規表現を使用してプラットフォーム検索時に特定の文字列を除外する
事例:
microsoft.com 以外のドメインに接続している winword.exe プロセスを検索する必要があります。
process_name:winword.exe AND netconn_domain:* AND NOT netconn_domain:microsoft.comその結果を提供しません。これは、任意の時点で microsoft.com に接続しているすべてのプロセスを除外します。
process_name:winword.exe AND netconn_domain:/[^.]+(\.[^.]+)+&@&~(.*microsoft.com)/
このクエリは、指定されたドメインを除くすべてのドメインを検索します。この ANYSTRING
構文は https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html#regexp-optional-operators に記載されています。
大文字と小文字を区別した正規表現検索
プラットフォーム検索では、トークン化されたすべてのフィールド(process_name
、regmod_name
、process_cmdline
など)のトークンが小文字に変換されます。そのため、トークン化されたフィールドで実行する正規表現検索では、小文字を使用する必要があります。
たとえば、ファイル名に「clip
」という文字列が含まれるファイルを検索する場合:
機能する | filemod_name:/clip\-[a-f0-9]{40}/ |
機能する | filemod_name:/(clip|CLIP)\-[a-f0-9]{40}/ |
機能しない | filemod_name:/CLIP\-[a-f0-9]{40}/ |