フォティーンフォティ技術研究所 先端技術研究部
リサーチ・エンジニア 舟久保 貴彦

 前回紹介した通り,SMM(システム管理モード)はOSやVMM(バーチャル・マシン・モニター)にその存在を気付かせることなく動作し,ロックを掛けることによりSMMの処理プログラムを完全に隠ぺいできる特徴がある。密かに盗聴などの活動をするルートキットには都合が良い動作環境と言える。今回は,SMMルートキットの論文で話題に上ることが多いSMMキーロガーの動作原理について解説する。

 SMMで動作するプログラム(例外なくSMMキーロガーも含む)は,リアル・モードに似た16ビット・モードで動作するが,Memory Extension Addressingと呼ばれる技術を使って4Gバイトの物理メモリー領域にフルアクセスできる。メモリー上に存在するOSのデータからユーザー・アプリケーションのデータまで,あらゆるメモリー・データにアクセスできるわけだ。,I/Oポートにもフルアクセスでき,デバイス・ドライバを実装することで,あらゆるハードウエア・デバイスにもアクセス可能になる。つまり,SMMで動作するプログラムは,事実上どのようなことも実行可能であると言える。,SMMが悪用された場合,非常に大きな脅威になる。

 SMMキーロガーも,このSMMの特徴を最大限利用し,キーボード・コントローラにアクセスしてキーデータを読み込んだり,そのキーデータをメモリーに書き込んだり,ネットワーク・コントローラにアクセスして,キーデータをインターネットに送信したりする。

 SMMキーロガーの動作原理を説明するために,まず正常なSMMの動作原理を説明しておこう。

1.SMI(system management interrupt)が発生する
2.CPUコンテキストの情報がSMRAMに保存される
3.SMRAMに格納されているディスパッチャが呼び出される
4.ディスパッチャは,ディスパッチ・テーブルからSMIの種類に応じたテーブル・エントリを見付け出し,そのエントリに格納されているアドレス情報からSMIハンドラを呼び出す
5.SMIハンドラの処理が終了後,rsm命令により,SMRAMに保存されていたCPUコンテキストの情報がCPUに書き戻され,OSに処理が戻る

 SMMキーロガーは,数あるSMIハンドラの一つとして実装し,あまり使われず,存在しなくてもシステムの動作に影響を与えないSMIハンドラの代わりに実行されるようにする。具体的な設置方法はこうだ。まずSMRAMの空いている領域にSMMキーロガーを書き込み,その後,SMIテーブル・エントリ内部のアドレス情報を正常なSMIハンドラのアドレスからSMMキーロガーのアドレスに上書きする。

 SMMキーロガーがSMRAMに設置された後,動作を開始するにはSMIを待たなければならないが,都合良くSMIが発生するとは限らない。そこでSMIを都合良く発生させるための仕組みもいくつか考案・発表されている。

○I/O APIC方式
http://www.cs.ucf.edu/~czou/research/SMM-Rootkits-Securecom08.pdf

 ショーン・エンベルトン氏らが発表した手法で,端的に言えば,I/O APIC(APICはadvanced programmable interrupt controller)の機能により,ハードウエア割り込みをSMIに変換する (図1)。

タイトル

 I/O APICとは,マルチプロセサ・システム用割り込み制御アーキテクチャのうち,I/O装置が発するハードウエア割り込み信号を集約する仕組み。マザーボード上に存在して,転送テーブルを参照して,専用のバスでつながれたCPU内部のローカルAPICという制御回路に集約した信号を伝達する。ショーン・エンベルトン氏らの論文によれば,この転送テーブルのエントリを正常なベクター番号からSMIに変更することにより,ハードウエア割り込みが発生した際に,強制的にSMIを発生させることができる。

 こうしてSMMキーロガーを動作させると,SMMキーロガーは,キーボード・コントローラにアクセスし,ユーザーが打ち込んだキーデータを読み出して,UDPパケットとしてキーデータをインターネットに送信する。その後,キーボード・コントローラのバッファに,ユーザーが打ち込んだキーデータを書き戻し,IPI(inter processor interrupts)という仕組みを利用して,あたかもI/O APICからローカルAPICにAPICメッセージが来たかのように,APICメッセージを送る。するとOSのキーボード・ドライバは,何事もなかったように自らの作業をおこなうことになるという訳である。