正規表現(一般に regex と呼ばれる)は、テキスト内の検索パターンを指定する一連の文字です。

正規表現を使用する前に、次のルールについて理解しておきます。

  • プラットフォーム検索では、すべてのトークンが正規化され、大文字はすべて小文字に変換され、すべてのバックスラッシュ (\) はスラッシュ (/) に変換されます。
  • 正規表現ステートメント内にバックスラッシュや大文字を含めないでください。
  • 正規表現でのバックスラッシュの使用は、エスケープに対してのみ有効です。
表 1. 注目すべき正規表現検索の例
目標 サンプル検索
一般的な正規表現を使用する。

例:/regex/

機能する

process_name:/[a-f0-9]{64}.exe/
機能しない

process_name:[a-f0-9]{64}.exe

二重の拡張子を持つプロセス名を探す。

例:file.doc.txt
process_name:/\\.[^\\.]{2,3}\\.[^\\.]{2,3}/
process_name:/\\..{3}\\..{3}/
指定されたプロセス以外に対してクロス処理を実行したすべての Powershell。
機能する

process_name:powershell.exe crossproc_name:/@~(ccmexec.exe)/
機能しない

process_name:powershell.exe NOT crossproc_name:ccmexec.exe
process_name:powershell.exe crossproc_name:/@~(ccmexec.exe)/
指定されたドメイン以外のドメインへのネットワーク接続を探す。
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/ です。

重要:
  • 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_nameregmod_nameprocess_cmdline など)のトークンが小文字に変換されます。そのため、トークン化されたフィールドで実行する正規表現検索では、小文字を使用する必要があります。

たとえば、ファイル名に「clip」という文字列が含まれるファイルを検索する場合:

機能する
filemod_name:/clip\-[a-f0-9]{40}/ 
機能する
filemod_name:/(clip|CLIP)\-[a-f0-9]{40}/
機能しない
filemod_name:/CLIP\-[a-f0-9]{40}/