rkhunterのインストールと設定

CentOS6にchkrootkitをインストールしようと思ったものの、RPM forgeにもなかったので、代わりに「rkhunter」を導入する。

CentOS5でも、同様にインストール~設定ができる。

インストール

RPM forgeからインストールするので、yumリポジトリを追加しておく。

# yum --enablerepo=rpmforge install rkhunter

バージョン確認

# rpm -qa | grep rkhunter
rkhunter-1.4.0-1.el6.rf.noarch

内容確認

# rpm -ql rkhunter
/etc/rkhunter.conf
/usr/bin/rkhunter
/usr/lib64/rkhunter
/usr/lib64/rkhunter/scripts
/usr/lib64/rkhunter/scripts/check_modules.pl
/usr/lib64/rkhunter/scripts/filehashsha.pl
/usr/lib64/rkhunter/scripts/readlink.sh
/usr/lib64/rkhunter/scripts/stat.pl
/usr/share/man/man8/rkhunter.8.gz
/var/lib/rkhunter
/var/lib/rkhunter/db
/var/lib/rkhunter/db/backdoorports.dat
/var/lib/rkhunter/db/i18n
/var/lib/rkhunter/db/i18n/cn
/var/lib/rkhunter/db/i18n/de
/var/lib/rkhunter/db/i18n/en
/var/lib/rkhunter/db/i18n/zh
/var/lib/rkhunter/db/i18n/zh.utf8
/var/lib/rkhunter/db/mirrors.dat
/var/lib/rkhunter/db/programs_bad.dat
/var/lib/rkhunter/db/suspscan.dat
/var/lib/rkhunter/tmp

使い方

最初に、定義を更新する。cron等で定期実行すると良い。

# rkhunter --update
# rkhunter --propupd

チェック

# rkhunter --check

非対話モードでチェック(Enterを要求されない)

# rkhunter --check --skip-keypress

エラーのみ表示する場合は、オプションを付加

# rkhunter --check --skip-keypress --report-warnings-only

デフォルトでは、ログが /var/log/rkhunter.log に出力される。

※ -l オプションでファイルを指定すると、別ファイルにログを出力できる。

設定

khunterの設定ファイルは以下のもの。

/etc/rkhunter.conf

設定ファイルを編集したら、「rkhunter --propupd」を実行する。
これを実行しないと、設定ファイルが変更されている旨(ハッシュが異なる)の警告が出る。

Warning: The file properties have changed:
         File: /etc/rkhunter.conf
         Current hash: c050c57f9afa82356ac2f46ed6535e843c01904b
         Stored hash : ba8f7fa5eca1e95fa090a44e011ef14059c8fdb4
         Current size: 38202    Stored size: 38201
         Current file modification time: 1350520438 (18-10-2012 09:33:58)
         Stored file modification time : 1350520324 (18-10-2012 09:32:04)

警告の対処

初期設定では、色々な警告が出力されるので対処。

Warning: The command '/usr/bin/GET' has been replaced by a script: /usr/bin/GET: a /usr/bin/perl -w script text executable

 ↓
設定ファイルに「SCRIPTWHITELIST」を追記する。設定は、1行に1リストあるい
は半角スペース区切りで記載する。
 ↓

SCRIPTWHITELIST="/usr/bin/GET"
SCRIPTWHITELIST="/usr/bin/ldd"
SCRIPTWHITELIST="/usr/bin/whatis"
SCRIPTWHITELIST="/sbin/ifdown"
SCRIPTWHITELIST="/sbin/ifup"

=====

Warning: Hidden directory found: '/dev/.udev'

 ↓
「ALLOWHIDDENDIR」「ALLOWHIDDENFILE」にそれぞれ指定する。
 ↓

ALLOWHIDDENDIR="/dev/.mdadm"
ALLOWHIDDENDIR="/dev/.udev"
ALLOWHIDDENFILE="/usr/share/man/man5/.k5login.5.gz"
ALLOWHIDDENFILE="/usr/share/man/man1/..1.gz"
ALLOWHIDDENFILE="/usr/bin/.ssh.hmac"
ALLOWHIDDENFILE="/usr/bin/.fipscheck.hmac"
ALLOWHIDDENFILE="/usr/sbin/.sshd.hmac"
ALLOWHIDDENFILE="/sbin/.cryptsetup.hmac"

