Debian GNU/Linux 7.1.0 サーバに rootkit 検知ツール chkrootkit をインストールする方法についての記録です。

以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。

0. 前提条件

  • Debian GNU/Linux 7.1.0 での作業を想定。
  • 接続元のマシンは Linux Mint 14(64bit) を想定。
  • chkrootkit が検知できるのは既知の rootkit のみであり、新規の rootkit は検知できないことを認識しておく。
  • chkrootkit では誤検知もあるので、検知結果は参考程度に留める。
  • コマンド自体が改竄されてからでは遅いので、OS インストール直後に行うのがよいらしい。

1. chkrootkit インストール

chkrootkit を以下のようにしてインストールする。

1
# aptitude -y install chkrootkit

2. chkrootkit 実行

以下のようにして chkrootkit を実行してみる。
問題のある("INFECTED" の)場合のみ出力する。

1
2
# chkrootkit | grep INFECTED
Checking `bindshell'...                                     INFECTED (PORTS:  465)

通常は何も出力されないはずですが、Postfix で SSL 設定をした後だと、誤った検出をするようだ。これは気にしなくてよい。

3. 自動実行用スクリプト作成

定時実行用にシェルスクリプトを以下のように作成する。 以下では、Postfix で SSL 設定している場合の誤検知は除外するようにしている。

File: chkrootkit

 1 #!/bin/bash
 2 
 3 PATH=/usr/bin:/bin:/usr/sbin
 4 
 5 TMPLOG=`mktemp`
 6 
 7 # chkrootkit 実行
 8 chkrootkit > $TMPLOG
 9 
10 # ログ出力
11 cat $TMPLOG | logger -t chkrootkit
12 
13 # SMTPS の bindshell 誤検知対応
14 if [ ! -z "$(grep 465 $TMPLOG)" ] && \
15    [ -z $(lsof -i:465|grep bindshell) ]; then
16         sed -i '/465/d' $TMPLOG
17 fi
18 
19 # rootkit 検知時のみ root 宛メール送信
20 [ ! -z "$(grep INFECTED $TMPLOG)" ] && \
21 grep INFECTED $TMPLOG | mail -s "chkrootkit report in `hostname`" root
22 
23 rm -f $TMPLOG

シェルスクリプト内でファイルを開いているプロセス情報を表示するコマンド lsof を使用するので、 aptitude install lsof でインストールしておく。

また、スクリプト内のメール送信コマンド mail が使用できない場合は、mailutils or heirloom-mailx or bsd-mailx 等をインストールする。複数ある場合は、update-alternatives --config mailx でデフォルト設定をする。(ちなみに当方は、 mailutils ではドメインを指定しないとメール送信ができないので、 heirloom-mailx をインストールして使用している)

4. 自動実行用スクリプト実行権限付与

作成した自動実行用スクリプトに実行権限を付与する。

1
# chmod 700 chkrootkit

5. 自動実行設定

毎日自動実行されるよう cron に登録する。

1
# mv chkrootkit /etc/cron.daily/

これで、rootkit が仕掛けられていた場合に root 宛にメールが届くようになる。


以上。