システムを侵入者の制御下に置かせないためには

不正侵入後に仕掛けるrootkitというものがある。
rootkitっていうのはサーバへの侵入が成功したクラッカーが使用するツールセットみたいなもので
ログの改ざんやバックドアを仕掛けたりが短時間で出来てしまうツールの集まりみたいなものだよ。
クラッカーになったつもりで考えてみよう。

もし、他人のサーバに侵入できたとしたら、
いつまでもバレないで、いつでも簡単に自分のサーバではやらないようなことをやっちゃおうよとか思うんじゃないかな。
rootkitが仕込まれてしまったらシステムは侵入者の制御下に置かれてしまうということだよ。

こんなことをされたら最高にキモイんでrootkitが仕掛けられてないか日々チェックしておこう。
もし、rootkitが検出されてしまった場合は残念だけどフォーマット、OS再インストールをしよう。
駆除を試みるより安全だし、そのほうが早いと思うし。。

 

じゃあインストールするよ

aptitude install chkrootkit

実行してみる

chkrootkit

結果の意味
not infected =発見されなかった → OK
not found = コマンドが無い → OK
not tested = チェックできなかった → とりあえずOK
INFECTEDが出た場合、rootkitで変更された可能性がある → NG これヤバイ!!

 

実行(問題がある項目のみ表示させるモード)

chkrootkit -q

結果

The following suspicious files and directories were found:
/lib/init/rw/.ramfs

これはとりあえずOK

 

デフォルトでは自動実行になってないので自動実行の設定をするよ

vi /etc/chkrootkit.conf
 
RUN_DAILY="false"
RUN_DAILY_OPTS="-q"
DIFF_MODE="false"
 
↓
 
RUN_DAILY="true"
RUN_DAILY_OPTS="-q"
DIFF_MODE="true"

INFECTED(ヤバイよ)が発見されたらメールコマンドにてroot宛てにメールするようにcronスクリプトを修正
chkrootkitをインストールするとcron.dailyにスクリプトができるのでこれを修正する。
※cron.dailyは毎日実行されるやつで、他にはcron.hourly(毎時)、cron.monthly(毎月)、cron.weekly(毎週)等があるよ

vi /etc/cron.daily/chkrootkit
 
#!/bin/sh -e
 
CHKROOTKIT=/usr/sbin/chkrootkit
CF=/etc/chkrootkit.conf
LOG_DIR=/var/cache/chkrootkit
 
if [ ! -x $CHKROOTKIT ]; then
  exit 0
fi
 
if [ -f $CF ]; then
    . $CF
fi
 
if [ "$RUN_DAILY" = "true" ]; then
    if [ "$DIFF_MODE" = "true" ]; then
       # $CHKROOTKIT $RUN_DAILY_OPTS > $LOG_DIR/log.new 2>&1
       # if [ ! -f $LOG_DIR/log.old ] \
       #    || ! diff -q $LOG_DIR/log.old $LOG_DIR/log.new > /dev/null 2>&1; then
       #     cat $LOG_DIR/log.new
       # fi
       # mv $LOG_DIR/log.new $LOG_DIR/log.old
 
       # /usr/sbin/chkrootkit結果をTMPLOGに保存してlocal5.infoにてsyslogに出力
       TMPLOG=`chkrootkittemp`
       $CHKROOTKIT > $TMPLOG 2>&1
       cat $TMPLOG | logger -p local5.info
 
       # TMPLOGにINFECTEDの文字列があった場合、grep結果をrootにメール送信
       [ ! -z "$(grep INFECTED $TMPLOG)" ] && \
       grep INFECTED $TMPLOG | mail -s "rootkit found in `hostname`" root
       rm -f $TMPLOG
 
    else
        $CHKROOTKIT $RUN_DAILY_OPTS
    fi
fi

 

・chkrootkitで出力されるログをsyslogに送る

いろんな所にログが散らばってると見るのめんどくさいんで、syslogに出力させるように設定するよ。
syslogの設定は/etc/rsyslog.confでやるんだけど、
chkrootkitのログはファシリティー Local5として吐き出すように設定する。
※ファシリティは、ログの種別のことを意味します。詳しいことは調べてね。
(Local0〜7は一般ユーザが syslog を使用する場合)

vi /etc/rsyslog.conf
#// 追記
# sudo log
local3.*  	 /var/log/sudo
local5.info  	 /var/log/chkrootkit.log

rsyslogを再起動する

/etc/init.d/rsyslog restart

ログが出るかテストしてみる

/etc/cron.daily/chkrootkit

ログを確認

cat /var/log/chkrootkit.log

・ログローテーションさせるようにする

logrotate.dにあるファイルはログローテションを行うための設定ファイルで、何時、どのくらいの期間で、
圧縮するか否かの設定等々を行うよ。
chkrootkitのログは毎週1回の6世代にするよ。(そんなにいらないかも)

vi /etc/logrotate.d/chkrootkit
 
/var/log/chkrootkit.log {
rotate 6
weekly
compress
missingok
notifempty
}
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です