2001年3月4日 更新

ログ解析方法


UNIXでは各種プログラムのログの記録は一般的にはsyslogdというデーモンプロセスによって記録されています。(apacheやsquidのようにデフォルトでは、専用のログを記録する方法を取っている場合もあります)
syslogdでは、/etc/syslog.confの設定に基づいて通常は/var/logディレクトリの下に各種のログファイルを残すようになっています。
ログベースでのIDSを構築するには、攻撃や侵入を受けた際にそれを判断できるだけの情報としてログファイルに記録させておく必要があります。
下記の例(2行目)のように”info”ファシリティレベルでログを取り出しておきましょう。

・/etc/syslog.confの例
#
*.info /var/log/info.log
*.err;kern.debug;auth.notice;mail.crit /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/log/cron
*.err root
*.notice;news.err root
*.alert root
*.emerg *
# uncomment this to enable logging of all log messages to /var/log/all.log
#*.* /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.* @loghost
# uncomment these if you're running inn
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
!startslip
*.* /var/log/slip.log
!ppp
*.* /var/log/ppp.log
このままでは、”/var/log/info.log”が膨大な量になってしまい、ディスクスペースを食いつぶしてしまう危険があるので、ログのローテーションを実行できるようにしておきます。linuxの場合には多分、「/etc/logrotate.d/syslog」というファイルがある筈なのでこれを開きます。このファイルに以下のような行を追加してください。
次回起動以後、info.logのローテーションが行われるようになります。
(/etc/logrotate.d/syslog)
    ::
/var/log/info.log {
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
FreeBSDでは、上記ファイルではなく、「/etc/newsyslog.conf」というファイルがあるので、ここに以下の行を追加してください。
(/etc/newsyslog.conf)
/var/log/messages 644 3 100 * B
ログが取れるようになったらいよいよIDSの構築です。紹介するツールは”swatch”です。

■swatch( http://www.stanford.edu/~atkins/swatch/

swatchは厳密な意味ではIDSとは云えないかもしれません。このツールはログファイルの中から、特定のキーワードが現れた場合に、コンソール画面やメール、指定のプログラム等で管理者へそれを知らせる仕組みを提供しています。ログの検査はバッチで行う以外に、リアルタイム的に行う方法が提供されているので、ログに異常値が現れたなら直ちに管理者がそれを知ることが可能です。
swatchはPerlで記述されたプログラム(swatch.tar)で、上記のサイトから入手可能です。
プログラムのインストール
入手したプログラムを解凍してインストールを実行します。
   # tar xvf swatch.tar
   # cd swatch-x.x.x
   # perl Makefile.PL

Swatchをインストールするには、幾つかのPerlモジュールが必要になるかも知れません。もし必要とするモジュールがインストールされていない場合には、

   Checking for Time::HiRes 1.12 ...
   You don't have the Time::HiRes 1.12 module installed.
   Would you like to install the module now?
といったようなメッセージが表示されて、必要なモジュールをインストールするか確認してきます。これらのインストールが済んでいない場合には質問に答えて、モジュールをインストールするようにしてください。正常にモジュールの組み込みが終わったなら以下の手順でSwatchをインストールします。

# make
# make test
# make install
i以上でswatchがシステムにインストールされます。
swatchを実行するには、予め検知ルールを設定したファイルが必要になります。 このためのサンプルが”examples”というディレクトリにあるので、これらを参照すると良いでしょう。
例として以下のswatchのルールファイルを示しておきます。
(swatch.rcの例)
#
# Swatch configuration file for constant monitoring
#

#  
watchfor   /nessus@/
	echo inverse
	bell 3
	mail=administrator@hogehoge.co.jp

#  
watchfor   /su:|user root/
	echo inverse
	bell 3

#  
watchfor   /unreachab/
	echo inverse
	bell 3

#  
watchfor   /not allowed/
	echo inverse
	bell 3

#  
watchfor   /unknown/
	echo inverse
	bell 3

#  
watchfor   /debug/
	echo inverse
	bell 3

#  
watchfor   /peer died/
	echo inverse
	bell 3

#  
watchfor   /not connected/
	echo inverse
	bell 3

# Bad connection
watchfor   /Connection reset/
	echo inverse
	bell 3

# Bad request
watchfor   /Can't|Cannot/
	echo inverse
	bell 3

# Bad request
watchfor   /NULL/
	echo inverse
	bell 3

#  
watchfor   /Bad|bad/
	echo inverse
	bell 3

#  
watchfor   /denied/
	echo inverse
	bell 3

# 
watchfor   /FAILED|failed|failure|illegal/
	echo inverse
	bell 3

# 
watchfor   /Broken pipe/
	echo inverse
	bell 3

# --------- original ------------
#	exec "/usr/local/sbin/badloginfinger $0"
watchfor   /INVALID|REPEATED|INCOMPLETE/
	echo inverse
	bell 3
#	exec "/usr/local/sbin/badloginfinger $0"

# Machine room temperature
watchfor   /WizMON/
	echo inverse
	bell

# System crashes and halts
watchfor   /(panic|halt)/
	echo
	bell
	mail
#	exec "call_pager 3667615 0911"

# System reboots
watchfor   /SunOS Release/
	echo
	bell
	mail
#	exec "call_pager 3667615 0411"

作成したルールを使ってログを検知するには次のようにコマンドを入力します。
  # perl swatch -c swatch.rc -t /var/log/info.log
これで、最初に設定したログファイルの内容を検査して、管理者へルールの内容を出力するようになります。
このコマンドをシステム起動時に自動的に起動するようにすればあとは勝手にシステムをチェックしてくれるようになる事でしょう。

戻る