ルートキット(rootkitあるいはroot kit)は、コンピュータシステムへのアクセスを確保した後に、第三者(通常は侵入者)によって使用されるソフトウェアツールのセットである。これらのツールには、作動中のプロセスやファイル、システムデータを隠蔽する機能があり、ユーザに気付かれないように侵入者がシステムへのアクセスを維持することを支援する。

ルートキットは、2005年のSony BMG CD XCP問題で争点となり、この事件を契機に、技術コミュニティのみならず一般大衆にもルートキットの概念が広く知られるようになった。

## 起源

ルートキットという言葉は元々、侵入者がシステムアドミニストレータにシステムを確認されても"root"権限を保持し続けるために、通常なら表示される侵入の痕跡を隠すようにリコンパイルされたUnixのソフトウェア群、例えば"ps"、"netstat"、"w"、"passwd"といったツールを指していた。

現在では、この言葉はUnix系OSに限らず、Microsoft Windowsなどの非Unix系OS("root"というアカウントは存在しないが)で、同様のタスクを実行するツールにも広く用いられている。

## 機能

典型的なルートキットは、ログオンやプロセス、ファイル、ログを隠蔽する。また、端末やネットワーク、キーボードからのデータ入力を傍受することもある。多くの場合、ルートキットはトロイの木馬でもある。

## 使用方法

ルートキットは、しばしば侵入したシステムを悪用するためのユーティリティを隠す目的で使用され、システムへの再侵入を容易にする「バックドア」と呼ばれるユーティリティが含まれることがある。例えば、ルートキットは特定のネットワークポートに接続した際にシェルを起動するアプリケーションを隠蔽することがある。また、カーネルルートキットも同様の機能を持つ場合があり、バックドアが非特権ユーザによって起動されたプロセスを、通常は特権ユーザにしか許されない権限で動作させることを可能にすることがある。さらに、システムを侵害するための他のあらゆる種類のツールもルートキットによって隠蔽される可能性があり、これには侵入したコンピュータから他のシステムへのさらなる攻撃を支援するスニファやキーロガーなどのツールが含まれる。

侵入されたコンピュータの一般的な悪用方法として、さらなる攻撃の踏み台として利用されることがある。これは、攻撃が攻撃者からではなく、侵入を受けたシステムやネットワークから発せられているかのように見せかけるために行われる。このようなツールには、DoS攻撃ツールや、チャットセッションの中継、電子メールでのスパム攻撃を行うツールがある。

商用CDでデジタル著作権管理(DRM)の一環としてルートキットが用いられた例として、Sony BMG CD XCP問題が挙げられる。

## タイプ

### 基本的なタイプ

ルートキットは大別して二種類がある。カーネルレベルのものとアプリケーションレベルのものである。カーネルレベルのルートキットはカーネルコードに追加コードを加えるか、もしくは一部のカーネルコードを改造されたコードで置換するかもしくはその両方を行なうことによってコンピュータシステムに設置されたバックドアを隠蔽するのを助ける。これはしばしばデバイスドライバもしくはローダブルモジュール、例えばLinuxならLinux Loadable Kernel Module、Windowsならデバイスドライバという形でカーネルに新しいコードを追加することによって行なわれる。カーネルルートキットはよくシステムコールにパッチをあてたりフックしたり置換したりして攻撃者の情報を隠蔽する。アプリケーションレベルルートキットは普通のアプリケーションをトロイが仕込まれた偽物に置換したり、既存のアプリケーションの振舞いをフックやパッチや挿入コードやその他の手段で改造したりする。カーネルルートキットは検出困難なので特に危険である(特にメモリ管理コアのページテーブルを操作して隠蔽するもの)。

### 例

- FU Rootkit
- SuckIT
- T0rn
- Ambient's Rootkit (ARK)
- Hacker Defender
- SonyのFirst 4 Internet XCP DRM
- nProtect GameGuard
- Alureon

