■syslogチェック
snortで以下のエラーが出るようになった。
だいたい以下のような意味でよいのかな?
「42行目のルールが読み込まれているけど、
まだチェックされていないビットの立っているモジュールがあるよ。」
$ sudo less /var/log/syslog | grep -i "error\|warn\|crit" | awk -F\: '{print $4":"$5}'
Warning: /etc/snort/rules/dos.rules(42) => threshold (in rule) is deprecated; use detection_filter instead.
Warning: flowbits key 'smb.tree.create.llsrpc' is set but not ever checked.
Warning: flowbits key 'community_uri.size.1050' is set but not ever checked.
Warning: flowbits key 'ms_sql_seen_dns' is checked but not ever set.
Warning: flowbits key 'realplayer.playlist' is checked but not ever set.
■該当ルールのチェック
vi/vimで探すときは「:42」で移動できる。
まだチェックされていないというのは、大抵使う必要が無いルールだから。
該当ルールはコメントアウト済み。
Windows 2000/WindowsNTとUNIX間の印刷サービスについて、
不正な印刷要求をポート 515 に送信し、DOS攻撃とする。
CVE-2000-0232
http://www.iss.net/security_center/reference/jp/vuln/Windows_Printing_Service_DOS.htm
$ sudo nl -n ln -b a /etc/snort/rules/dos.rules | grep 2000-0232 | sed s/"(\|\,\|\;"/"&\n"/g
44
msg:"DOS WIN32 TCP print service denial of service attempt";
flow:to_server,
established;
dsize:>600;
reference:bugtraq,
1082;
reference:cve,
2000-0232;
reference:url,
www.microsoft.com/technet/security/bulletin/MS00-021.mspx;
classtype:attempted-dos;
sid:3442;
rev:3;
)
■脆弱性の範囲の確認
$ grep "515\/" /etc/services
printer 515/tcp spooler
$ netstat -an | grep 515 || echo "Not Found"
Not Found
■代替の対策
上位からも配下からも、このサーバに対して印刷サービスへの要求はないので、破棄する。
$ sudo grep "515" /etc/iptables-save
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 515 -j DROP
■snort側の対応
Snortの使用しないルール「CVE-2005-0095」を無効にし、デーモンの再起動。
$ sudo nl -n ln /etc/snort/rules/dos.rules | grep ^43 | cut -c -80
42
$ sudo /etc/init.d/snort restart
Stopping Network Intrusion Detection System : snort (eth0 ...done).
Starting Network Intrusion Detection System : snort (eth0 using /etc/snort/snort.conf ...done).
■syslogチェックに戻る。
定期的な作業なので、syslogのログでシステムメールを飛ばしても良い。
debianでは、「MAILTO=""」でメールが飛ばないようにしていない限り、自動的にメールが来る。
私の場合は、メールが飛ばないようにしているので、/var/log/syslogで確認する。
※手動的にmailコマンドにパイプしている行は、cronが走るとシステムメールを送る。
私の環境では、root宛てのシステムメールのヘッダにも「X-Virus-Scanned」と「X-Spam-*」が付いている。
$ env EDITOR=vim crontab -e
$ env EDITOR=vim crontab -l
MAILTO=""
20 21 * * * grep "error\|warn\|crit" /var/log/syslog | mail -s "syslog report" root
$ sudo tail -f /var/log/syslog | grep -i cron
(root) CMD (grep "error\|warn\|crit" /var/log/syslog | mail -s "syslog report" root)
■おまけ
Snortの「tcpdump.log.*」は放置しているとパーティションを圧迫することがある。
別途バックアップを行っているため、当該ログは不要。
圧縮率も低いので、ローテーション指定日以前のログを削除。
snort_log
git@github.com:labunix/snort_log.git
$ sudo cat snort_deletelog.sh
ROTATE=14
if [ `id -u` -ne "0" ];then
echo "Sorry,Not Permit User!"
exit 1
fi
SNORTLOG=/var/log/snort
test -d $SNORTLOG || exit 1
SNORTTEMP=/tmp/snort_list.tmp
touch $SNORTTEMP || exit 1
chmod 600 $SNORTTEMP || exit 1
find $SNORTLOG -name "tcpdump.log.*[0-9]" -mtime +$ROTATE \
-exec ls -l {} \; > $SNORTTEMP
if [ -s $SNORTTEMP ];then
echo "KeyDay:"`env LANG=C date --date "${ROTATE} days ago"` >> $SNORTTEMP
cat $SNORTTEMP | mail -s "Snort tcpdump.log Delete" root
find $SNORTLOG -name "tcpdump.log.*[0-9]" -mtime +$ROTATE \
-exec rm -f {} \;
else
echo "Do Nothing"
fi
rm -f $SNORTTEMP
unset SNORTTEMP
exit 0