脅威ハンティングで正規表現を使用する(正規表現は意味不明な呪文ではありません!)

Security Tamara Chacon
正規表現(RegEx)は、初心者には意味不明な呪文のように思われますが、セキュリティアナリストがテキストのパターンを定義するために使用できるコンパクトな言語です。ASCIIデータを扱うとき、そしてログに埋もれた重要な情報を見つけ出すときに、正規表現は優れた能力を発揮します。
正規表現

とはいえ、正規表現を難しく感じる方もいらっしゃるでしょう。そのような方に役立つリソースが数多く提供されています。

ここで「でも、Splunkにはフィールドがあるのに、どうしてわざわざ時間をかけて正規表現を勉強しなければいけないのか?」と思う方もいらっしゃるでしょう。

たしかにそのとおりです。Splunkではすべてのログがインデックス化され、完全な形で保存されます(ここだけの話、特定のフィールドのみを保存する一部の あまり優秀とは言えない データプラットフォームとは違います)。さらに、どのデータソースでも主要なフィールドをサーチできます。ただし、場合によっては、アナリストとして脅威ハンティングで使いたい貴重な情報がデフォルトでフィールドに割り当てられないこともあります。

というわけで、脅威ハンティングで正規表現を使う方法をいくつかご紹介します。

(この記事は「Splunkで脅威ハンティング」シリーズの一部で、初稿はSteve Brantによって書かれました。お客様に最大限の価値を提供できるよう、その内容を最近更新しました。)

Splunkで正規表現を使用するための2つのコマンド

SplunkのSPLには、rexとregexの2つのコマンドがあります。アナリストは、これらのコマンドで正規表現を使って、サーチの中で値を新しいフィールドに割り当てたり、結果を絞り込んだりできます。各コマンドの使い方を詳しく見ていきましょう。

rexコマンド

rex [field=<field>] (<regex-expression> [max_match=<int>] [offset_field=<string>]) | (mode=sed <sed-expression>)

rexコマンドでは、フィールド内の文字を置き換えたり(データの匿名化に便利)、値を抽出して新しいフィールドに割り当てたりできます。脅威ハンティングでよく使うのは、値の抽出です。

例として、暗号化されていないパスワードが外部ネットワークに流出していることが確認され、その情報を特定し、分析のために抽出するとしましょう。まず、ネットワークデータでhttpトラフィックを調べたところ、Webログデータに「form_data」というフィールドが見つかりました。

form_dataフィールド

その1件のイベントに、暗号化されていないパスワードが含まれています。Webログにはあってはならない状態です!

この暗号化されていないパスワードの流出がどのくらい広がっているかを調査するために、rexコマンドを使ってサーチを実行します。その中で「pass」というフィールドを作成し、その値を調べて、暗号化されていないパスワードを探します。サーチは次のようになります。

サーチ画面

「form_data」フィールドに対してrexコマンドを実行し、「pass」という名前の新しいフィールドを作成しています。その中で呪文のような部分が、「form_data」からデータを抽出する正規表現です。すごいでしょう?結果を見ると、なんと「pass」という新しいフィールドが作成されています!

この新しいフィールドに対して、stats、eventstats、streamstatsなどの操作を実行できます。これらのコマンドの使い方については、John Stonerのブログ記事をご覧ください。

passフィールド

さて、先ほどのコマンドで一体何が起きたのでしょうか?新しいフィールドはどこから現れたのでしょうか?詳しく見ていきましょう。

下のコードは「form_data」フィールドの値です。注目していただきたい部分にマークを付けています。

username=admin&task=login&return=aW5kZXgucGhw&option=com_login&passwd=rock&4a40c518220c1993f0e02dc4712c5794=1

文字列「passwd=」はリテラル文字列で、毎回完全一致で検出するパターンです。この後に続く値が、分析のために抽出するパスワード値です。

パスワードを抽出するための正規表現は次のようになります。

passwd=(?<pass>[^&]+)

便利ですね!では次に、regexを見ていきましょう。

regexコマンド

regexコマンドでは、正規表現を使ってイベントをフィルタリングできます。

regex (<field>=<regex-expression> | <field>!=<regex-expression> | <regex-expression>)

このコマンドを実行すると、指定したパターンに一致する値が返されます。逆に、正規表現に否定を付けて、指定したパターンに一致しない値を取得することもできます。rexコマンドとは異なり、regexコマンドでは新しいフィールドは作成されません。

例として、Suricataのログでハンティングの対象を特定のネットワーク範囲(192.168.224.0~192.168.225.255)に絞り込むとします。evalコマンドでcidrmatch関数を使うこともできますが、regexをマスターすれば、ほかにもさまざまな場面で活用できます。

サーチは次のようになります。

サーチ画面

regexコマンドを使わない場合、このデータセットのサーチ結果には、8.8.8.8や192.168.229.225のような、ハンティング対象でない値も含まれます。regexを使えば、目的のIP範囲内の値だけを取得できます。

regexなし:
regexあり:
regexなし
regexあり

サーチの内容を詳しく見ていきましょう。

src_ipフィールドには以下のような値が含まれています。

次の部分が正規表現です。

192\.168\.(224|225)\.\d{1,3}

正規表現は意味不明な呪文ではない

正規表現は意味不明な呪文なのでしょうか。そんなことはありません。とはいえ、拒否反応を示す人もいるでしょう。勇気を出して正規表現を身に付け、ハンティングでログを調査する際にパターンの検索に活用してください。

Splunkはセキュリティチームをいつでも支援いたします。

このブログはこちらの英語ブログの翻訳、山村 悟史によるレビューです。

関連記事

サイバーセキュリティとは?決定版
セキュリティ
14 分程度

サイバーセキュリティとは?決定版

サイバーセキュリティとその重要性について説明するほか、サイバー脅威とリスクの種類、それらを軽減するためのツールとフレームワークを紹介します。
Splunk Add-on for Splunk Attack AnalyzerとSplunk App for Splunk Attack Analyzerのご紹介
セキュリティ
4 分程度

Splunk Add-on for Splunk Attack AnalyzerとSplunk App for Splunk Attack Analyzerのご紹介

Splunk Add-on for Splunk Attack AnalyzerとSplunk App for Splunk Attack Analyzerがリリースされました。
Termiteランサムウェアの詳細:感染方法と検出
セキュリティ
12 分程度

Termiteランサムウェアの詳細:感染方法と検出

Termiteランサムウェアの感染方法、標的となる脆弱性(Cleo社製品のCVE-2024-50623など)、Splunkセキュリティ製品での検出について詳しく解説します。