あなたの武器庫にrootkit hunterはあるか?

あれは3年前のこと。ある朝起きた私は、Web/メールサーバが動かなくなっているのを発見した。今振り返ると、Linuxだから安全だと私は思い込んでいた。

現在はそんな慢心はない。使用中のアプリケーションには、常に最新のセキュリティパッチを当てるようにしている。必要のないサービスは実行しない。自分と荒野の間にはファイアウォールを置いた。まだルーチン化していない対策もあり、ルートキットの定期チェックなどもその1つだ。もっとも、これがルーチンに加わる日も近い。rootkit hunterという小粋なプロジェクトの存在を知ったからだ。

Michael Boelenがrootkit hunterを開発しようと思い立ったのは、FreeBSD 5.0をインストールしたばかりのマシンを偶然スキャンした日の翌日だった。マシンはインターネットに接続してなかったが、スキャンに使ったツールchkrootkitは「バックドア」バイナリの存在を報告した。chkrootkitはオープンソースツールなので、彼はソースコードを調べ、FreeBSDの新しいオプションに予約されたキーワードが誤検出の原因であることを突き止めた。そこで、彼はスクリプトを自分で書くことにした。chkrootkitが気に入らないからではなく(実際その後も使い続けている)chkrootkitが問題を指摘したときの「セカンド・オピニオン」が得られるツールが欲しかったからだ。

Boelenの「セカンド・オピニオン」スクリプトは、今では3,000行を超える長さになった。ほぼすべてのUnix系システムで実行できる。実行中のモジュールや開かれているポートを確認したり、MD5チェックサムを生成したり、機密性の高いディレクトリをスキャンし、特定のキットの存在を漏らす「悪い」文字列を検出したりする作業を、ほかのシェルやPerlスクリプトを呼び出して実行する。

彼のWebサイトによると、rkhunterは「ルートキット、バックドア、ローカルの悪用」をスキャンするために次の作業を行う。

– MD5ハッシュを比較する
– ルートキットで使われるデフォルトファイルを探す 
– 不正なアクセス権が与えられたバイナリファイルを探す
– LKMモジュールとKLDモジュールに疑わしい文字列を探す
– 隠しファイルを探す
– 標準テキストファイルとバイナリファイルをスキャンする(オプション機能)

インストールは非常に簡単。tarballをダウンロードして展開し(アクセス権を正しく設定するためにp引数を使う)、rkhunterディレクトリのrkhunterスクリプトをrootで実行するだけだ。スクリプトを実行するにはrootアクセス権が必要である。

インストールが済んだら、引数なしでコマンドrkhunterを入力し、ヘルプページを表示する。最初に実行したときは、引数-c(「すべてチェック」)と–createlogfileを使ったところ、スキャンに31秒かかった。マシン環境に設定を合わせ、セルフテストを何度か実行した後で、rkhunterは300を超えるテストを実行し、約50種類のルートキットの有無をスキャンした。ログには、次のものが検出されなかったことが記録されていた。55808 Trojan – Variant A、aPa Kit、Apache Worm、Ambient(ark)Rootkit、BeastKit、BOBKit、CiNIK Worm(Slapper.Bの亜種)、Danny-BoyのAbuse Kit、Devil RootKit、Dica、Dreams Rootkit、Duarawkz、Flea Linux Rootkit、FreeBSD Rootkit、Fuck`it Rootkit、GasKit、Heroin LKM、HjC Kit、ImperalsS-FBRK、Kitko、Knark、Li0n Worm、Lockit / LJK2、MRK、RootKit for SunOS / NSDAP、Optic Kit(Tux)、Oz Rootkit、Portacelo、R3dstorm Toolkit、Scalper Worm、Shutdown、SHV4、Sin Rootkit、Slapper、Sneakin Rootkit、Suckit Rootkit、SunOS Rootkit、Superkit、TBD(Telnet BackDoor)、TeLeKiT、T0rn Rootkit、Trojanit Kit、VcKit、Volc Rootkit、X-Org SunOS Rootkit、zaRwT.KiT Rootkit。

ルートキットのチェックが終わると、続いてマルウェア、無差別Ethernetアダプタ、隠しファイル、設定エラーのチェックが開始される。たとえば、DebianのデフォルトSSH設定(”RootLoginPermitted = Y”)にセキュリティリスクの懸念があることが指摘され、rootアクセス権が必要なときには一般ユーザのサインオンを使ってsuを利用するほうがよいというアドバイスがログファイルに残された。

前記の2つの引数だけを使ってrkhunterを実行すると、コマンドはインタラクティブモードになる。各スキャンを実行するには、Enterキーを押す必要がある。現在はcronジョブとしてセットアップしたので、キー操作の必要はなくなった。また、–skip-keypress引数を使って手動で実行してもインタラクティブモードを回避できる。いろいろと調整が必要だった初回のスキャンを別として、コマンドの実行には7秒ほどしかかからない。

改良予定

rkhunter改良のロードマップをBoelenから聞いた。次の予定がある。

-オプションの文字列スキャン機能を基本チェッカーに統合する
-知られていなかったルートキットを追加する
-現用のシステムバイナリ(MD5ハッシュ)のホワイトリストを改良する
-「悪い」バイナリ(バックドア、悪性CGIスクリプト、ミスユースIRCツール、その他)のブラックリストを拡充する
-脆弱性のある「悪い」バージョンをチェックするためのアプリケーション・バージョンチェックを追加する
-インストーラを改良し、ファイルパスを利用することによってアプリケーションをより動的にする
-前記のデータベースやアプリケーションおよびそのWebサイトにミラーをセットアップする
– チェッカーとRootkitHunter管理サーバをサーバ/クライアントの関係にする

Boelenがプロジェクトに着手したのは、わずか9か月ほど前のことだ。1.0.0のファイナルリリースは、メーリングリストやFreshmeatで告知される前に、公開直後の数日間で2,000回以上ダウンロードされた。

rkhunterに関する多数の意見や提案がBoelenに寄せられているが、本当に欲しいのは「これまで知られていなかった新しいルートキット、特に複数のハニーポットで存在が確認されたもの」に関する情報だそうだ。ユーザからの貢献が多いほど、このプロジェクトの成果も大きくなる。

メモ:この記事は、バージョン1.0.3に基づいて書かれた。最新のバージョン1.0.5は、2004年4月5日にリリースされている。