このページの本文へ

週刊セキュリティレポート 第7回

エフセキュアがセキュリティトピックスを解説!

知っているようで知らない?ルートキットのすべて

2011年07月25日 06時00分更新

文● 八木沼 与志勝/エフセキュア

  • この記事をはてなブックマークに追加
  • 本文印刷

セキュリティ用語に限った話ではなく、ITの用語には実態をよく知らないままに使われているものがたくさんありますが、「ルートキット」はそのうちの1つではないでしょうか。
 かつてルートキットを世に知らしめる例となったSony BMGのトーマス・ヘス(Thomas Hesse)氏は「Most people don't even know what a root kit is, so why should they care about it?(ほとんどの人はルートキットが何かなんて知らない。ましてやルートキットの心配なんてするだろうか?)」といっています。皆さんはルートキットの仕組みを説明できますか?

ルートキットの定義とは?

 ルートキットとは何なのか。まずは、「ASCII.jp デジタル用語辞典」でルートキットという単語を調べてみましょう(図1)。

図1 rootkitとは?(出展: ASCII.jp デジタル用語辞典)

 コンパクトにまとまっています。ご理解いただけたでしょうか。この解説にある通り、ルートキットはシステム権限(管理者権限)を使ってコンピュータシステムに侵入しシステムを改ざんするようなツールの総称です。

 ルートキット自体は単なるツールで、必ずしもマルウェアではありません。ですが、システムを改ざんすることで、ユーザーからマルウェアを隠すように動くルートキットがあります。そういう類のものは、ウイルスを隠すことができてしまうため、セキュリティ的に問題のあるツールです。このため、ルートキットを「ユーザーからソフトウェアを隠ぺいする技術」として使うケースも多いので、見かけた際に文脈から判断する必要があります。

 セキュリティソフトの多くは、自身および(もしくは)他のソフトウェアをユーザーから隠して見つからないようにシステムを改変する動きをするものを「ルートキット」として検出します。今回はWindowsプラットフォームにおいて隠ぺい動作をするルートキットに焦点を当てて、ルートキットがどのようにマルウェアファイルを隠しているかを見てみたいと思います。

ルートキットのタイプ

 Windowsプラットフォームはマルチユーザーをサポートするため、アプリケーションはオペレーティングシステムから切り離されて動作します。このため、Windowsプラットフォームのアーキテクチャはアプリケーションが実行される「ユーザーモード」とシステムデータやハードウェアレベルのアクセス権を持つ「カーネルモード」と呼ばれる2つのモードから成ります(図2)。

図2 Windowsのアーキテクチャ。ユーザーモードとカーネルモードがある

 ルートキットにもこのレイヤにならって、

  1. ユーザーモードのルートキット
  2. カーネルモードのルートキット

があります。

ユーザーモードのルートキット

 ユーザーモードのルートキットは、Administratorをはじめとしたすべてのユーザーの目からマルウェアやルートキット自身を隠すものです。たとえばエクスプローラのフォルダオプションで「すべてのファイルとフォルダを表示する」を有効にしたとしても見えません。ユーザーの目に見えないので、ユーザーが手動でファイルを見つけて削除することもできません。

 ユーザーモードのルートキットは、ユーザーが実行するアプリケーションから出されたシステムコールを標的にしてアプリケーションやWindowsのプロセスやサービスを操作します(図3)

図3 ユーザーモードのルートキットは Windowsサブシステム Win32 APIに感染する

 Windowsサブシステムにおいてファイルを探し出して表示する関数は「FindFirstFile (最初のファイルを見つけ出す)」と「FindNextFile (ファイルが見つからなくなるまで検索する)」の2つがあり、kernel32.dllというダイナミックリンクライブラリに組み込まれています。ユーザーモードのルートキットがファイルを隠す際には、このファイルを探し出す関数を利用します。アプリケーションはWindowsサブシステムが提供するDLLファイルを読み込み、その中のFindFirstFileやFindNextFileといった関数を使ってWindowsに格納されたファイル一覧を入手し表示します。そこでユーザーモードのルートキットは、このFindFirstFileやFindNextFileを呼び出している部分を見つけ出し、ルートキット自身を呼び出すように変更。アプリケーションがファイル一覧を知る前に一覧を横取りし、都合が悪いファイルを一覧から削除してしまいます。これにより、マルウェアが仕込まれたファイルやルートキット自身を(Administratorを含む)ユーザーから隠ぺいするのです(図4)。

