|
|
第8回 ルートキットの分類を再考セキュリティ・コンサルタント 本連載の第3回でルートキットをカーネル・モードとユーザー・モードに大別した。また,第4回ではさらにカーネル・モード・ルートキットを「実行パスを変えるもの」と「データを改ざんするもの」に分類した。 今回は,こうした分類とは別の観点で分類し,ルートキットの本質を考えてみたい。 改変されたデータの性質に注目これまで紹介してきたようにルートキットはシステムの様々なリソースに変更を加えることでその機能を実現している。今回考えてみたい分類は,これらのリソースがOS起動後,通常OSやアプリケーションによって書き換えられるかどうかが大きくかかわっている。そこで回り道になるが,まず,この点を整理しておく。 ルートキットが改ざんする対象となるリソースとしては,以下が挙げられる。 モデル固有レジスタ あくまで,上記はよく知られたものであり,ルートキットの実装に転用可能なリソースの全体から見ればほんの一部に過ぎない。カーネル・モード・ルートキットは基本的にシステム上のいずれのポイントも改変することができるため実行パスに介入できるリソース,変更によってデータの隠ぺいが可能なリソースであればどこでも良いわけだ。例えば,システムにロードされている正当なドライバを個別に解析することで,同様に転用可能なリソース(関数ポインタなど)を見つけることができるだろう。 ここで考えたいのは,ルートキットによって改変されたリソースがどういった性質のものかという点である。プログラムのメモリー空間はコード領域とデータ領域の二つに分けられる。コード領域は,実行コードが配置されるためデータの変更は発生しないはずである。対してデータ領域は,プログラムの実行によって変更される可能性があるメモリー領域である。しかし,データ領域上の全てのデータが変更されるとは限らない。IDT,SDT,SSDTと言ったテーブルはシステムの動作そのものに関わるためOSの起動時に一度だけ初期化され,以降本来であれば変更されないはずである。逆に,プロセス・リスト等はプロセスの生成・終了に伴って変更されるデータ構造である(表1)。
感銘を受けたマルウエアの分類法表1のような整理を行うことでマルウエアをタイプ0からタイプ3までの4タイプに分類することができる。タイプ0がルートキットを含まない単純なマルウエアで,タイプ1〜3がルートキットを含むマルウエアである。 この分類は,2006年11月にJoanna Rutkowska氏によって提唱されたものである(※「http://www.invisiblethings.org/papers/malware-taxonomy.pdf」を参照)。余談だが,著者はこの分類を目にしたとき非常に感銘を受けた。自身でも漠然と考えていたことが整理された形で文章化されていたためである。 では,Rutkowska氏の分類を紹介しよう。 タイプ0
タイプ1
タイプ2
タイプ3
いかがだろう。非常にすっきりとまとまっているのではないだろうか。
連載新着連載目次へ >>
|