家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

Splunkとは

Splunkとは

Splunkとは、システムを構成する機器が出力するログを収集、分析、可視化するためのログ管理ソリューションです。
様々な機器のログを一元管理し、相関分析により、セキュリティインシデントの可能性を調査することができます。

splunk

 

Splunkの構成要素

Splunkは、Forwarder、Indexer、Search Headという3つの主要コンポーネントで構成されています。


Forwarder

Forwarderは監視対象にインストールされるエージェントで、データを収集します。

 

Indexer

IndexerはForwarderから受信したデータを処理して保存することで、データ分析をしやすくします。
Indexerによって保存されたデータは、Search Headで検索できます。

 

Search Head

Search Headは検索やアプリ内で、ユーザーがログを検索できる機能です。

Search Head

データの取り込み

Splunkは様々なデータを取り込むことができます。
Splunkに追加されたデータは処理され、個々のイベントに変換されます。

対応しているデータソース

https://docs.splunk.com/Documentation/Splunk/8.2.6/SearchTutorial/AboutgettingdataintoSplunk?ref=hk

 

以下はローカルからファイルをアップロードする手順です。
左下の「アップロード コンピュータのファイルから」を選択します。

データのアップロード画面

 

データをアップロードするには、以下の手順で進めます。

 

アップロードの流れ

  1. ソースの選択:ログファイルとデータソースを選択します。
  2. ソースタイプの選択:取り込まれるログの種類を選択します。例:JSON、syslog。
  3. 入力設定:ログが書き込まれるインデックスと、ログに関連付けるホスト名を選択する。
  4. 確認:設定内容を確認する。
  5. 完了

 

検索方法

SplunkではSPL(Search Processing Language)を使ってデータを検索します。
SPLの基本的な構文は極めてシンプルで、以下のような規則があります。

  • コマンドは先頭から順番に処理される
  • コマンド同士は、パイプ(|)で繋ぐことができる

SPLの例

source="VPN-logs-1663593355154.json" host="ip-10-10-40-195" sourcetype="_json" Source_Country!=France

 

また、関連するフィールドから知りたいキーワードでたどることもできます。

フィールドに含まれるキーワードの候補

 

SPLの処理について

SPLの処理の流れについて以下のクエリを基に整理します。

 

index=windowslogs alice

上記のクエリは以下のようにSplunkで処理されます。

  1. index=windowslogs:検索対象をインデックス=windowslogsでフィルタ
  2. alice:キーワード検索でイベントの任意のフィールドに「alice」が含まれているものを抽出
    ※デフォルトでは大文字小文字の区別はされません。

 

特定フィールドに絞る場合は、以下のようにフィールド名を指定します。

index=windowslogs user=alice

 

関係演算子

SPLで使用する演算子について以下に記載します。

オペレーター 説明
等しい:= UserName=Mark フィールド名が「UserName」で「Mark」を含むイベントを検索
等しくない:!= UserName!=Mark フィールド名が「UserName」で「Mark」を含まないイベントを検索
未満:<

Age<10

<=:以下

フィールドのAgeの値が10未満のものを検索。
=をつけると以下
より大きい:> Age>10
>=:以上
フィールドAgeの値が10より大きいものを検索。
=をつけると以上

 

クエリは「|」でつなぐことができます。以下はフィルタした結果を集計し、上位一位を出力するクエリの例です。

index=windowslogs Hostname="Salena.Adam" DestinationIp="172.18.38.5"
| stats count by SourceIp
| tail 1

 

statsとeventstats

statsとeventstatsはどちらもイベントを集計するコマンドですが、statsは集計結果のみを返すのに対して、eventstatsは集計結果を元のイベントに新しいフィールドを定義して追加します。

eventstatsのコマンド例
| eventstats [統計処理] by [集計単位のフィールド名]

 

以下はユーザーごとのアクセス元情報を集計し、ログイン頻度の少ない国からのアクセスを抽出するクエリ例です。

index=vpnlogs
| eventstats count as logins_by_user by user 
| eventstats count as logins_by_user_country by user src_country 
| eval country_freq=logins_by_user_country/logins_by_user
| where country_freq < 0.1
| table _time user src_ip src_country country_freq

各コマンドの意味は以下の通りです。

  1. ユーザーの総ログイン回数を数える
  2. ユーザー × 国ごとのログイン回数を数える
  3. 国ごとの割合を計算する
  4. 10%未満のログインだけを抽出する

 

フィールドサイドバーについて

フィールドサイドバーは、Splunk検索の左側にあります。

サイドバーの例



フィールドについている記号について、「#」は数値を含むフィールドを表し、「α」は、文字列(テキスト値)を含むフィールドを表します。

用語など

用語 意味
sourcetype 取り込んだデータがどんなものなのかを定義する項目。
index 収集したログデータを格納しているもの。ログの出力ファイル毎に分割することが多い。
event 取り込んだデータ。event数はログ件数。