=====

Warning: Application 'httpd', version '2.2.15', is out of date, and possibly a security risk.

 ↓
「APP_WHITELIST」に指定する。
 ↓

APP_WHITELIST="httpd"
APP_WHITELIST="openssl"

=====

Warning: Suspicious file types found in /dev:
         /dev/.udev/queue.bin: data
         /dev/.udev/db/block:sda5: ASCII text
         /dev/.udev/db/block:sda1: ASCII text
         /dev/.udev/db/block:sda2: ASCII text
         /dev/.udev/db/net:eth1: ASCII text
         /dev/.udev/db/net:eth0: ASCII text
         /dev/.udev/db/input:event0: ASCII text
         /dev/.udev/db/block:sda3: ASCII text
         /dev/.udev/db/block:sda4: ASCII text
         /dev/.udev/db/block:sda: ASCII text
         /dev/.udev/db/input:event1: ASCII text
         /dev/.udev/db/block:sr0: ASCII text
         /dev/.udev/db/input:event2: ASCII text
         /dev/.udev/db/input:mouse1: ASCII text
         /dev/.udev/db/input:event3: ASCII text
         /dev/.udev/db/block:ram10: ASCII text
         /dev/.udev/db/block:ram0: ASCII text
         /dev/.udev/db/block:ram14: ASCII text
         /dev/.udev/db/block:ram6: ASCII text
         /dev/.udev/db/block:ram7: ASCII text
         /dev/.udev/db/block:loop0: ASCII text
         /dev/.udev/db/block:ram15: ASCII text
         /dev/.udev/db/block:ram12: ASCII text
         /dev/.udev/db/block:loop7: ASCII text
         /dev/.udev/db/block:loop3: ASCII text
         /dev/.udev/db/block:ram8: ASCII text
         /dev/.udev/db/block:ram9: ASCII text
         /dev/.udev/db/block:loop5: ASCII text
         /dev/.udev/db/block:loop4: ASCII text
         /dev/.udev/db/block:loop1: ASCII text
         /dev/.udev/db/block:loop6: ASCII text
         /dev/.udev/db/block:ram13: ASCII text
         /dev/.udev/db/block:ram1: ASCII text
         /dev/.udev/db/block:ram5: ASCII text
         /dev/.udev/db/block:ram3: ASCII text
         /dev/.udev/db/block:ram4: ASCII text
         /dev/.udev/db/block:ram11: ASCII text
         /dev/.udev/db/block:ram2: ASCII text
         /dev/.udev/db/block:loop2: ASCII text
         /dev/.udev/db/serio:serio0: ASCII text
         /dev/.udev/rules.d/99-root.rules: ASCII text

 ↓
「ALLOWDEVFILE」に記載する。
 ↓

ALLOWDEVFILE="/dev/.udev/queue.bin"
ALLOWDEVFILE="/dev/.udev/db/block:*"
ALLOWDEVFILE="/dev/.udev/db/net:*"
ALLOWDEVFILE="/dev/.udev/db/input:*"
ALLOWDEVFILE="/dev/.udev/db/serio:*"
ALLOWDEVFILE="/dev/.udev/rules.d/99-root.rules"

※SCAN_MODE_DEV=THOROUGH を LAZY に変更しても警告が出なくなるが、設定ファイルには「THOROUGH」を推奨と記載されている。


チェックの定期実行

非対話モードでスキャンを実行し、警告をファイルへ出力し、警告がある場合のみ、メールで通知するスクリプトを作成する。

$ cat rkhunter.sh
#!/bin/bash

MAIL_TO="root"
MAIL_SUBJECT="rkhunter detected warning"
MAIL_TEXT=/tmp/`mktemp temp.XXXXXX`

rkhunter --update
rkhunter --check --skip-keypress --report-warnings-only > $MAIL_TEXT

if [ -s $MAIL_TEXT ]; then
  mail -s "$MAIL_SUBJECT" $MAIL_TO < $MAIL_TEXT
fi

rm -rf $MAIL_TEXT


※mail -s の引数は、"" で囲わないとスペースが入っている場合に引数と判断されるので注意。

cronに登録する。

# rkhunter check
30 0 * * * root /path-to/rkhunter.sh