【Splunk】クライアント側のログ転送設定（Splunk Universal Forwarder の利用）

Splunk Universal Forwarder は、Linux や Windows など各種環境で稼働し、ログファイルやイベントデータを Splunk Enterprise / Splunk Cloud へ転送するエージェントです。Forwarder のインストール手順は、[Splunk 公式のブログ](https://www.splunk.com/ja_jp/blog/tips-and-tricks/how-to-install-universal-forwarder-01.html)にも情報があるので、正確にはそちらを参照頂く方が良いです。この記事では、著者の作業メモ的な意味合いで、実際に Linux クライアント上で発生したテキストログを Splunk Enterpirise に転送する手順をまとめます。Splunk Enterprise 本体の導入は、[こちら](https://qiita.com/piropiro38/items/82aabf8a8d0de91288a3)で簡単に手順をまとめています。また、具体的にログファイルは何でもよいのですが、サンプルログとしては、[こちらの記事](https://qiita.com/piropiro38/items/145b189b5d99b4e42547)で筆者環境に導入したハニーポット（Cowrie）のログ（デフォルトで <インストールフォルダ>var/log/cowrie/ 配下に出力される）に対して、Splunk Forwarder を設定し、ログを監視・送信することで、Splunk 上でリアルタイムに解析することを目指します。

# 前提確認：取得対象のログの整理
今回は、ハニーポット Cowrie のログを収集対象とします。Cowrie では以下のように複数のログ形式を扱っています。
- **テキストログ** (cowrie.log)：通常のテキスト形式で、SSH/Telnet セッション情報やコマンド履歴などが記録されます。
- **JSON形式ログ** (cowrie.json)：Cowrie は JSON 形式のログも生成可能です（cowrie.cfg で設定）。

いずれのログを取り込んでも良いですが、JSON形式の方が解析などの取りましには扱いやすいかもしれません。本記事ではJSON形式のログを Forwarder で収集する手順例を紹介します。

# 事前準備：パッケージ用意
[Splunk のサイト](https://www.splunk.com/ja_jp/download/universal-forwarder.html)から、最新のインストールパッケージをダウンロードします。（要Splunkアカウント）
ここでは、debパッケージを利用し、wgetのURLを取得して進めます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507379/b456f240-5be5-b7d3-c8ad-7f5a2d33874e.png)
```
$ wget -O splunkforwarder-<バージョン>-linux-amd64.deb "https://download.splunk.com/products/universalforwarder/releases/9.4.0/linux/splunkforwarder-<バージョン>-linux-amd64.deb"
$ ls -lh *.debls -lh *.deb
-rw-rw-r-- 1 piro piro 94M Dec 13 19:28 splunkforwarder-<バージョン>-linux-amd64.deb
```

# Splunk Forwarder のインストールと初期設定
ダウンロードリンクや手順はバージョンによって多少異なる場合がありますが、以下のようなコマンド例で Debian/Ubuntu 用パッケージ (.deb ファイル) をインストールします
```
$ sudo dpkg -i splunkforwarder-<バージョン>-linux-amd64.deb
Selecting previously unselected package splunkforwarder.
(Reading database ... 76828 files and directories currently installed.)
Preparing to unpack splunkforwarder-<バージョン>-linux-amd64.deb ...
・・中略・・
complete
```
インストールが完了したら、以下のように初期設定を行います。ライセンス許諾への同意と、ユーザー設定を行います。
```
$ sudo /opt/splunkforwarder/bin/splunk start --accept-license
・・中略・・
Please enter an administrator username: admin
Password must contain at least: 
   * 8 total printable ASCII character(s).
Please enter a new password: <-適当に入力（但し、デフォルトパスワード"changeme"は変えたほうが良さそう）
Please confirm new password:
・・中略・・
Starting splunk server daemon (splunkd)...
Done
```
Forwarder がどのSplunkホスト にログを送るかを設定します。 例として、Splunk Enterprise のサーバーが 9997 番ポートで待ち受けている環境を想定します。
```
$ sudo /opt/splunkforwarder/bin/splunk add forward-server <SplunkサーバーIP or hostname>:9997
・・中略・・
Added forwarding to: <SplunkサーバーIP or hostname:9997.
```
設定ファイルは `/opt/splunkforwarder/etc/system/local/outputs.conf` に記述されるので、内容を一応確認しておきます。
```
$ sudo more /opt/splunkforwarder/etc/system/local/outputs.conf
[tcpout]
defaultGroup = default-autolb-group

[tcpout:default-autolb-group]
server = <SplunkサーバーIP or hostname:9997

[tcpout-server://<SplunkサーバーIP or hostname:9997]
```
再起動時などに Forwarder は自動で起動する様に設定します。
```
$ sudo /opt/splunkforwarder/bin/splunk enable boot-start
Important: splunk will start under systemd as user: splunkfwd
Systemd unit file installed by user at /etc/systemd/system/SplunkForwarder.service.
Configured as systemd managed service.
```
次に、Cowrie のログディレクトリを Forwarder が監視するように設定します。
inputs.conf を編集し、ログファイルのパス・sourcetype・index を記載します。

例として `cowrie.json` を監視し、Splunk 上のインデックスを cowrie、ソースタイプを cowrie:json とする設定例は以下のとおりです。
```
$ sudo vi /opt/splunkforwarder/etc/system/local/inputs.conf
[monitor:///opt/cowrie/var/log/cowrie/cowrie.json]
sourcetype = cowrie:json
index = cowrie
```
設定後、Forwarder を再起動します。
```
$ sudo /opt/splunkforwarder/bin/splunk restart
```
Forwarder で指定した `index = cowrie` を Splunk 上で利用する場合、あらかじめ Splunk Enterprise 上でインデックス cowrie を作成しておく必要があります。

Splunk Web に管理者権限でログインし、[設定] -> [インデックス] -> [新規インデックス] から名前を `cowrie` として新規作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507379/ff2fb650-d9a1-f770-6b70-11df41bcc8bb.png)


