【Linux】侵入検知サービス(Rootkit Hunter)のインストールと設定
不正侵入検知(IDS)サービスであるRootkit Hunterのインストールと基本的(一部マニアック)な設定をしていきます。
もちろん、サーバ侵入者による改竄を検知する目的もありますが、管理者の行ったユーザ登録などのダブルチェックの意味でも有用だと思います。(/etc/passwdの変更なども検知してくれます。)
yum でRootkit Hunterをインストールするため、epel-releaseのインストール
$ yum install epel-release
でうまくいかない場合は、
$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
$ wget http://mirror.nsc.liu.se/centos-store/centos/6.10/extras/x86_64/Packages/epel-release-6-8.noarch.rpm
$ rpm -Uvh epel-release-latest-6.noarch.rpm
で、epel-release のインストールを試してみます。
epel-releaseのインストールが出来たら、
yum でRootkit Hunterをインストールする
$ yum install rkhunter
この下にいくつか記載した検知除外は必要に応じて設定してください。
Oracle共有メモリの誤検知を除外
Oracleインスタンスを起動している場合は、共有メモリをRootKitと誤検知してしまうようなので、設定ファイル(/etc/rkhunter.conf)に追記が必要です。
# OracleServer
ALLOWDEVFILE=/dev/shm/ora_orcl_*
VPNサービスでのプロミスキャスモード誤検知を除外
SoftetherなどのVPNが稼働している場合に、プロミスキャスモードで警告が出ることがあります。一つのNICでやっていると、自マシンのNICと、VPN接続してきたマシンと両方のNICとしてふるまうため、仕方ないと思われるので、警告を除外します。
Warning: Possible promiscuous interfaces:
'ifconfig' command output:
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
'ip' command output:
eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
ALLOWPROMISCIF=eth0
Zabbixの共有メモリ誤検知を除外
プロセス間通信で利用する共有メモリはパフォーマンスに優れるためApacheなどで用いられますが、ZabbixのMySQLプロセスでも用いられているようです。ZabbixとMySQLの連携は既知の(管理者が設置した)機能なので、警告を除外します。
Warning: The following suspicious (large) shared memory segments have been found:
Process: /usr/sbin/zabbix_server_mysql PID: 15964 Owner: zabbix Size: 8388608 (configured size allowed: 1048576)
ALLOWIPCPROC=/usr/sbin/zabbix_server_mysql
日次チェックのためのスクリプトを修正
$ cat /etc/cron.daily/rkhunter
#!/bin/sh
# 01-rkhunter A shell script to update and run rkhunter via CRON
XITVAL=0
MAIL_TO=report_to@example.com
MAIL_FROM=report_from@example.com
# Get a secure tempfile
TMPFILE1=`/bin/mktemp -p /var/lib/rkhunter rkhcronlog.XXXXXXXXXX` || exit 1
if [ ! -e /var/lock/subsys/rkhunter ]; then
# Try to keep the SysInit boot scan from colliding with us (highly unlikely)
/bin/touch /var/lock/subsys/rkhunter
# Source system configuration parameters.
if [ -e /etc/sysconfig/rkhunter ] ; then
. /etc/sysconfig/rkhunter
# else
# MAILTO=root@localhost
fi
# If a diagnostic mode scan was requested, setup the parameters
if [ "$DIAG_SCAN" == "yes" ]; then
RKHUNTER_FLAGS="--checkall --skip-keypress --nocolors --quiet --appendlog --display-logfile"
else
RKHUNTER_FLAGS="--cronjob --nocolors --report-warnings-only"
fi
# Set a few critical parameters
RKHUNTER=/usr/bin/rkhunter
LOGFILE=/var/log/rkhunter/rkhunter.log
# Run RootKit Hunter if available
if [ -x $RKHUNTER ]; then
/bin/echo -e "\n--------------------- Start Rootkit Hunter Update ---------------------" \
> $TMPFILE1
/bin/nice -n 10 $RKHUNTER --update --nocolors 2>&1 >> $TMPFILE1
/bin/echo -e "\n---------------------- Start Rootkit Hunter Scan ----------------------" \
>> $TMPFILE1
/bin/nice -n 10 $RKHUNTER $RKHUNTER_FLAGS 2>&1 >> $TMPFILE1
XITVAL=$?
/bin/echo -e "\n----------------------- End Rootkit Hunter Scan -----------------------" \
>> $TMPFILE1
if [ $XITVAL != 0 ]; then
/bin/sed -i '1s/^/Status:PROBLEM\nDescription:/' $TMPFILE1
/bin/cat $TMPFILE1 | /bin/mail -s "重大 | $(hostname) | RootKithunter侵入検知" -r "$MAIL_FROM" "$MAIL_TO"
#/bin/cat $TMPFILE1 | /bin/mail -s "rkhunter Daily Run on $(hostname)" $MAILTO
# else
# /bin/echo -e "Status:OK\nDescription:侵入は検知されませんでした。" | /bin/mail -s "重大 | $(hostname) | RootKithunter侵入検知" -r "$MAIL_FROM" "$MAIL_TO"
fi
/bin/cat $TMPFILE1 >> $LOGFILE
fi
# Delete the gating lockfile
/bin/rm -f /var/lock/subsys/rkhunter
fi
# Delete the secure tempfile
MAIL_TOに設定したメールアドレス宛に1日に一度Rootkit Hunterでスキャンした結果メールが届きます。手元の環境だと大体 未明の3時ごろに届きます。
念のため、一度手動で実行して結果を見てみましょう。
$ /usr/bin/rkhunter --propupd
$ /etc/cron.daily/rkhunter
もし、毎日決まった時間にRootkit Hunterスキャンさせたい場合は、cron.daily配下にShellScriptを置かずに、別の場所(例えば、/root/rkhunter など)に設置したスキャンスクリプトをcronにスケジュール登録するようにしてください。
この記事が気に入ったらサポートをしてみませんか?