■chkrootkit、tripwireと左記で除外したファイル/ディレクトリをclamavでチェックする。
chkrootkitはその名の通り、「rootkit」を検出する。
tripwireはファイルやディレクトリの変更を重要度に沿って通知する。
上記でチェック出来ないファイルはclamavでチェックすることでカバーする。
■chkrootkitの導入。
$ sudo apt-get install -y chkrootkit
$ sudo cp -pi /etc/chkrootkit.conf /etc/chkrootkit.conf.org
$ cat /etc/chkrootkit.conf.org | sed s/"false"/"true"/g | sudo tee /etc/chkrootkit.conf
RUN_DAILY="true"
RUN_DAILY_OPTS="-q"
DIFF_MODE="true"
$ echo -e "\n[chkrootkit.conf]\t\t\t[chkrootkit.conf.org]\n"; \
diff -y --width=80 /etc/chkrootkit.conf /etc/chkrootkit.conf.org
[chkrootkit.conf] [chkrootkit.conf.org]
RUN_DAILY="true" | RUN_DAILY="false"
RUN_DAILY_OPTS="-q" RUN_DAILY_OPTS="-q"
DIFF_MODE="true" | DIFF_MODE="false"
■システムメールの送信
※infectedは感染を発見。
$ tail -2 /etc/cron.daily/chkrootkit
cat $LOG_DIR/log.today | \
mail -s "chkrootkit Dairy Report `date '+%Y/%m/%d'`" root
$ sudo /etc/cron.daily/chkrootkit
$ sudo -u root mail
& 1
& s systemmail.log
& q
$ sed s/" "/"\n"/g systemmail.log
/usr/lib/iceweasel/.autoreg
/usr/lib/jvm/.java-6-openjdk.jinfo
/usr/lib/pymodules/python2.6/.path
/usr/lib/xulrunner-1.9.1/.autoreg
/lib/init/rw/.ramfs
eth0:
PACKET
SNIFFER(/usr/sbin/snort[10106])
■単体で実行し、チェック出来ていないファイルであることを確認。
$ sudo chkrootkit | grep -v " not \| nothing \| no " | \
sed s/" \/"/"\n\/"/g | sed s/"\,\|\.\.\."/"&\n"/g
ROOTDIR is '/'
Searching for suspicious files and dirs,
it may take a while...
The following suspicious files and directories were found:
/usr/lib/iceweasel/.autoreg
/usr/lib/jvm/.java-6-openjdk.jinfo
/usr/lib/pymodules/python2.6/.path
/usr/lib/xulrunner-1.9.1/.autoreg
/lib/init/rw/.ramfs
eth0: PACKET SNIFFER(/usr/sbin/snort[10106])
$ sudo chkrootkit | grep -v " not \| nothing \| no " | \
sed s/" \/"/"\n\/"/g | sed s/"\,\|\.\.\."/"&\n"/g | grep "^/" | \
for list in `xargs`;do ls -l "$list";done
-rw-r--r-- 1 root root 0 2012-08-13 20:36 /usr/lib/iceweasel/.autoreg
-rw-r--r-- 1 root root 2313 2012-06-27 22:49 /usr/lib/jvm/.java-6-openjdk.jinfo
-rw-r--r-- 1 root root 29 2012-02-21 23:01 /usr/lib/pymodules/python2.6/.path
-rw-r--r-- 1 root root 0 2012-08-13 20:36 /usr/lib/xulrunner-1.9.1/.autoreg
-rw-r--r-- 1 root root 0 2012-08-26 23:25 /lib/init/rw/.ramfs
■clamavでチェックするよう変更
※これも「Infected files」が0以外は感染。
Squeezeにclamavを導入。EICARチェック
http://d.hatena.ne.jp/labunix/20120423
$ grep "^CHECKDIR" clamcheck.sh
CHECKDIR="/tmp /home /var /lib /usr/lib /usr/sbin/snort"
$ sudo ./clamcheck.sh | grep Infected
& 1
& s sample.log
& q
$ grep Infected sample.log
Infected files: 0
Infected files: 0
Infected files: 0
Infected files: 0
Infected files: 0
$ sudo grep Infect /var/log/clamav/scan_summary.log.20120830
Infected files: 0
Infected files: 0
Infected files: 0
Infected files: 0
Infected files: 0
■Tripwireについて
参考:第4回:レポートの送信とCronを利用した定期的な整合性のチェック (2/5)
http://www.itmedia.co.jp/enterprise/0211/22/n05_2.html
$ w3m -dump http://www.itmedia.co.jp/enterprise/0211/22/n05_2.html | \
grep "^LOOSEDIRECTORYCHECKINGの設定について" -A 12
LOOSEDIRECTORYCHECKINGの設定について
設定ファイルに、ディレクトリのチェックに関する設定として、「
LOOSEDIRECTORYCHECKING」という項目がある。デフォルトでは「false」に設定されてい
るが、通常は「true」に設定しておくほうがよいだろう。というのは、この項目がfalse
になっていると、ディレクトリの中にあるファイルを削除や変更した際に、そのファイ
ルに関する警告と、ディレクトリに変更があったという警告の2つが報告されてしまうこ
とになるためだ。
たとえば、「/var/www/html/」というディレクトリを検査対象としていた場合、「/
var/www/html/index.html」を変更したとすると、「/var/www/html/index.htmlが変更さ
れた」という警告と、「/var/www/html/が変更された」という2つの警告が報告されてし
まうわけだ。「LOOSEDIRECTORYCHECKING =true」という設定にしておけば、こういった
■Tripwireの導入。
上記の設定変更を行う。
サイトキーパスフレーズと、ローカルキーパスフレーズを設定
※SMTPホスト等も必要であれば変更する。
$ sudo apt-get install -y tripwire
$ sudo grep CHECK /etc/tripwire/twcfg.txt
LOOSEDIRECTORYCHECKING =false
$ sudo cp -pi /etc/tripwire/twcfg.txt /etc/tripwire/twcfg.txt.org
$ sudo sed s/"\(LOOSEDIRECTORYCHECKING =\)false"/"\1true"/ /etc/tripwire/twcfg.txt.org | \
sudo tee /etc/tripwire/twcfg.txt
ROOT =/usr/sbin
POLFILE =/etc/tripwire/tw.pol
DBFILE =/var/lib/tripwire/$(HOSTNAME).twd
REPORTFILE =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE =/etc/tripwire/site.key
LOCALKEYFILE =/etc/tripwire/$(HOSTNAME)-local.key
EDITOR =/usr/bin/editor
LATEPROMPTING =false
LOOSEDIRECTORYCHECKING =true
MAILNOVIOLATIONS =true
EMAILREPORTLEVEL =3
REPORTLEVEL =3
SYSLOGREPORTING =true
MAILMETHOD =SMTP
SMTPHOST =localhost
SMTPPORT =25
■サイトキーパスフレーズをインストール時に設定しなかった場合
※インストール時に設定してもやり直せる。
$ sudo twadmin -m F -c /etc/tripwire/tw.cfg \
-S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
■ローカルキーパスフレーズを設定した場合も以下は行う。
※ローカルキーパスフレーズとポリシー初期化「/etc/tripwire/tw.pol」
ここで得た「Filename」は「twpol.txt」でコメントアウトして除外する。
また、ここで除外したディレクトリやファイルはclamavでチェックする。
$ sudo tripwire -m c 2>&1 | tee tripwirecheck.log
$ grep Filename tripwirecheck.log | awk -F\: '{print $2}' | \
sed s%"/[\.A-z0-9]*\$"%%g | sort -u
/etc
/proc/31128/fd
/proc/31128/fdinfo
/proc/31128/task/31128/fd
/proc/31128/task/31128/fdinfo
/root
/root/.gnome-desktop
/root/.xsession-errors
■「twpol.txt」で除外するファイルやディレクトリをコメントアウト
$ sudo cp -pi /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.org
$ sudo vim /etc/tripwire/twpol.txt
*****ここで除外*****
■最適化済のポリシーファイルを元にポリシーファイル(暗号署名版)を作成
$ sudo twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol \
-S /etc/tripwire/site.key /etc/tripwire/twpol.txt
■データベースを作成
$ sudo tripwire -m i -s -c /etc/tripwire/tw.cfg
■整合性チェック
$ sudo tripwire -m c 2>&1 | tee tripwirecheck.log
$ grep -A 11 "Error Report" tripwirecheck.log
Error Report:
===============================================================================
No Errors
-------------------------------------------------------------------------------
*** End of report ***
Open Source Tripwire 2.4 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use --version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
■レポートメールのチェック
cronでメールが送信される前提のチェック。
$ cat /etc/cron.daily/tripwire
tripwire=/usr/sbin/tripwire
[ -x $tripwire ] || exit 0
umask 027
$tripwire --check --quiet --email-report
■内容は上記と同じ。
せっかくなのでスクリプトにする。
上記の結果を「tee」で渡して直接メールしても良いが、
手動で任意の時間に実行する場合にも対応する。
$ cat ./myscripts/tripwiresummary.sh
if [ "`id -u`" -ne "0" ];then
echo "Sorry,Not Permit User!"
exit 1
fi
TRIPWIRELOG=/var/log/tripwirecheck.log
tripwire -m c > "$TRIPWIRELOG" 2>&1
LINE=$(wc -l $TRIPWIRELOG | awk '{print $1+0}')
if [ "$LINE" -ne "0" ];then
cat $TRIPWIRELOG | \
mail -s "TripWire Summary Report `date '+%Y%m%d'`" root
fi
unset TRIPWIRELOG LINE
exit 0
$ chmod +x /myscripts/tripwiresummary.sh
$ sudo ./tripwiresummary.sh
$ sudo grep -A 12 "Error Report" /var/log/tripwirecheck.log
Error Report:
===============================================================================
No Errors
-------------------------------------------------------------------------------
*** End of report ***
Open Source Tripwire 2.4 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use --version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.
$ sudo cp tripwiresummary.sh /etc/cron.daily/