ルートキット(RootKit)
ルートキット(RootKit)
RootKitとは?
RootKitっていうのは、簡単に言うと、侵入者が侵入に成功した後、システムへの侵入を検出されないようにする為のツールキットのようなもので、一般的にプロセス隠蔽、ファイル隠蔽等の機能を持ちます。RootKitという名前からも分かるように元々はUnix系OSの攻略に用いられていたわけですが、最近はWindows用のもの研究が進んで技術が確立してきています。
※Windowsの場合はこれに加えてレジストリエントリの隠蔽等の機能を持つこともあるようです。
Windows上のRootKitの種類
Windowsの場合RootKitはユーザーモードRootKitとカーネルモードRootKitの2種類に大別されます
1. ユーザーモードルートキット(User Mode RootKit)
ユーザーモードレベル(所謂 Ring 3 という特権レベル。通常我々が書いているプログラムはこのレベルで 動作します)で動作し、Windows APIをフックして微妙に違う動作をさせてしまいます。 例えば特定のファイルを隠蔽する際には通常FindFirstFile、FindNextFileといったAPIをフックして、特定のファイル名を持つファイルが見つからないようにします。 カーネルモードルートキット(Kernel Mode RootKit)に比べれば検出しやすいんですが、まあ一端ひっかかってしまうと検出するのはかなり困難です。エクスプローラで関係するファイルを検出することはできませんんし、Regedit を使ってレジストリエントリをチェックしても対応するエントリを見つけることはできません。メンバーエリアにあるMimicはこのタイプのものです。
※ フック っていうのはちょっと耳慣れない言葉かも知れませんが、意訳すると 「横取り」 っていうところでしょうか?この手法はデバッグ目的で使われたり、今回のようにシステム改竄目的で用いられたりします。
※Windows APIフックの詳細については、Windowsプログラミング講座で取り扱っています。
2. カーネルモードルートキット(Kernel Mode RootKit)
カーネルモードレベル( Ring 0 という特権レベル ) で動作します。Ring 0 というとOSと同じレベルなので、Windows カーネルと直接やりとりすることができます。ユーザーモードルートキット(User Mode RootKit) の場合、Windows API をフックするわけですが、カーネルモード RootKit の場合には、対応するシステムコールをフックします。 (フックという手法を用いる点ではどちらも同じで、違いはフックを仕掛ける特権レベルにある ) 従ってある意味OS自体の改竄が発生するような状況になり、検出は非常に困難です。カーネルモードコンポーネントとして動作させるために、Windows の場合カーネルモードルートキット(Kernel Mode RootKit) はデバイスドライバとして実装されます。メンバーエリアにあるWalking Deadはこのタイプのものです。




