APIの処理を横取りしてプログラムを隠す
 まずルートキットの仕組みを解説しよう。初期のルートキットは,攻撃対象となるコア・システムのプログラム・ファイルを置き換えて,マルウエアのファイルやプロセスを隠す——といった比較的洗練されていないアプローチを採用していた。例えば,実行中のプロセスを表示するための「ps」というUNIXユーティリティのルートキット版があり,それはマルウエアのプロセスをカーネルから取得したプロセス・リストから削除していた。「ls」というUNIXのディレクトリ一覧表示プログラムのルートキット版も同様の処理を行っていた。

 システム・プログラムがより洗練され,サード・パーティ製ユーティリティやウイルス対策ソリューションが浸透するにつれて,単純にシステム・ファイルを不正なものに置き換えるというルートキットの手法は廃れていった。Windowsでいうと,タスク・マネージャやtasklistコマンドなど,一般的に使用されるプロセス表示ツールを置き換えることは,ルートキット作成者に大変な量の作業を強いる。そして,もしユーザーがウイルス対策ソフトや別途用意されたプロセス表示ツールといった強力なユーティリティを走らせると,その苦労はすべて無に帰す。


△ 図をクリックすると拡大されます
図1●ルートキット・ツール「Hacker Defender」が動作しているところ
 その結果,ルートキット開発者は改良を重ねた。特定のプログラムを攻撃するのではなく,プログラムが情報入手に使用するAPI(アプリケーション・プログラミング・インターフェース)を攻撃するようになったのだ。例えば,実行中のプロセスのリストを取得するAPIの処理に割り込んで,アプリケーションに渡されるプロセス・リストからマルウエアのものを削除する仕組みになった。これによってルートキットは自身を,タスク・マネージャや,該当するAPIを直接的または間接的に使うその他のプロセス表示ユーティリティから隠す。現在のルートキットはこの手法により,ファイル,ディレクトリ,レジストリ・キーとレジストリ値,Windowsサービスとデバイス・ドライバ,TCP/IPポート,ユーザー・アカウント,そしてプロセスといったものを隠ぺいしている。当然ながらルートキットは通常,システム上のマルウエア・プロセスを見えなくするときに使われ,マルウエアがシステムを完全にコントロールできるようにする。

 図1は有名なルートキット・ツール「Hacker Defender」を実際に動作させたところである。Hacker Defenderは設定ファイルと実行ファイルから構成される。ユーザーがhxdef.exeを実行すると,設定ファイルの記述に従って,ファイル,ディレクトリ,ドライバ,サービス,プロセス,そしてTCP/IPポートを隠す。デフォルト設定では,これらのうちhxdefという文字列を名前に含むものを見えなくする。一度実行した後は,その条件に該当するファイルやディレクトリが表示されなくなる。