# 動作確認
Cowrie に対して、 SSH ないし Telnet アクセスを実行します。
```
$ ssh root@<cowrieのIP> -p 2222
root@<cowrieのIP>'s password: <- 適当な文字列を入力

root@xxx:~# exit
```
Splunkのサーチ画面で、`index="cowrie" sourcetype="cowrie:json"`と実行し、結果が出ればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507379/06ee878d-7e4e-9c94-a5fc-ee88d4242734.png)


# まとめ
本記事では、Cowrie + Splunk Forwarder の組み合わせで、攻撃者が Cowrie にアクセスした際のログをリアルタイムに Splunk へ送信する方法を紹介しました。Cowrie の様なハニーポットのログ活用することで、より具体的なセキュリティの勉強や研究が可能になります。

- 監視対象ログの選定：どんなログを収集分析したいのか、対象を選ぶ
- Splunk Forwarder の導入：Forwarder を利用して、好きなログを Splunk に転送する
- 攻撃状況の可視化：ハニーポットをログを分析して、アタック件数、攻撃元 IP、攻撃内容等の可視化を行う

ぜひ Cowrie と Splunk の連携を通じて、ハニーポットのログ収集・解析を行い、攻撃手法の分析に活用してみてください。

# 補足
Splukがハングしている場合などは、killコマンドでやり直しする。
```
$ ps -ef | grep splunk
$ kill <pid>
```
インストールをやり直したい場合など、アンインストールする場合は以下を実行した後で、`/opt/splunkforwarder`フォルダを退避ないし削除する。
```
$ sudo dpkg -r splunkforwarder
```

# 参考
- [Splunk Universal Forwarder: Forwarder Manual](https://docs.splunk.com/Documentation/Forwarder/9.4.0/Forwarder/Abouttheuniversalforwarder)