ルートキット

起源

ルートキットという言葉は元来、侵入者がシステムアドミニストレータにシステムを見られたとしても"root"権限を確保しつづけられるように、通常なら表示するはずの侵入の痕跡を表示しないようにリコンパイルされたUnixのソフトウェア群、例えば"ps"、"netstat"、"w"、"passwd"といったツールのことを指している。
一般に、今日ではこの言葉はUnix系のOSに限らず、Microsoft Windows等の非Unix系OS（"root"というアカウントはないが）に存在する似たようなタスクを実行するツールに対しても用いられる。

機能

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

使用方法

ルートキットはしばしば侵入したシステムを悪用するユーティリティを隠すために用いられ、"バックドア"と呼ばれるシステムへの度重なる侵入を容易にするのを助けるユーティリティが含まれている。例えば、ルートキットは、システムの特定のネットワークのポート番号へと接続した時にシェルを起動しようとするアプリケーションを、隠すかもしれない。
カーネルルートキットは同様の機能を持っていたりする。バックドアが非特権ユーザによって起動されたプロセスを通常なら特権ユーザのみに許された権限で動かすことを可能にすることもある。システムを侵害するのに有効な他のあらゆる種類のツールもルートキットによって隠蔽可能である。これには侵入したコンピュータが通信するコンピュータシステムへのさらなる攻撃を可能にするツール、スニファやキーロガーが含まれる。侵入したコンピュータのよくある悪用方法としては、さらなる攻撃の踏み台として用いるというものがある。これはしばしば攻撃が攻撃者からではなく侵入を受けたシステムやネットワークからのものであると見せかけるために行なわれる。こうしたツールにはDoS攻撃ツール、チャットのセッションを中継したり電子メールスパム攻撃を行なうツールがある。
商用CDでデジタル著作権管理のためにルートキットが用いられた例として、Sony BMG CD XCP問題がある。

基本的なタイプ

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

検出

あらゆるルートキット検出プログラムには、それが疑わしいシステム上で動作する限り、それにつきものの制約がある。それは、ルートキットはシステム上の全てのプログラムが頼っているライブラリやツールの多くを修正してしまうプログラムだということである。あるルートキットは動いているカーネルを（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」といった名前のファイルをコンピュータシステム上のありがちな場所に残すなどである。