## 検出

あらゆるルートキット検出プログラムには、それが疑わしいシステム上で動作する限り、それにつきものの制約がある。それは、ルートキットはシステム上の全てのプログラムが頼っているライブラリやツールの多くを修正してしまうプログラムだということである。あるルートキットは動いているカーネルを(Linuxや多くのUNIXライクなOSではローダブルモジュールを、MS Windowsなどではおそらくは仮想デバイスドライバなどを通じて)修正する。ルートキット検出の根本的問題は今動いているオペレーティングシステムが信用できないということにある。言い替えれば、全ての作動中のプロセスの表示やディレクトリの中の全てのファイルのリストの表示の要求といった行為の結果が、元々の設計者が意図したような振舞いであると信用できないということである。

もっとも信頼できる最良のルートキット検出の手段は、感染の疑いのあるコンピュータをシャットダウンして、他のメディアから(例えばレスキューCD-ROMやUSBから)起動してストレージを検査することである。動いていないルートキットはその存在を隠すことができず、ほとんどの確立したアンチウイルスプログラムは(おそらくルートキットによって修正されているはずの)標準的なOSコールと低レベルのクエリーに頼るルートキットを検出可能である。なぜならそれらは信頼性を保っているはずだからである。もし何か違いがあればルートキット感染が想定される。ルートキットは検査が終了するまで動いているプロセスを監視して自らの隠蔽行動を停止することで、ルートキットスキャナーに引っかからない、ステルス機能のないマルウェアを装うことで自らを守ろうとすることもある。

セキュリティベンダはルートキット検出を既存のアンチウイルス製品に統合するソリューションを構想している。ルートキットがスキャン中に自分を隠そうとすれば、ステルス検出によって見分けられる。もし一時的にシステムからアンロードしようとするならば、今までのアンチウイルスソフトがパターンファイルによって発見するだろう。この統合された防御によって、ルートキットにメモリからセキュリティソフトウェアを強制的に削除し、実質的にアンチウイルスソフトを殺してしまう反撃機構(retro routine)を攻撃者が実装することを余儀なくされる。

ルートキットを検出できるプログラムはいくつかある。Unix系のシステムでもっとも有名なものを二つ挙げるならchkrootkitとrkhunterだろう。Windowsプラットフォームで個人用でなら無償で使用できるステルススキャナーとしてはBlacklightというソフトがベータ版としてF-Secure社のWebsiteからダウンロードできる。他のWindows用検出ソフトとしてはRootkitRevealerというソフトがSysinternalsから入手できる。これはいまある全てのルートキットをOSの返す一覧と実際にディスクそれ自身から読み出した一覧とを比較することで検出することができる。ただし、いくつかのルートキットはこのプログラムを隠蔽先から外し始め、実質上、二つの一覧の違いを無くすことで検出ソフトによって表示されないようにしてきている。しかしrootkitrevealer.exeというファイル名をランダムな名前に変更することでこれは対処できる。この機能は最新のRkdetectorのリリースにも含まれている。

## 除去

ルートキットの除去が事実上禁止されているくらい非実用的なものだとする一定の意見が存在する。たとえルートキットの正体と特性がわかっていても、必要な技術や経験をもつシステム管理者の時間と労力はゼロからオペレーティングシステムをインストールすることに費やしたほうがましだというものである。「現存するルートキットは発見されたとしてももっと除去しづらいように作ることはできたはずだと思うが、そうするだけの充分な動機づけはないように思う。なぜなら経験あるシスアドがルートキットで汚染されたシステムを見つけた時の典型的な反応は、データをセーブして再フォーマットをかけることだからだ。これはルートキットが良く知られていて100%削除可能である場合ですらそうだ」Rootkit Question

システムがオンラインの時に他のファイルシステムドライバを用いてルートキットを削除する方法が存在する。Rkdetector v2.0はシステムが作動中の時に自分自身のNTFSもしくはFAT32ファイルシステムドライバを用いて隠しファイルを削除する方法を実装している。一度消去されシステムが再起動されると、データが壊れてしまうためルートキットは動作しなくなる。

