すぐに使える!データのフィルタリングに不可欠な3つの技法
Security Tamara Chacon
- ルックアップコマンドとワークフローアクションを使用してデータを拡充する
- Splunk Streamでネットワークトラフィックを調査する
- Splunkインスタンスで利用可能なさまざまな種類のデータを確認する
- Windowsイベントログを最大限に活用する
- 強力なstatsコマンドを使い始める
このブログでは、引き続きデータのフィルタリングに役立つSplunkの基本的な脅威ハンティング技法について紹介するとともに、statsコマンドについても取り上げます。
(この記事は「Splunkで脅威ハンティング」シリーズの一部で、初稿はDave Herraldによって書かれました。お客様に最大限の価値を提供できるよう、その内容を最近更新しました。)
脅威ハンティングで役立つデータフィルタリング技法
データのフィルタリングはなぜ重要なのでしょうか?Splunkでは、ギガバイトやテラバイトはもちろんペタバイト単位で完全忠実なセキュリティデータを保存できます。しかし、脅威ハンティングや調査で探して求めている証拠は、たった数件のイベントにしか残されていないことがほとんどです。
そのため、証拠を明らかにするにはノイズを除去する必要があります。
そこで、すぐに実践できる3つのデータフィルタリング技法を具体的に説明します。以下で取り上げる3つの例ではすべて、Boss of the SOC v1.0データセットのデータを使用します。
技法1. 時間:時間範囲を指定する
Splunkサーチで返されるイベントの数を減らし、行動につながる結果を得るための重要な技法の1つは、適切な時間範囲を指定することです。特に言及する必要がないように思えますが、見落としがちな点でもあります。
脅威ハンティングの対象とする期間を区切ることができれば、仮説から外れた時間帯のイベントをSplunkサーチの対象外にできるため、調査を進めるうえで貴重な時間とシステムリソースを節約できる可能性があります。
ほとんどのSplunkユーザーにとって、時間範囲を指定する最も簡単な方法は、下の図1に示すようにタイムレンジピッカーを使用することです。この例では、Boss of the SOC v1.0データセットに含まれるDNSイベントを調査しています。具体的には、2016年8月24日のすべてのDNSアクティビティをSplunkでサーチし、次の出力を得られました。
- サーチの処理時間は約6.6秒で、サーチ結果は約55,000件
- 同じサーチを2016年8月の1カ月間を対象に実行した場合(図はなし)、処理時間は約184秒で、サーチ結果は約137万件
このケースでは適切な時間範囲を指定することで、サーチ結果の件数とサーチの実行時間の両方で効率が96%向上していることがわかります。
使うデータやハンティングの仮説はさまざまですが、Splunkでハンティングを行うときは、時間範囲に着目することが重要です。
技法2. フィールド:フィールド値の式を使用する
Splunkはデータのサーチエンジンと呼ばれることがよくありますが、サーチアプリに簡単なフレーズを入力すれば、その理由がすぐにわかります。入力したフレーズを含むイベントが通常、わずか数秒以内に表示されるためです。このようなサーチは「超高速grep」と呼ばれます。調査を進めるのに効果的な方法ではありますが、Splunkにはさらに多くの有用な機能が用意されています。
Splunkサーチのスキルをレベルアップし、その過程でより効果的に脅威ハンティングするための優れた方法の1つに、フィールド値の式を活用したサーチの絞り込みが挙げられます。
Splunkでは結果を返すときに、各イベントからフィールドも抽出します。Splunk Search Processing Language (SPL)を使うと、フィールドを有効活用できます。環境内のさまざまなシステムで生成されるイベントには、それぞれ異なるフィールドがありますが、Splunkのイベントにはすべて、次のような共通フィールドがあります。
- ホスト
- ソース
- ソースタイプ
これらは特別なフィールドであり、イベントがインデックス化されるとすぐに抽出されて保存されるため、共通フィールドを使用すると非常に高速にサーチを実行できます。
Splunkでイベントをフィルタリングする最適な方法の1つは、Splunkサーチで次のようなフィールドと値のペアをできるだけ始めの方(つまり左端)に記述して、特定のソースタイプをサーチすることです。以下の例は、Microsoft Sysmonイベントのみを表示するように結果をフィルタリングする簡単なサーチ構文です。
sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational"
次に、複数のフィールドを組み合わせてサーチをさらに絞り込む方法を見てみましょう。複数のフィールドをサーチする場合、Splunkでは論理演算子の「AND」を使ってサーチで使う用語を結合します。
下の図2に、複数のフィールドで構成されるサーチの例を示します。「we4781srv」という名前のシステムから送信されたすべてのMicrosoft Sysmonイベントが返されます。
sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational"
host="we4781srv"
この例では、サーチで時間枠を指定(上述の技法1を参照)しています。また、アクセス権が付与されたSplunkインデックスからのみ結果が取得される点に注意してください。本番環境では、サーチの先頭に「index=<myindexname>」を記述することをお勧めします(この指定が必須になることもあります)。
では、これらのMicrosoft Sysmonイベントで使用可能な他のフィールドを見てみましょう。
フィールドを使用して、Splunkの脅威ハンティングでサーチをカスタマイズする際に役立つヒントをいくつか紹介します。
- フィールド 名 は大文字と小文字が区別されます。「EventCode」と「eventcode」はまったく異なるフィールドであり、それぞれ異なる値を持つことができます。
- フィールド 値 は大文字と小文字が区別されないため、「system」と「System」は同じになります。大文字と小文字を区別してフィールド値を一致させる必要がある場合は、SplunkのSPLコマンド「where」を参照してください。
- フィールドと値のペアにワイルドカードを使用すると、非常に便利です。例:sourcetype="stream:*"、src_ip="192.168.250.*"、sourcetype="*sysmon*"など
- ブール演算子「AND」、「OR」、「NOT」と、グループ化のための括弧がサポートされています。ブール演算子は必ず大文字で記述します。そうしないと、「and」の単語をgrepしてしまう可能性があり、意図したとおりに動作しません。
- 他には、「<」、「>」、「<=」、「>=」、「!=」などの比較演算子もサポートされています。
詳細については、Splunkの「search」コマンドをご確認ください。
技法3. 演算子:NOT演算子を使用する
最後に、Splunkで脅威ハンティングを行う際に利用できる迅速で効果的なフィルタリング技法、「NOT」ブール演算子について見てみましょう。
これまで見てきたように、Splunkでのハンティングの主な目的は、仮説の証明または反証に役立たないイベントをサーチ結果から除外することです。これを行うのに最適なツールが「NOT」演算子です。
まず、2016年8月にSplunk Streamで収集したDNSクエリーをいくつか調べてみましょう。この例は、疑わしい動作をしているシステムを調査したり、ハンティングの仮説を立てるのに役立つ「手掛かり」を探したりする際に参考になります。まずSplunkを使用してリクエストを要約し、説明が可能なデータを除外し、説明できないデータを詳細に調べます。
下の図3のサーチでは、234件の一意のDNSクエリーが見つかり、明らかに疑わしいものや悪意のあるものはありませんでした。
sourcetype=stream:dns src=192.168.250.100 query_type{}=A
| stats count by query
| sort -count
では、実際にフィルタリングで「NOT」を使ってみましょう。まず、ブラウザの設定とIPv6トンネリングに使用されるDNSルックアップをいくつか除外します。そのためには、「NOT」フィールドと値のペアを2つ追加します。異なるドメインのインスタンスを検出するために、ワイルドカードを使用している点に注意してください。
sourcetype=stream:dns src=192.168.250.100 query_type{}=A
NOT query=wpad*
NOT query=isatap*
| stats count by query
| sort -count
ここで、フィルタリングの効果が見て取れます。このケースでは、サーチ結果が234件から176件に減少しました。続けて、次の項目で結果をフィルタリングしてみましょう。
- 認定ベンダー/製品(環境によって指定する内容が変わります)
- ローカルドメイン
- コンテンツ配信ネットワーク (CDN)
- その他
sourcetype=stream:dns src=192.168.250.100 query_type{}=A
NOT query=wpad*
NOT query=isatap*
NOT query=*.windows.com
NOT query=*live.com
NOT query=*nsatc.net
NOT query=*windowsupdate.com
NOT query=*msedge.net
NOT query=*trafficmanager.net
NOT query=*office.com
NOT query=*bing.com
NOT query=*virtualearth.net
NOT query=*msn.com
NOT query=*.microsoft.com
NOT query=*msftncsi.com
NOT query=*microsoftonline.com
NOT query=demo-01
NOT query=*waynecorpinc.local
NOT query=*public-trust.com
NOT query=*ocsp*.com
NOT query=*akamaiedge.net
NOT query=*akadns.net
NOT query=*akamaized.net
NOT query=sway-cdn.com
NOT query=*symc*.com
| stats count by query
これでサーチ結果が大幅に減少して15件になりました。ここでようやく、次のような内容を簡単に特定できるようになります。
- 不正なソフトウェア(この場合はAcronis)
- ソーシャルメディアの使用(X/Twitter)
- 明らかに疑わしいいくつかのドメイン
多くの場合、この例のようにサーチの規模が大きくなると、データをSplunkのルックアップテーブルに統合する方が合理的です。詳しくは、「脅威ハンティングでのlookupコマンドの使い方(ハンティングに乗り出す前の下調べ)」をご覧ください。
まとめ
Splunk Boss of the SOC (BOTS)では毎年、参加者が自らの腕試しをしています。そこでは、リーダーボードの上位に名を連ねる競技者が、大量の未処理のサーチ結果をいくつかの重要なイベントにすばやく絞り込む場面を幾度となく目にします。このブログ記事で紹介した3つのシンプルなフィルタリング技法を習得すれば、分析や脅威ハンティングを効率的に実施できるようになるだけでなく、次回のSplunk BOTSイベントで順位を上げることも夢ではないかもしれません。
最新の脅威ハンティング手法については、E-book『PEAK脅威ハンティングフレームワーク』もぜひご覧ください。また、セキュリティ関連のホワイトペーパー、E-book、アナリストレポートなどの資料はこちらからご覧いただけます。
Splunkはセキュリティチームをいつでも支援いたします。
関連記事

Splunk主催のCTFイベント “Boss of The SOC v8” 開催レポート

サイバーセキュリティのリスク管理:リスク評価の5つのステップ
