不正侵入後に仕掛ける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 } |