Popureb を除去するのに Windows を再インストールしなくてもよい


By Marco Giuliani

先週の水曜日、Microsoft が Popureb というマルウェアについて重要な更新をブログに投稿しました。マルウェアは、マスター ブート レコード (MBR、オペレーティング システムの開始前に、起動中に PC によって読み込まれるハードディスクの一部分) にコードを追加します。研究者は、この種類のマルウェアをブートキットまたはルートキットと呼ぶことがあります。それは、この種類のマルウェアが起動プロセスの間に低いレベルで読み込まれるため、オペレーティング システムからは見えず、除去が非常に難しいからです。
マイクロソフトの研究者 Chun Feng 氏は、Popureb.E新しい特徴をいくつか詳しく述べていて、その中にはディスクの書き込みと読み取りに関する Windows のドライバーへの低レベル フックが含まれると言及しています。MBR に変更を書き込む試行 (修復ツールが行おうとする変更) を感染したシステムのドライバーが検知すると、命令を書き込みから読み取りに変更し、Windows で実行される感染修正用のあらゆるツールを無効化してしまいます。

Microsoft が当初公開した Popureb.E の駆除方法は、非常に思い切ったものであり、少なからず怖いものでした。「ブートキットを完全に除去するには、Windows を再インストールして、ハード ディスクにあるすべてのデータなどを消去する」という方法です。私たちはそれは現実的ではないと思っています。マイクロソフトの方々も、駆除に関するアドバイスを穏やかなものに変えたようで、回復コンソールを使用する手動修正を公開しています。

トロイ木馬の概念全体が有効かつ技術的に強力である一方で、マルウェアの実際の実装はその考えほど有効ではありません。以下はかなり技術的な内容ですが、両方の問題について触れるとともに、私たちが見つけた 1 つの解決策をご紹介します。

5 年ほど前、私たちはマスター ブート レコードを狙った最初のマルウェアがひさしぶりに現れたのを確認しました。DOS ウイルスの時代の後、MBR のウイルスはほとんどが姿を消したのですが、2007 年の後半に Mebroot の感染ウイルスが現れました。その間にブートキットの開発は著しく進み、TDL4 のような高度なカーネルモードのルートキットから Whistler ブートキット、元のマスター ブート レコードを暗号化して、支払いを行うまでコンピューターを人質にする「押し売り」のウイルスへと変化しています。

マスター ブート レコードを攻撃の対象にするということは、戦いの場をオペレーティング システムの外側に移すということであり、セキュリティ ソフトウェアによってオペレーティング システムの内側に実装されていたあらゆる種類の対抗手段が回避されてしまうということです。これが、ますます多くのマルウェアがマスター ブート レコードを狙う理由です。オペレーティング システムより先に動き出すことによって、マルウェアは何にも邪魔をされず、思いのままにシステムにパッチを適用できるのです。

Popureb は TDL4 のようにマスター ブート レコードをターゲットにしていて、Windows で実行されるアプリケーションによって感染が上書きされる、または感染に触れられることさえ妨害します。トロイの木馬は、そのコードをマスター ブート レコードに隠そうとはしませんが、代わりにあらゆるセキュリティ ソフトウェアがコードを修正または上書きするのを妨害します。まるで嗜虐的なゲームのようで、セキュリティ ソフトウェアがマスター ブート レコードを果敢に何度も何度も修正しようとしても、成功することは決してありません。

そうは言っても、Popureb は現代のルートキットと同じではありません。1 つには、Popureb は一般的なルートキットによって実装されている通常の方法の 1 つを使用して自らを隠そうとしない点です。MBR 上にもコードを隠しませんが、その MBR コードはだれでも読むことができます。おそらく作成者は、誤った安心感を持って、だれも修正できないだろうと思っているのでしょう。しかし、それは間違いです。


私たちが見た Popureb.E のサンプルは Windows Vista または Windows 7 と互換性がなく、現在のところ Windows XP および Windows 2003 オペレーティング システムにのみ影響があるようです。Popureb を運んでくるドロッパーが実行されると、Popureb はペイロードを保管するハード ディスクのセクターを計算します。トロイの木馬はハード ディスクのパラメーター (シリンダー、シリンダーあたりのトラック数、セクターあたりのバイト数など) を返す低レベルの機能を呼び、正しいセクター アドレスを取得します。

