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

 本連載の第3回でルートキットをカーネル・モードとユーザー・モードに大別した。また,第4回ではさらにカーネル・モード・ルートキットを「実行パスを変えるもの」と「データを改ざんするもの」に分類した。

 今回は,こうした分類とは別の観点で分類し,ルートキットの本質を考えてみたい。

改変されたデータの性質に注目

 これまで紹介してきたようにルートキットはシステムの様々なリソースに変更を加えることでその機能を実現している。今回考えてみたい分類は,これらのリソースがOS起動後,通常OSやアプリケーションによって書き換えられるかどうかが大きくかかわっている。そこで回り道になるが,まず,この点を整理しておく。

 ルートキットが改ざんする対象となるリソースとしては,以下が挙げられる。

モデル固有レジスタ
- IDT(interrupt descriptor table)
- SDT(service description table)
- SSDT(system service descriptor table)
- 実行コード本体
- プロセス・リスト
- ロード済みドライバ・リスト

 あくまで,上記はよく知られたものであり,ルートキットの実装に転用可能なリソースの全体から見ればほんの一部に過ぎない。カーネル・モード・ルートキットは基本的にシステム上のいずれのポイントも改変することができるため実行パスに介入できるリソース,変更によってデータの隠ぺいが可能なリソースであればどこでも良いわけだ。例えば,システムにロードされている正当なドライバを個別に解析することで,同様に転用可能なリソース(関数ポインタなど)を見つけることができるだろう。

 ここで考えたいのは,ルートキットによって改変されたリソースがどういった性質のものかという点である。プログラムのメモリー空間はコード領域とデータ領域の二つに分けられる。コード領域は,実行コードが配置されるためデータの変更は発生しないはずである。対してデータ領域は,プログラムの実行によって変更される可能性があるメモリー領域である。しかし,データ領域上の全てのデータが変更されるとは限らない。IDT,SDT,SSDTと言ったテーブルはシステムの動作そのものに関わるためOSの起動時に一度だけ初期化され,以降本来であれば変更されないはずである。逆に,プロセス・リスト等はプロセスの生成・終了に伴って変更されるデータ構造である(表1)。

表1●リソースの分類
表1●リソースの分類

感銘を受けたマルウエアの分類法

 表1のような整理を行うことでマルウエアをタイプ0からタイプ3までの4タイプに分類することができる。タイプ0がルートキットを含まない単純なマルウエアで,タイプ1~3がルートキットを含むマルウエアである。

 この分類は,2006年11月にJoanna Rutkowska氏によって提唱されたものである(※「http://www.invisiblethings.org/papers/malware-taxonomy.pdf」を参照)。余談だが,著者はこの分類を目にしたとき非常に感銘を受けた。自身でも漠然と考えていたことが整理された形で文章化されていたためである。

 では,Rutkowska氏の分類を紹介しよう。

タイプ0
 このタイプのマルウエアは,これまで紹介してきたルートキット技術によるシステムの改変を行わない単独の悪意のプログラムである(図1)。システムの改変こそ行わないもののスパム送信やデータの削除と言った悪意の活動を行う。

図1●Type 0のマルウエア
図1●Type 0のマルウエア

タイプ1
 このタイプのマルウエアは,これまで紹介してきたルートキット技術を利用して本来変更されるはずのないリソースを変更する(図2)。表1のモデル固有レジスタ,実行コード本体が該当する(※ Rutkowska氏の論文中では,「比較的安定したデータ」と「常に変更されるデータ」の二つにリソースを分類し,前者に変更を加えるものをタイプ1としている。枝葉の話ではあるが,IDT,SDT,SSDTの改変をタイプ1に分類するか否かは明確ではないが,著者はType1に分類して差し支えないと考えている)。タイプ1のマルウエアは,本来変更されないデータを変更するため,ハッシュなどを用いて現在のリソースと正常なリソースを比較することでシステムの改変を検出するこができる。

図2●Type 1のマルウエア(ルートキット)
図2●Type 1のマルウエア(ルートキット)

タイプ2
 このタイプのマルウエアは,ルートキット技術を利用してデータ領域やOS,プロセスの動作に伴って変更される可能性のあるリソースを改変する(図3)。表1では,プロセス・リストとロード済みドライバ・リストが該当する。改変されるリソースは,常に変更される可能性があるためタイプ1と同様の手法での検出は困難である。

図3●Type 2のマルウエア(ルートキット)
図3●Type 2のマルウエア(ルートキット)

タイプ3
 このタイプのマルウエアは,ハードウエアによる仮想化支援機能を利用したもので,従来のようなシステム上のリソースの改変を行わない(図4)。ハードウエアの仮想化支援機能を利用してコンピュータ上で動作しているOSをゲスト化する。つまり,コンピュータとOSの間にマルウエアが仮想マシン・モニタとして介在することになる。このタイプのマルウエアの検出は現在,最もホットな技術的テーマの一つである。

図4●Type 3のマルウエア(ルートキット)
図4●Type 3のマルウエア(ルートキット)

 いかがだろう。非常にすっきりとまとまっているのではないだろうか。

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