## コンピュータウイルスやワームとの比較

コンピュータウイルスとルートキットの鍵となる違いは増殖の仕方にある。ルートキットと同様に、コンピュータウイルスはシステムの中核ソフトウェアコンポーネントを修正し、「感染」の隠蔽を試みたり攻撃者にある種の機能やサービスを提供したりするコード(ウイルスの「ペイロード」)を追加する。

ルートキットの場合、ペイロードはルートキット(システムへと侵入したソフトウェア)の一貫性を維持しようとすることがある --- 例えばルートキットのpsコマンドは実行されるたびにシステムのinitやinetdのコピーをチェックして、それらがのっとられたままであることを確認し、必要なら「再感染」を行なうかもしれない。ペイロードの残りの部分の目的は、侵入者がシステムを制御下に置き続けられるようにすることである。システムの制御は一般に、ハードコードされたユーザ名/パスワードの組、隠されたコマンドラインスイッチ、もしくは秘密の環境変数設定といったバックドアを介して行なわれる。バックドアにより、のっとられていないプログラムが提供するはずの正常なアクセス制御ポリシーを覆すのである。いくつかのルートキットはポートノッキングチェックをinetdやsshdといった既存のネットワークデーモン(サービス)に加えたりする。

コンピュータウイルスはどのような種類のペイロードでも運べるが、それに加えてコンピュータウイルスは他のシステムへの伝播をも試みる。一般にルートキットのすることはひとつのシステムの制御の維持に限られている。

自動的にネットワークをスキャンして脆弱性のあるシステムを探し、脆弱性をついてシステムをのっとるプログラムもしくは一揃いのプログラムはコンピュータワームと呼ばれる。またもっと受動的に動作する形のコンピュータワームもあり、ユーザ名とパスワードを盗聴してそれを使ってアカウントをのっとり、そうして得たアカウントのそれぞれに自分自身のコピーをインストールする(そして普通はのっとったアカウント情報をある種の隠れチャネルを通じて侵入者へ送る)。

勿論混成型も存在する。ワームはルートキットをインストールできるし、ルートキットはひとつないしそれ以上のワームやスニファやポートスキャナのコピーを含んでいるかもしれない。ウイルスであると同時にワームであるようなマルウェアも存在する。こうした言葉は全て使われ方がある程度重なっているものであり容易に合成されるものでもある。

## 一般的に入手できるルートキット

システム攻撃者によって利用されるほとんどのソフトウェアと同様に、多くの実装が共有されてインターネットで容易に入手可能になっている。侵入されたシステムで、一般に入手できる洗練されたルートキットが経験の乏しいプログラマによって書かれたとおぼしい粗雑なワームもしくは攻撃ツールを隠しているのを見るのは珍しいことではない。

インターネットで入手可能なほとんどのルートキットは概念実証(proof of concept)のために作られたものである。それらはコンピュータシステムの中に何かを隠す新しく実験的な手法の実用性を証明するために作られた。しかし実験的であるために、しばしばステルス性のために最適化されていない。そうしたルートキットで攻撃を行なうと、大変に効果的であったりする。しかし発見された時、例えばCDのような信頼できるメディアからオペレーティングシステムが起動されたような場合には、しばしば非常に明瞭な存在の痕跡を残す。例えば、「rootkit」といった名前のファイルをコンピュータシステム上のありがちな場所に残すなどである。

## 関連書籍

- Butler, Jamie and Hoglund, Greg: Rootkits: Subverting the Windows Kernel. Addison Wesley, 2005. ISBN 0321294319
- 渡辺勝弘 伊原秀明 不正アクセス調査ガイド—rootkitの検出とTCTの使い方 オライリー・ジャパン 2002 ISBN 4873110793