ACID は Snort が不正パケットを検出しても管理者に報告することは出来ません。Snort が検出する不正パケットの中には急を要するアラートが含まれるかもしれません。この場合、Snort が出力するログの監視を自動化する事でシステム管理者の負担を減らす事が出来ます。
ここではログ監視ツール Swatch を使用して危険度の高いアラートに対して管理者にメールで知らせる例を説明します。
ログを自動で監視するツールは、古くから Swatch が有名で RHL や TurboLinux など主要ディストリビューションからもパッケージが提供されています。
ログローテートに関しては自分で対策を行わなくてはならず、セットアップは面倒で、位置行単位でしかアクションを起こせない不自由な面もありますが、定義ファイルが作成し易く分かり易い面もあります。
Snort アラートの出力先に MySQL データベースを指定した場合でも、ログファイルとして出力されます。このログを Swatch で監視すれば良いことになります。
起動因数に -D を付けて Snort を起動した場合、複数行に渡る整形されたログが出力されます。
[**] [1:2570:7] WEB-MISC Invalid HTTP Version String [**]
[Classification: Detection of a non-standard protocol or event] [Priority: 2]
07/17-16:52:59.200772 0:D:2:4A:F9:96 -> 0:40:5:A8:8D:AD type:0x800 len:0x1D2
210.***.184.**:8690 -> 192.168.***.**:80 TCP TTL:53 TOS:0x0 ID:20779 IpLen:20 DgmLen:452 DF
***AP*** Seq: 0x72EB3A71 Ack: 0x64E070DB Win: 0x16D0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 2557242204 47447074
[Xref => http://cgi.nessus.org/plugins/dump.php3?id=11593][Xref => http://www.securityfocus.com/bid/9809]
緑で示したのは、ルールファイルで定義されているフィルタ名(攻撃概要)で、オレンジ色で示した個所は、攻撃のタイプです。赤色で示したのは、攻撃の危険度を示しています。数字が若いほど危険度が高くなります。
Swatch は 一行に含まれる文字列しか検出する事が出来ません。そのため、複数行に渡って整形される Snort のログでは都合がよくありません。
一行のコンパクトなログにまとめるには、因数に -A を付けて snort を起動します。 src.rpm でインストールした場合は、/etc/sysconfig/snort で指定します。 この場合、一行に整形されてログが出力されます。
03/24-19:00:46.190801 [**] [1:402:4] ICMP Destination Unreachable (Port Unreachable) [**] [Classification: Misc activity] [Priority: 3] {ICMP} xxx.x.xx.x -> 192.168.4.144
注意!!
これを行った場合、Snort は MySQL データベースにログを出力しなくなるので注意が必要です。つまり、ACID が利用出来無くなります。
スマートではありませんが、取敢えず、Swatch では Priority (プライオリティ) を判別して、詳細は ACID で確認という使い方になるのでしょうか、、
Swatch ( 3.x 系 ) については、以下で説明しています。
参照 => ログ自動監視ツールSwatchを導入する
Snort のログに限った話ではありませんが、Swatch はログローテートの際、現在監視しているログを見失うため、監視するログのローテートのタイミングに併せて Swatch を再起動する必要があります。 (TurboLinux では対策されていたような)
/etc/rc.d/init.d/ に、以下の Swatch の再起動スクリプトを作成します。以下は root 権限で swatch を実行していますが、自分は ログファイルに適切なグループ権限を与えて異なる権限で Swatch を動かしています。
#! /bin/sh
#
# Swatch This shell script takes care of starting and stopping
# swatch.
#
# chkconfig: - 91 40
# description: The Simple WATCHer is an automated monitoring tool \
# that is capable of alerting system administrators \
# of anything that matches the patterns described \
# in the configuration file, whilst constantly searching \
# logfiles using perl.
#
# processname: swatch
# config: /root/swatch
# swatch 複数起動は外部shスクリプトを参照します。
# 監視ログを追加する場合は、/root/swatch/Start_swatch.sh に追加
. /etc/rc.d/init.d/functions
RETVAL=0
# See how we were called.
case "$1" in
start)
echo -n "Starting Swatch: "
/root/swatch/Start_swatch.sh >/dev/null 2>&1 &
RETVAL=$?
echo
;;
stop)
echo -n "Stopping Swatch: "
killproc tail
RETVAL=$?
echo
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
status)
ps -ax | grep -E [n]/swatch
;;
*)
echo "Usage: swatch {start|stop|status|restart}"
exit 1
esac
/root/swatch/Start_swatch.sh には、Swatch がそれぞれのログを監視するスタートコマンドが書かれた sh スクリプトを指定しています。
#!/bin/sh
swatch - -c ~/swatch/swatchrc_messages -t /var/log/messages &
swatch - -c ~/swatch/swatchrc_secure -t /var/log/secure &
swatch - -c ~/swatch/swatchrc_mail -t /var/log/maillog &
swatch - -c ~/swatch/swatchrc_httpd -t /var/log/httpd/access_log &
swatch - -c ~/swatch/swatchrc_httpd_error -t /var/log/httpd/error_log &
swatch - -c ~/swatch/swatchrc_snort -t /var/log/snort/alert &
新しく Swatch の監視対象ログに snort を追加しています。 swatchrc_snort が Swatch の /var/log/snort/alert に対する定義ファイルです。設定例は次のページで紹介します。新たに Swatch で監視するログが出てきた場合、/root/swatch/Start_swatch.sh に記述するだけで対応できます。
作成した /etc/rc.d/init.d/swatch をシステム起動時に起動するように登録します。
これでシステムブート時に Swatch が実行されます。また、Swatch 定義ファイル修正後の再起動も以下のコマンドで行えます。
余計なプロセスが残っていないか確認するようにして下さい。
Swatch は tail コマンドを子プロセスとして呼び出すため、単に swatch デーモンを再起動するだけでは全てのプロセスを再起動できません。先に作成した Swatch 起動スクリプトをログローテートのタイミングで実行させる必要があります。
上記 /etc/rc.d/init.d/swatch の例では、複数のログを Swatch で監視しており、全ての Swatch デーモンを再起動しています。(監視ログ一つにつき、一つのSwatch デーモンが起動しているため)
既に、swatch 監視対象のログローテートで指定していた場合は、以下の修正は必要ありません。監視対象ログの何れか一つで再起動すれば良いと思います。
/etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/etc/rc.d/init.d/swatch restart ← 追加
endscript
}
次は、実際に Swath で監視を行う設定の内容を紹介します。
上記例では、~/swatch/swatchrc_snort になります。