ZeroAccessは、最近ブログなどでよく話題になったルートキットのひとつです。また、これまでに出てきた中で最も複雑かつ広く蔓延しているルートキットでもあり、今なお進化し続けています。ZeroAccessルートキットはソーシャルエンジニアリングや脆弱性を利用して拡散されています。
このルートキットの目的のひとつは、感染したシステムにマルウェアを追加してダウンロードできる強力なP2Pボットネットを構築することです。このボットネットはクリック詐欺に使われており、不正なウイルス対策アプリケーションをダウンロードし、スパムを生成することが報道されています。
以下のGoogleマップは、4月下旬、米国で固有のZeroAccessの検出が報告された「マカフィー ウイルス スキャン」のユーザーノードを示しています。
3月のマカフィーの個人ユーザーデータによれば、1日に4,000台近いシステムでZeroAccessが検出されており、以下の表で明らかな通り、この傾向はますます高まっています。
ZeroAccessインストールの仕組み
このルートキットの初期インストールの仕組みは次のようになります。ZeroAccessのインストール中、ディスク上の正規のドライバが、悪質なルートキットのドライバによって上書きされます。通常、インストールプロセスのステップ1は亜種によってそれぞれ異なります。中には、正規のドライバを直接上書きする亜種もあれば、まずexplorer.exeといった、信頼できるプロセスに悪質なコードを挿入し、次に挿入したコードからドライバを上書きするものもあります(これにより、さまざまなセキュリティ製品を回避し、分析をより困難にしています)。ステップ1では、オリジナルのドライバコードはメモリー内に保持されます。ステップ2で上書きされるドライバはランダムに選択されます(詳細はこちら)。以下の考察では、CDROM.sysが上書きされると想定しています。ステップ2~8は、多くのZeroAccessの亜種で見られます。悪質なコードで上書きされたドライバは、カーネル領域にロードされます。カーネルモードのコードはまずマルウェアのセットアップを行い、再起動時に再び動作し、上書きしたドライバ(CDROM.sys)の表示を偽装します。
それでは、この仕組みのステップ5から8を見てみましょう。ステップ5で、ZeroAccessは、\driver\disk DEVICE_OBJECTのDeviceExtension->LowerDeviceObjectフィールドにフックし、ディスクI/Oをインターセプトします。すると、以降のディスクI/Oはすべて、ルートキットの悪質なルーチンを経由するようになります。ステップ6では、カーネルモードのコードがメモリ内に格納されているCDROM.sysドライバのクリーンイメージにアクセスします。再起動時に再び動作するため、ZwFlushVirtualMemory APIを使って、ファイルをディスクにフラッシュします。一見したところ分かりづらいですが、興味深いことに、クリーンイメージをフラッシュするリクエストはCDROM.sysファイルに送信されます。ステップ2で感染したばかりのファイルにクリーンイメージを書き込もうとするのはなぜでしょうか。さらに観察すると、実際には自身のディスクI/Oリダイレクションの枠組みを使用しています。そのため、ファイルのクリーンイメージをディスクに格納するリクエストがステップ7の仮想ドライバスタックを経由すると、暗号化され、実際のCDROM.sysではなく、ステップ3で作成されたルートキットの「保護」フォルダにリダイレクトされます。
CDROM.sysのオリジナルの暗号化されたイメージが保護フォルダに格納されると、感染が持続的なものになり、再起動しても容易に再び動作するようになります。感染したCDROM.sysを読み込むには、乗っ取られたI/Oパスをトラバースする必要があり、読み取りが試行されると、ルートキットはすぐに保護されたストレージからオリジナルのファイルを復号化してクリーンイメージを表示し、セキュリティツールへのファイルの表示を偽装します。また、再起動中、まずは感染したファイルが悪質なコードを「保護」フォルダともいえるカーネルにロードし、次にオリジナルのファイルをカーネルにロードして、オリジナルのデバイスの機能が損なわれないようにします。
セキュリティツールがこの脅威を取り除くには、メモリを修復するか、保護フォルダ内のファイルを復号化してオリジナルのファイルを復元する必要があります。また、Virus Bulletinの記事に書かれているように、いったんルートキットがカーネルモードで動作すると、さまざまな方法で強制終了やセキュリティツールを回避できます。そのため、修復がさらに困難になり、調査の費用もかかるようになります。
リアルタイムのカーネル監視の影響
マカフィーでは1年以上にわたり、多数存在するこのルートキットの亜種に対して、無許可のカーネルメモリの改変をリアルタイムで防ぐMcAfee Deep Defenderがどう処理するかテストしてきました。以下のスクリーンショットのとおり、McAfee Deep Defenderは、ルートキットが存続するために不可欠な、ステップ5におけるDeviceExtensionの乗っ取りを阻止します。このフックがブロックされると、複雑な修復作業を行わなくても、マシンの再起動後にルートキットが駆除されるのです。そのため、このルートキットや亜種のリバースエンジニアリング、亜種に合わせた修復プログラムの作成に何日も費やす必要はありません。McAfee Deep DefenderはZeroAccessの弱点を見つけたといえます。
McAfee Deep Defenderがマシンを駆除する仕組み
ここからが重要です。興味深いことに、McAfee Deep Defenderは、特別な修復を行わずにこの脅威を駆除することができました。McAfee Deep Defenderはルートキットのコア機能をリアルタイムでブロックしたのみです。何が起こったのか理解するため、再度ルートキットの攻撃戦略を見てみましょう。
ルートキットがステップ5でDeviceExtensionポインターを乗っ取ろうとすると、Deep Defenderのリアルタイムのカーネルメモリ保護が変更の試みを検出し、重要な構造を改変しようとする悪質な試みとして認識し、乗っ取りをブロックしました。フックが失敗したため、ルートキットはディスクI/Oパスを乗っ取ることができず、その結果、ファイルを「保護」フォルダに格納できず、再起動後も気づかれずに再び動作することができなくなりました。もはや、ファイルの表示を偽装することができません。しかし、最も興味深いのは、McAfee Deep Defenderによる乗っ取りの阻止により、ステップ7でのルートキットの書き込みがオリジナルの場所にリダイレクトされたことです。そのため、ステップ8では、ユーザーモードから感染したオリジナルのファイルが上書きされ、ルートキット自身に駆除させる形になります。再起動後、システムは感染していない状態に戻ります。
McAfee Deep Defenderのこの戦略は、現行のZeroAccessのすべての亜種で有効です。ルートキットの作者にとって、システムを破壊し、セキュリティツールに気づかれることなく、この防御を完全に回避するのは困難です。ファイルの表示を偽装できなくなれば、現行犯で取り押さえられることになります。
関連情報
OSの階層を超えたエンドポイントセキュリティで、ステルス型攻撃を阻止
McAfee Deep Defender
関連記事
- [2012/04/12] 署名付きマルウェア:インテルとの共同開発テクノロジーから生まれた初の製品、McAfee Deep Defenderの最新情報 第1回
- [2012/05/17] Darkmegi をリアルタイムで検知:インテルとの共同開発テクノロジーから生まれた初の製品、McAfee Deep Defenderの最新情報 第2回
※本ページの内容はMcAfee Blogの抄訳です。
原文:Targeting ZeroAccess Rootkit’s Achilles’ Heel