【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にスケジュール登録するようにしてください。










この記事が気に入ったらサポートをしてみませんか?