その後、トロイの木馬が元のマスター ブート レコードを読み取って、パーティション テーブルを複製し、これを感染した MBR に統合させます。Popureb が感染した MBR でセクター ゼロを上書きし、元の MBR のコピーを保持します。ただし、元の MBR のデータは、Popureb の技術を「暗号化」と呼ぶのは暗号化の概念全体に対する侮辱と言えるような、復合化するにはきわめて単純な方法で、使用できない状態にします。

Popureb は単に、元の MBR コードの各バイトを一方向に 73 文字分回転させます。これは、暗号化の Secret Decoder Ring メソッドとほぼ等しいものです (作成者が実際の Secret Decoder Ring を使用していたとしたら、元の MBR を復元するのは大変だったであろうという点を除き)。この変更は MBR をシステムで読み取れない状態にしますが、探し物が何であるか、データを見つける場所がどこであるかをわかっている場合は特に、反対方向にデータを 73 文字分回転させてデータを復元するのは難しいことではありません。

Popureb が MBR を感染させたら、トロイの木馬が独自のカーネル モードのドライバーを読み込んで、変更した MBR の保護を即座に開始します。ディスク ドライバーのスタックをウォークして、最も低いミニポートのドライバー (通常は atapi.sys ですが、これに限りません) をフックすることで、ディスクの I/O 保護を実装します。

トロイの木馬がドライバーの StartIO ルーチンをフックし、後で使用できるように元の StartIO ポインターを保存します。フィルタリング ルーチンは受信の I/O 要求パケット (IRP) を分析し、IRP_MJ_INTERNAL_DEVICE_CONTROL パケットを探します。Popureb が SCSI パケットを傍受すると、それが実行中の SRB_FUNCTION_EXECUTE_SCSI オペレーションであるかどうかを確認し、SCSI CDB オペレーション コードを書き込みから読み取りにスワップします (たとえば、SCSIOP_WRITESCSIOP_READ に変わります)。

また、トロイの木馬は CDB10、CDB12、または CDB16 パケットも確認し、正しいオペレーション コードを設定します。その後、パケットは元の StartIO ファンクションに転送され、IRP リクエストを完了します。この技術は正常に書かれたコードの結果を返しますが、全体の手順を読み取りの操作に強制的に変更し、結果としてディスクを強力に保護します。少なくとも、作成者はそう思っていたわけです。

トロイの木馬のペイロードを除去するには、Popureb がコードを保管しているディスク オフセットを復元して、(今はわかりにくくなっている) 元の MBR のデータの場所を特定する操作を実行し、変更された MBR を復元した元の MBR データで上書きします。

自宅でデバッガーまたは感染した MBR で確認する場合は、各セクターのバイト数を掛ける必要のあるディスク セクターがオフセット 74h にあります。

結果は希望のドライブ オフセットになります。そこから、Popureb は元の MBR をオフセット +2400h に保管します。上に書いたように、ROL 0x73 の反対である、ROR 0x73 ループを使用してデコードする必要があります。

トロイの木馬ではカーネル モードのフックを保護する監視のスレッドが実装されないため、復元ジョブをはるかに簡単に実行できます。これは、Popureb の作成者にお礼を言わなくては。

そしてついに、私たちはルートキットが元の MBR を保管する場所と、ルートキットのフィルタリング エンジンを無効にする方法と、元の StartIO ルーチンを復元する方法を知りました。この感染ウイルスの除去ツールを、内部テストで正常な動作を確認した後、リリースする予定です。

本当に恐ろしいのは、トロイの木馬にバグがある可能性があり、時として再起動中にトロイの木馬によってシステムがハングしてしまうことです。これは、システムの完全再インストールを必要とする問題になってしまう可能性があります。そうでなければ、このマルウェアに良いポテンシャルが見られたとしても、現行リリースでは大きな問題もなく、実際に打ち負かすことができることを私たちは発見しました。TDL ルートキットの犯人は Popureb を気にしていないことでしょう。彼らの TDL 作成物が最先端の、非常に不愉快なカーネル モードのブートキットの感染であることに変わりはありませんからね。

wordpress blog stats