chkrootkit、tripwire、clamavチェック

■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
#!/bin/sh -e

tripwire=/usr/sbin/tripwire

[ -x $tripwire ] || exit 0

umask 027

$tripwire --check --quiet --email-report

■内容は上記と同じ。
 せっかくなのでスクリプトにする。
 上記の結果を「tee」で渡して直接メールしても良いが、
 手動で任意の時間に実行する場合にも対応する。

$ cat ./myscripts/tripwiresummary.sh
#!/bin/bash

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/