はじめに
- 前回の概要編に続き、Sysmon for Linuxの導入の流れとTIPSをこちらでまとめていく
- 前回の概要編はSplunk Single構成のSH&IDXサーバにインストールした例でしたが、今回はSplunk Universal Forwarderをubuntuにインストールした構成にしています
検証構成
導入
※Splunk UFの導入と初期設定は省略します
- Sysmon取得のためにMSのパッケージを準備
wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
↑なぜかパッケージが0 byteで上手くDLできなかったのであきらめてcurlで取得
curl -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
- sysmon for linuxのインストール
sudo apt-get update
sudo apt-get install sysmonforlinux
# sudo apt-get install sysinternalsebpf
↑今回は未利用※
※eBPFがあるとカーネルレベルで詳細ロギングができる模様。次回調査テーマとして扱います。
- 初期設定
sudo sysmon -accepteula -i
sudo tail -f /var/log/syslog
↑ログの確認
- default config.xmlの確認と念の為コピーしておく
cat config.xml_org
<Sysmon schemaversion="4.22">
<EventFiltering>
</EventFiltering>
</Sysmon>
cp -p config.xml config.xml_org
SysmonロギングからSplunk関連のプロセスを除外
-
Sysmon for Linuxを導入し、Splunk/Splunk UFが稼働していると余計なロギングをしてしまう
-特に多い、Event ID 1(ProcessCreate)と Event ID 11 (FileCreate)でSplunk関連のプロセスが大量に発生しているのでこれを除外したい -
参考config.xmlとしてSplunkAttackRangeの以下ファイルを流用。ただしこれでもフィルタが不十分
-
SplunkForwarder関連の不要な操作をログからフィルタするために修正した以下confg.xmlを適用する
修正内容
- EventID:1 ProcessCreateでのポイントは以下Splunk関連のImageを除外する
<!-- Splunk UF -->
<Image condition="contains">splunk</Image>
<Image condition="contains">streamfwd</Image>
<Image condition="contains">splunkd</Image>
<Image condition="contains">splunk-optimize</Image>
<Image condition="contains">splunk-MonitorNoHandle</Image>
<Image condition="contains">splunk-admon</Image>
<Image condition="contains">splunk-netmon</Image>
<Image condition="contains">splunk-regmon</Image>
<Image condition="contains">splunk-winprintmon</Image>
<Image condition="contains">btool</Image>
<Image condition="contains">PYTHON</Image>
- EventID:11 FileCreateでのポイントは以下Splunk関連のImageを除外する
<TargetFilename condition="begin with">/opt/splunkforwarder/var/lib/splunk/modinputs/journald</TargetFilename> <!--Exclude Splunk Modinput Journal-->
<TargetFilename condition="begin with">/opt/splunk</TargetFilename> <!--Exclude Splunk -->
<TargetFilename condition="begin with">/data</TargetFilename> <!--Exclude Splunk Indexed Data-->
- config.xmlの更新
sysmon -c config.xml
Sysmon v1.3.3 - Monitors system events
Sysinternals - www.sysinternals.com
By Mark Russinovich, Thomas Garnier and Kevin Sheldrake
Copyright (C) 2014-2023 Microsoft Corporation
Licensed under MIT/GPLv2
Using libxml2. libxml2 is Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved.
Loading configuration file with schema version 4.81
Configuration file validated.
↑構文エラーがなければ良し
systemctl restart sysmon.service
↑サービス再起動
(忘れないで)syslogとjournaldのログローテーション設定
- Splunkにログを転送しつつ、サーバ側のオリジナルログ(syslogとjournald)が溢れないように設定を入れておきます
journaldローテーション設定
- journaldには永続ログ(/var/log/journal配下)と一時的なログ(/var/run/journal配下)を保持する
・ログ全体の最大サイズを50MB、ファイルごとの最大サイズを50MBに制限したい場合の例
vi /etc/systemd/journald.conf
[Journal]
SystemMaxUse=50M
SystemKeepFree=100M
SystemMaxFileSize=50M
SystemMaxFiles=10
・設定保存後、サービス再起動
sudo systemctl restart systemd-journald
- (参考)journaldのローテーションがちゃんとされているか確認
・diskサイズの確認
journalctl --disk-usage
Archived and active journals take up 106.0M in the file system.
・実際のサイズを確認
/var/log/journal/998b65a11cd3435a8bb3bb8fbcdbf9b8# ll
合計 116760
drwxr-sr-x+ 2 root systemd-journal 12288 12月 22 09:04 ./
drwxr-sr-x+ 3 root systemd-journal 4096 6月 18 2023 ../
-rw-r-----+ 1 root systemd-journal 50331648 12月 22 09:09 system.journal
-rw-r-----+ 1 root systemd-journal 52428800 12月 22 09:04 'system@6b1578d3dc9a40d89ecc89922da41b5e-0000000056eb9f53-000629d08eb1c8c5.journal'
・もう一度、サイズを確認
journalctl --disk-usage
Archived and active journals take up 58.0M in the file system.
・定期的に1ファイル50MBを超えると過去1世代アーカイブファイルを残してローテーションされていることがわかる
syslogローテーション設定
- defaultでrsyslogがローテーション管理をしています
- 環境に応じてローテーションタイミングは適宜変更できます
cat /etc/logrotate.d/rsyslog
/var/log/syslog
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
参照リンク
- https://github.com/microsoft/SysmonForLinux/blob/main/INSTALL.md
- https://dev.classmethod.jp/articles/sysmon-for-linux-oss/
- https://www.secuavail.com/kb/windows-linux/sysmonforlinux-ubuntu-almalinux/