rootkit検知ツール(chkrootkit)

chkrootkit は、システムにrootkitが組み込まれていないかを検査してくれるツール。 rootkit とは、不正アクセスの痕跡を消し去り、それを隠ぺいし、さらなる標的を攻撃することを可能とするツール群。 chkrootkit は、いくつかの rootkit を検出できるが、 検出しても駆除する機能はない。しかし不正侵入検知には役立つ。
■chkrootkitのインストール

chkrootkitをインストール
[root@server1 ~]# yum -y install chkrootkit

■chkrootkitの実行

chkrootkitを実行
[root@linux ~]# chkrootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
・
・
・
Checking `scalper'... not infected
Checking `slapper'... not infected
Checking `z2'... user root deleted or never logged from lastlog!
Checking `chkutmp'... chkutmp: nothing deleted
[root@server1 ~]# chkrootkit | grep INFECTED
実行結果中に"INFECTED"という行がなければ問題ない

■chkrootkitの定期自動実行設定
rootkitを発見したときroot宛にメールが来るように設定

chkrootkitの実行スクリプトを作成
[root@server1 ~]# vi /root/chkrootkit
#!/bin/sh
/usr/bin/chkrootkit > /var/log/chkrootkit_log
grep "INFECTED" /var/log/chkrootkit_log
chmod 600 /var/log/chkrootkit_log
chkrootkitの実行スクリプトに実行権限を与える
[root@server1 ~]# chmod 700 chkrootkit
chkrootkit実行スクリプトを毎日自動実行されるディレクトリへ移動
[root@server1 ~]# mv chkrootkit /etc/cron.daily/

■chkrootkitで使用するコマンド群のコピー
chkrootkitが使用するコマンド群をコピーしておき、必要な場合にそのコマンド群でchkrootkitを実行する。

chkrootkitで使用するコマンド群の退避先ディレクトリの作成
[root@server1 ~]# mkdir chkrootkitcmd
chkrootkitで使用するコマンド群を退避先ディレクトリへコピー
[root@server1 ~]# cp `which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed uname` chkrootkitcmd/
退避したchkrootkitでchkrootkit実行
[root@server1 ~]# chkrootkit -p /root/chkrootkitcmd|grep INFECTED
chkrootkitで使用するコマンド群の退避先ディレクトリを圧縮
[root@server1 ~]# zip -r chkrootkitcmd.zip chkrootkitcmd/
adding: chkrootkitcmd/ (stored 0%)
adding: chkrootkitcmd/id (deflated 55%)
adding: chkrootkitcmd/egrep (deflated 49%)
adding: chkrootkitcmd/sed (deflated 54%)
adding: chkrootkitcmd/netstat (deflated 58%)
adding: chkrootkitcmd/echo (deflated 54%)
adding: chkrootkitcmd/find (deflated 50%)
adding: chkrootkitcmd/awk (deflated 51%)
adding: chkrootkitcmd/head (deflated 53%)
adding: chkrootkitcmd/strings (deflated 53%)
adding: chkrootkitcmd/ps (deflated 59%)
adding: chkrootkitcmd/uname (deflated 55%)
adding: chkrootkitcmd/ls (deflated 53%)
adding: chkrootkitcmd/cut (deflated 53%)
退避先ディレクトリの削除
[root@server1 ~]# rm -rf chkrootkitcmd
圧縮したzipファイルを送信するのに必要なuuencodeコマンドのインストール
[root@server1 ~]# yum -y install sharutils
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: ftp.jaist.ac.jp
* centosplus: ftp.jaist.ac.jp
* epel: ftp.jaist.ac.jp
* extras: ftp.jaist.ac.jp
* updates: mirror.khlug.org
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package sharutils.i686 0:4.7-6.1.el6 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================
Package                      Arch                    Version                        Repository               Size
===================================================================================================================
Installing:
sharutils                    i686                    4.7-6.1.el6                    base                    186 k
Transaction Summary
===================================================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)
Total download size: 186 k
Installed size: 609 k
Downloading Packages:
sharutils-4.7-6.1.el6.i686.rpm                                                              | 186 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing     : sharutils-4.7-6.1.el6.i686                                                                  1/1
Installed:
sharutils.i686 0:4.7-6.1.el6
Complete!
圧縮したzipファイルをroot宛にメール送信
[root@server1 ~]# uuencode chkrootkitcmd.zip chkrootkitcmd.zip|mail root
圧縮したzipファイルを削除
[root@server1 ~]# rm -f chkrootkitcmd.zip

■chkrootkitの修正
Suckit による /sbin/init の改ざん誤検知対策。
rpm -V `rpm -qf /sbin/init` を実行し、なにも表示されなかったら未検出とする。
赤字の部分が追加

[root@server1 ~]# vi /usr/lib64/chkrootkit-0.49/chkrootkit
### Suckit
if [ -f ${ROOTDIR}sbin/init ]; then
if [ "${QUIET}" != "t" ];then printn "Searching for Suckit rootkit... "; fi
if [ ${SYSTEM} != "HP-UX" ] && ( ${strings} ${ROOTDIR}sbin/init | ${egrep} HOME  || \
cat ${ROOTDIR}/proc/1/maps | ${egrep} "init." ) >/dev/null 2>&1
then
if ! rpm -V `rpm -qf /sbin/init` >/dev/null 2>&1;
then
echo "Warning: ${ROOTDIR}sbin/init INFECTED"
fi
else
if [ -d ${ROOTDIR}/dev/.golf ]; then
echo "Warning: Suspect directory ${ROOTDIR}dev/.golf"
else
if [ "${QUIET}" != "t" ]; then echo "nothing found"; fi
fi
fi
fi