セキュリティ・コンサルタント
村上 純一

 ルートキットは,その動作の仕方からユーザー・モード・ルートキットとカーネル・モード・ルートキットの二つに分類できる。ユーザー・モードとカーネル・モードは,x86プロセッサの特権レベルに由来する概念である。

 簡単に説明すると,x86プロセッサにはリング0からリング3の4段階の特権レベルが存在する(図1)。リング0が最も特権レベルが高く,数字が大きくなるにしたがってレベルが低くなる。特権レベルが高い側は,特権レベルが低い側のプログラムが管理しているリソースにアクセスできる。反対に特権レベルが低い側からは,高い側のリソースに直接アクセスすることはできない。リング1~リング3では一部の命令(特権命令)の実行が制限される。

図1●特権レベル(リング)の概念
図1●特権レベル(リング)の概念

 OSカーネルやデバイス・ドライバなどコンピュータのリソースを隅々まで利用しなければならないコードは最も権限の高いリング0で実行され,通常のユーザー・プロセスは最も権限の低いリング3で実行される。リング1,2はメモリー管理が煩雑になることなどから一般的なOSでは利用されていない。

 ルートキットもコードが実行される特権レベルに応じて分類でき,リング0の場合はカーネル・モード・ルートキット,リング3の場合はユーザー・モード・ルートキットと呼ばれる。ユーザー・モード・ルートキットとカーネル・モード・ルートキットの違いは,ルートキットの影響範囲と,埋め込まれた際の深刻度にある。

 ユーザー・モード・ルートキットは,影響範囲が限定されており,一般的には個別プロセスにだけ影響が及ぶ。一方,カーネル・モード・ルートキットはOSと同じレベルで動作するため,その影響範囲は広く全プロセスに及ぶ。またカーネル・モードで動作するため,アクセスできるメモリー領域や実行可能な機械語命令について,まったく制約がない。ソフトウエア的な制限を受けずにより低いレイヤーでの実装が可能となるため,ユーザー・モード・ルートキットに比べ,カーネル・モード・ルートキットは検出が困難で危険度が高い。

 カーネル・モード・ルートキットにも,技術的に見ると二つのテクニックが存在する。一つはアプリケーションやOSの正常な処理の流れ(実行パス)に自身の処理を挿入し,経由させることで情報を改ざん・隠ぺいする方法。もう一つは,実行パスには触れずに処理で取り扱われるデータやデータ構造に変更を加える方法である。

 次回は,カーネル・モード・ルートキットに焦点を当て,その仕組みを見てみよう。


村上純一(むらかみ・じゅんいち)
国内の大手セキュリティ・コンサルティング会社に勤務。セキュリティ・コンサルタント業務やソフトウエアのぜい弱性を発見する業務に携わる。