[[LinuxSoft]] #contents ---- * rkdet で不正アクセス時にシステムを自動停止 [#bba6a3db] ** rkdet って何? [#g7740fc3] rkdet = rootkit detector for Linux (Linux 用ルートキット検出ツール) 不正アクセス時に ps コマンドや kill コマンドが改竄されてしまって、リモートから該当サーバを操作しようとしても手に負えない場合があります。こういう場合は速攻該当サーバの LAN ケーブルを抜いて、速やかに OS のクリーンインストールおよび復旧が必要となるわけです。 が、この rkdet を使えばシステムの異常を検出すると自動で「/sbin/ifconfig eth0 down」を実行してくれます。ネットワークやサーバ管理者にとって有り難いデーモンが rkdet です。仮にもし不正アクセスを受けても被害を必要最小限にとどめることが出来ます。ネットワークから切り離してしまえば、もう不正な操作をされる心配もありませんし、(不正アクセスをうけたサーバが踏み台となって)ネットワークをスキャンされてしまうこともありません。 デーモンとしても軽量なので、とりあえず監視用といいますか、保険としてシステムにインストールしておくと便利かも知れません。 ちなみにネットワークに切り離す前に root 宛にログをメールを送るような仕組みになっています。ソースを展開したディレクトリにある xstrings.txt の文字列を変えることで、メールの題名や送り先の指定もできます。 mailfmt;4;/bin/mail -s 'Intrusion Report for %s' root また、チェックサムの検査対象も同じくソースを展開したディレクトリにある xfiles.txt によって指定できます。以下は標準の検査対象一覧です。 /usr/bin/md5sum /usr/sbin/rkdet /bin/ps /bin/ls /bin/netstat /bin/login /usr/bin/du /usr/bin/find /usr/bin/crontab /usr/bin/killall /bin/kill /usr/bin/passwd /usr/bin/top /usr/sbin/sshd /usr/bin/md5sum /lib/libcrypt.so.1 /lib/libpam.so.0 /lib/libpam_misc.so.0 詳しくは[[ドキュメントの概要:http://pocketstudio.jp/linux/?rkdit%20%20%A5%C9%A5%AD%A5%E5%A5%E1%A5%F3%A5%C8%CF%C2%CC%F5#y120eea5]]をご覧下さい。 詳しくは[[ドキュメントの概要:http://pocketstudio.jp/linux/?rkdit%20%20%A5%C9%A5%AD%A5%E5%A5%E1%A5%F3%A5%C8%CF%C2%CC%F5#y120eea5]]、および[[README 日本語訳:http://pocketstudio.jp/linux/?rkdat%20README%20%CF%C2%CC%F5]]をご覧下さい。 ** rkdet の入手 [#i8879f25] - rkdet - rootkit detector for Linux http://vancouver-webpages.com/rkdet/ ** rkdet のライセンス [#f4649879] フリーソフトウェアなので無料で利用できます。作者さんに感謝ですね! License: rkdet is freeware. rkdet incorporates code by David A. Curry from "ifstatus", which is in the public domain. (READMEより) ** rkdet のインストール [#g42c014b] インストール作業自体は手軽です。作業環境は Fedora Core 4 ですが、殆どの Red Hat Linux 系システムで同様にインストールできます。 1. ソースを入手して展開、ディレクトリ移動します(このあたりはお約束) $ wget http://vancouver-webpages.com/rkdet/rkdet-0.53.tar.gz $ tar xfz rkdet-0.53.tar.gz $ cd rkdet-0.53 2. 次は configure です。対話式に進みますが、基本的に何も考えずに エンターキーの連続で OK です。 # ./configure Choose name for rkdet (recommend renaming) rkdet Select checksum program: /usr/bin/md5sum Select mail command: "/bin/mail -s 'Intrusion Report for %s' root" Select startup message: (See your network guru for details) Select run argument (see documentation): 163 Select netstat: /bin/netstat Select WAN disconnect command: /sbin/route del default Select LAN disconnect command: /sbin/ifconfig eth0 down Select logfile: /var/log/rkdet.log Select who command: /usr/bin/w Select down message: "Checksum failure - disconnecting network" Select mail subject: "Intruder Report for" Select kill message: "Attempt to kill rkdet" Select delete tool: /bin/rm Choose install directory /usr/sbin Select files to check: ps (/bin/ps) ls (/bin/ls) netstat (/bin/netstat) login (/bin/login) inetd () not found; will not check inetd du (/usr/bin/du) find (/usr/bin/find) crontab (/usr/bin/crontab) killall (/usr/bin/killall) kill (/bin/kill) passwd (/usr/bin/passwd) top (/usr/bin/top) sshd (/usr/sbin/sshd) md5sum (/usr/bin/md5sum) libcrypt.so.1 (/lib/libcrypt.so.1) libpam.so.0 (/lib/libpam.so.0) libpam_misc.so.0 (/lib/libpam_misc.so.0) 3. make, install します $ make # make install 4. サービスに登録します # /sbin/chkconfig --add rkdet なお、自動でランレベル 345 で起動するようになっているので、特に設定を変えなくてもサーバ起動時に自動実行されます。 # /sbin/chkconfig --list rkdet rkdet 0:off 1:off 2:on 3:on 4:on 5:on 6:off 5. サービスを起動します。 # /sbin/service rkdet start Starting rkdet (See your network guru for details) [ OK ] 6. 念のためプロセスを確認します。 ps ax | grep rkdet 8253 ? Ss 0:00 rkdet 163 このように rkdet というデーモンが動いているのが確認できます。 * ドキュメント和訳 [#h03f876d] - [[ドキュメント和訳:http://pocketstudio.jp/linux/?rkdit%20%20%A5%C9%A5%AD%A5%E5%A5%E1%A5%F3%A5%C8%CF%C2%CC%F5]] - [[README 和訳版:http://pocketstudio.jp/linux/?rkdat%20README%20%CF%C2%CC%F5]] * 簡単な実地テスト [#rc6ac740] 実際に試さないと分からないだろう(w ということで、実験してみました。実験体は /bin/ls 君です。 # cp -p /bin/ls /bin/ls.org まずは、バックアップを取って、 # vi /bin/ls で、適当にバイナリの中に文字列を入れます。 ……で暫くすると……キタ━(゚∀゚)━ッ!! いきなりネットワークから落とされました。ローカルのマシンで良かったです。データセンターのマシンを落としていたら冷や汗ものでした。。。 で、件のローカルマシンをコンソールからつないでみると、見事 eth0 インタフェースがダウンされてました。ちゃんと機能していますね。コンソールにはこんな表示。 sion rkedet : Checksum failuer - disconnecting network (sion というのはこのテストをしたホスト名です。) ついでに、メールもチェックすると……ばっちり /bin/ls のチェックサムが違うという指摘と、その時点の w と netstat の接続者情報も表示してくれます。これは便利ですね。さっそくホスティングしてるマシンにも組み込んでおこうかな。 From root@sion.pocketstudio.jp Tue Jul 19 16:06:05 2005 Return-Path: <root@sion.pocketstudio.jp> Received: from sion.pocketstudio.jp (sion [127.0.0.1]) by sion.pocketstudio.jp (8.13.4/8.13.4) with ESMTP id j6J7657j009783 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for <root@sion.pocketstudio.jp>; Tue, 19 Jul 2005 16:06:05 +0900 Received: (from root@localhost) by sion.pocketstudio.jp (8.13.4/8.13.4/Submit) id j6J765Xs009780 for root; Tue, 19 Jul 2005 16:06:05 +0900 Date: Tue, 19 Jul 2005 16:06:05 +0900 From: root <root@sion.pocketstudio.jp> Message-Id: <200507190706.j6J765Xs009780@sion.pocketstudio.jp> To: root@sion.pocketstudio.jp Subject: Intrusion Report for sion Intruder Report for sion Tue Jul 19 16:06:05 2005 Checksums differ: /bin/ls 16:06:05 up 9:49, 4 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 16:01 4:01 0.13s 0.13s -bash zem pts/0 sakura2.internal 14:37 1:19m 0.04s 0.02s sshd: zem [priv zem pts/1 sakura2.internal 10:42 5:24 0.22s 0.02s sshd: zem [priv zem pts/2 sakura2.internal 16:05 2.00s 0.04s 0.02s sshd: zem [priv Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 ::ffff:192.168.11.253:22 ::ffff:192.168.11.102:1290 ESTABLISHED tcp 0 0 ::ffff:192.168.11.253:22 ::ffff:192.168.11.102:2283 ESTABLISHED tcp 0 0 ::ffff:192.168.11.253:22 ::ffff:192.168.11.102:2806 ESTABLISHED また、メールと同様のログが /var/log/rkdat.log ファイルに記録されます。 # cat /var/log/rkdet.log Intruder Report for sion Tue Jul 19 16:06:05 2005 Checksums differ: /bin/ls 16:06:05 up 9:49, 4 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 16:01 4:01 0.13s 0.13s -bash zem pts/0 sakura2.internal 14:37 1:19m 0.04s 0.02s sshd: zem [priv zem pts/1 sakura2.internal 10:42 5:24 0.22s 0.02s sshd: zem [priv zem pts/2 sakura2.internal 16:05 2.00s 0.04s 0.02s sshd: zem [priv Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 ::ffff:192.168.11.253:22 ::ffff:192.168.11.102:1290 ESTABLISHED tcp 0 0 ::ffff:192.168.11.253:22 ::ffff:192.168.11.102:2283 ESTABLISHED tcp 0 0 ::ffff:192.168.11.253:22 ::ffff:192.168.11.102:2806 ESTABLISHED ただ、このソフトは promiscus モードを検出すると勝手にネットワークを落とすので、promicsus モードを使う nmap を使いたいときは rkdet を停止しないといけませんね。直接コンソールを触ってデーモンを止めるかリブートしなくてはいけなくなりそうです。。