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