図4 ユーザーモードのルートキットがファイルを隠す仕組み

カーネルモードのルートキット

 一方、カーネルモードのルートキットはOSの奥深くで動き、OS自体の動きを操作してしまいます。このため、一度感染してしまうと駆除が非常にやっかいです。カーネルモードのルートキットはOSの下位レベル(ドライバに近い深い部分)でシステムコールやAPIをフックして操作することによりWindows自体を制御しようとします(図5)。

図5 カーネルモードのルートキットはファイルシステムのマネージャレベルで隠ぺいする

 カーネルモードにおいては、システム処理においてAPIを横取りする方法がとられています。ユーザーモードのNTDLL.DLLは、アプリケーションの処理をOSへ移すためのシステムコール命令を実行します。カーネルモードのシステムサービスディスパッチャがこの命令を受け取り、OSのデバイスドライバが持つシステムコール関数へつなぎます。カーネルモードのルートキットは、このディスパッチャが呼び出すデバイスドライバのシステムコール関数を書き換えます。これにより、正しいドライバに代わってルートキットが処理を実行することで、データを改ざん。見られたくないファイルなどを隠ぺいするのです(図6)。

図6 カーネルモードのルートキットではカーネルレベルでの横取りする

 また、違った手法のカーネルモードのルートキットはアンチウイルスソフトと同じレイヤで動作します。アンチウイルスソフトの多くはWindowsシステムに常駐し、すべてのファイルシステムの処理を監視しています。このようなアンチウイルスソフトはドライバレベルで動作し、ファイルが読み出されたり書き込まれたり変更されるタイミングで、ファイルを横取りしてスキャンを行なうことでウイルスを見つけます。

 カーネルモードのルートキットは、このセキュリティソフトと同じレイヤで動作し、ファイルを隠ぺいしようとします。具体的には、ファイルシステムドライバが返すファイル一覧からマルウェアやルートキット自身を取り除くことでファイルを隠ぺいします(図7)。この結果、ユーザーモードのエクスプローラなどのファイル表示だけでなく、カーネルモードのドライバさえも影響をうけるため、あらゆるプログラムで隠ぺい処理を見抜けなくなってしまいます。

図7 カーネルモードのルートキットではファイルシステムドライバから返されるファイルリストを変更する

ルートキットへの対策とは?

 ルートキットは、どれもマルウェアやルートキット自身を隠すことで見つからないように隠ぺいするものでした。特にカーネルモードのルートキットの場合には、管理者を含めたユーザーが目にすることはない深い部分でシステムを書き換えているため、検出や削除に苦労を要します。システムファイルを書きかえられてしまうと、システムの起動ができなくなることもあるため、簡単に削除などはできません。最悪の場合、OS自体の再インストールという自体に陥ります。

 ですので、ルートキットへの最善の対策は感染されないようにすることです。ウイルス対策ソフトのほとんどは、ルートキットをマルウェアとして検出します。リアルタイムスキャンを無効にせず、また最新の定義ファイルに更新したり、レピュテーションベースの検出を有効にするといった基本を守りましょう。

 また、特に定義ファイルベースの検出では、定義ファイルがリリースされるまでの間は無防備な状態になります。無防備な状態の期間に感染してしまっている場合を想定し、定期的にシステムの完全スキャンを実施するなどして、システムが感染していないかどうか確認することが大切です。もしルートキットが検出された場合、簡単に削除できない類のルートキットがあるので、お使いのウイルス対策ソフトを提供するメーカーのカスタマ・サポートに問い合わせをし、念のために専門家の意見を仰ぎながら削除することをお勧めしたいと思います。

筆者紹介:八木沼 与志勝(やぎぬま よしかつ)

エフセキュア株式会社 テクノロジー&サービス 部長
1972年生。UNIXプログラミングからIT業界に携わりはじめ、そのあとITインフラを中心としたITコンサルティングからセキュリティ業界へ。エフセキュア入社は2006年で、法人/コンシューマの製品およびプリセールスなどのサービス全般を担当する。


カテゴリートップへ

この連載の記事