Splunkにaudit.logを取り込んでSplunkweb初回ログイン時の挙動を調べる

# はじめに

本記事は[前回](https://qiita.com/bashi-run/items/1536c0f27fbb5523ebab#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)の記事で書かせて頂きました内容の続編になります。

[Splunk Enterprise](https://www.splunk.com/ja_jp/software/splunk-enterprise.html)が稼働するLinuxサーバーの監査対象をSplunkのインストールディレクトリに設定することで、Splunkweb(≒SplunkのGUIコンソール)に初回ログインしたときに、Splunk内部でどんなファイルが生成されたかLinuxサーバーの監査ログ(/var/log/audit/audit.log)に出力されるようになります。その監査ログをSplunk自身に取り込むことで、Splunk自身のサーチ機能を使ってSplunkで何が行われているかサーチします。

監査ログの出力設定は[前回](https://qiita.com/bashi-run/items/1536c0f27fbb5523ebab#2%E7%9B%A3%E6%9F%BB%E3%83%AD%E3%82%B0%E5%87%BA%E5%8A%9B%E8%A8%AD%E5%AE%9A)に記載しておりますので、そちらをご参照ください。

# 確認用サーチ文
※前回の記事から改良しております

``` ruby:監査ログをサーチする(ディレクトリとファイルを別カラムで表示)
sourcetype="linux_audit" type="PATH" nametype!="PARENT" name="/opt/splunk/etc/*" NOT name="*tmp" 
| rex field=name "^(?<directory>.*\/)?(?<file>.*)" 
| rex field=msg "audit\([^:]+:(?<msgid>\d+)" 
| eval directory=if(len(mode)==6,directory+file,directory),file=if(len(mode)==6,"",file) 
| table _time,msgid,item,nametype,mode,directory,file 
| sort _time,msgid,item
```

``` ruby:監査ログをサーチする(パスを表示)
sourcetype="linux_audit" type="PATH" nametype="CREATE" name="/opt/splunk/etc/*" NOT name="*tmp" 
| rex field=msg "audit\([^:]+:(?<msgid>\d+)" 
| eval pathtype=if(len(mode)==6,"dir","file") 
| table _time,msgid,item,nametype,mode,pathtype,name 
| sort _time,msgid,item
```

# サーチ実行結果
<details><summary>サーチ実行結果例(クリックすると展開します)</summary>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170600/743ae705-e7cb-2fe3-44d7-ebe876983414.png)
</details>

# サーチ実行結果の分析

サーチ実行結果を整理すると、以下のファイルが作られていることがわかりました。

|Seq|ファイル| 備考 | 
|:--|:--|:--| 
|1|/opt/splunk/etc/login-info.cfg||
|2|/opt/splunk/etc/.ui_login|※0byte|
|3|/opt/splunk/etc/apps/splunk_instrumentation/bin/splunk_instrumentation/instrumentation_controller.pyc|同ディレクトリ内のinstrumentation_controller.pyをコンパイルしたモジュール?|
|4|/opt/splunk/etc/apps/splunk_instrumentation/bin/splunk_instrumentation/client_eligibility.pyc|同ディレクトリ内のclient_eligibility.pyをコンパイルしたモジュール?|
|5|/opt/splunk/etc/apps/learned/local/props.conf||
|6|/opt/splunk/etc/apps/learned/metadata/local.meta||
|7|/opt/splunk/etc/users/admin/user-prefs/metadata/local.meta||
|8|/opt/splunk/etc/users/admin/user-prefs/local/user-prefs.conf||

# 初回ログイン後の各種初期操作時に生成されるファイル

今回の調査ついでにサーチAppをひらいたときに表示されるポップアップが気になったので、内部で何が作成されているか調査しました。その結果が以下になります。

## Splunk初回ログオン時のポップアップを"Skip"した時

|Seq|ファイル| 備考 | 
|:--|:--|:--| 
|1|/opt/splunk/etc/apps/splunk_instrumentation/metadata/local.meta||
|2|/opt/splunk/etc/apps/splunk_instrumentation/local/telemetry.conf||
|3|/opt/splunk/etc/users/admin/user-prefs/metadata/local.meta||
|4|/opt/splunk/etc/users/admin/user-prefs/local/user-prefs.conf||

## "Import changes coming!"ダイアログで"Remind me in 2 weeks"をクリックしたとき

|Seq|ファイル| 備考 | 
|:--|:--|:--| 
|1|/opt/splunk/etc/apps/splunk_instrumentation/metadata/local.meta||
|2|/opt/splunk/etc/users/admin/user-prefs/local/user-prefs.conf||

## サーチAppに初回アクセスしたとき

|Seq|ファイル| 備考 | 
|:--|:--|:--| 
|1|/opt/splunk/etc/users/admin/search/history/.dummy_history|※0byte|
|2|/opt/splunk/etc/users/admin/search/metadata/local.meta||
|3|/opt/splunk/etc/users/admin/search/history/(hostname).csv|(hostname)はSplunk Enterprise導入サーバーのホスト名|

## サーチAppに初回アクセスしたときの[ようこそ]ダイアログで"Skip"をしたとき

|Seq|ファイル| 備考 | 
|:--|:--|:--| 
|1|/opt/splunk/etc/users/admin/search/local/ui-tour.conf|※0byte|
|2|/opt/splunk/etc/users/admin/search/metadata/local.meta||

# まとめ
Splunkは初回ログイン時も画面の裏で色々なファイルを生成していますが、
監査ログを取り込むことで、画面操作をした場合にconfファイル(設定が入っている)とlocal.meta(設定をいつ変更したか)がセットで作成/更新していることまでわかるようになりました。

Linuxの監査ログは、ログのタイムスタンプがUnixTime形式で記録されているために、サーバーで何時何が行われたか解読するのに時間を要するのですが、Splunkに取り込むことでタイムスタンプが判りやすい形で分析できるようになりますので、監査ログを調査したい時のツールとしても活用することができそうです。