Portable Executable(PE)ファイルインフェクタウイルスを見かけることは非常に良くあることだ。RAWファイルシステムを経由したファイルインフェクタ、このケースでは「Master Boot Record(MBR)ファイルシステムインフェクタ」は、もう少し珍しい。

  これには、PEインフェクタの方が作成の厄介さが少なく、そしてより強固で、開発やコントロールがより容易だからという理由もある。対照的にMBRインフェクタはより複雑で、サイズは62セクタ(7C00H)に限定されている。またエラーの余地も少ない。すなわち、MBRファイルシステムインフェクタでの小さなミスやバグは、システムを起動不能にするのだ。

  よって、いくつかの無料ファイル共有ネットワークによって配布されているらしい「Trojan:W32/Smitnyl.A (98b349c7880eda46c63ae1061d2475181b2c9d7b)」のようなMBRファイルシステムインフェクタは、一つのPortable Executableシステムファイルを標的にしているだけであっても、そしてその感染が一般のウイルスファイルインフェクタと比較して単純であっても、迅速に分析することは価値があると思われる。

  「Smitnyl.A」は最初に、RAWディスクアクセスを介してMBRを感染させる。次にそれを、ファイルインフェクタルーチンを含む悪意あるMBRで置き換える(セクター32に保存される)。

画像1&2:オリジナルのMBRを上書き。パート1(上)とパート2(下)
1: Overwriting original MBR

2: Overwriting original MBR

  なぜMBRファイルシステムインフェクタなのか? おそらくは、それがWindows File Protection(WFP)をバイパスすることができるからだろう。WFPはプロテクトモードで動作しているので、もし置き換えられれば、すべてのWFP保護ファイルは即座にリストアされる。

  インフェクタペイロードがサイズA00Hでセクタ39から開始される一方で、オリジナルのMBRはセクタ5に保存される。このペイロードは、Windowsのクリティカルシステムファイル「userinit.exe」に上書きされる。

画像3&4:16進法による感染したMBR(左)とオリジナルのMBR(下)
3: Hex view of infected MBR

4: Hex view of original MBR

画像5:16進法によるMBRファイルシステムインフェクタルーチン
5: Hex View MBR File System Infector Routine

画像6:16進法によるUserinitインフェクタペイロード
6: Hex View Userinit Infector Payload

  なぜ「Userinit」なのか? おそらくは、システムがスタートすると自動的にローンチされるプロセスの一つであり、システムスタート時にマルウェアが自動的に実行可能になるためだろう。

  「Smitnyl」はブートシーケンスの最初のステージから、Userinitを感染させる。これはMBRが0x7C00にロードされる際、パーティションテーブル、さらにはブートセクタのstarting offsetからアクティブパーティションを測定する。

  次にマシンのファイルシステムタイプをチェックする:

画像7:ブートセクタタイプの測定
7: Determine Boot Sector Type

  NTFSファイルシステムが見つかれば、マスタファイルテーブル(MFT)を解析し、(MFTが正しく解析されると仮定して)ディスク内の「Userinit」の生データを確定するため、$ROOT (.)ファイルレコードの属性を読んで$INDEX_ALLOCATION属性を探す。「Smitnyl」は、userinit.exeが置かれている、$ROOTからSystem32ディレクトリまでWindowsのパスをチェックする。

画像8&9:Userinit.exeの位置を特定する。パート1
8: Locate Userinit.exe, Part 1

9: Locate Userinit.exe, Part 1

  このマルウェアは、userinit.exeファイルを見つけるのに「get_userinit_data_content_addr」ルーチンを使用し、次にExtended Write Function(ファンクションナンバー ah = 43H)を使用して、セクタ39でインフェクタペイロードを書き込む。userinit.exe感染ルーチンの間、同マルウェアはoffset 0x28で感染マーカの存在も(後からより詳しく)チェックする。

画像10&11:Userinit.exeの位置を特定する。パート2
10: Locate Userinit.exe, Part 2

11: Locate Userinit.exe, Part 2

  マシンが感染したMBRとともに、うまくブートされると、userinit.exeは感染され、自動的にローンチされるはずだ。感染したuserinit.exeを確認する一つの方法は、ファイルプロパティのチェックだ:

画像12&13:userinit.exeプロパティ。オリジナルと感染したもの
userinit.exe Properties, original userinit.exe Properties, infected

  幸いなことに、違いはかなり明白だ。

  16進表示で、感染したファイルを見てみよう:

画像14:感染したUserinit
14: Infected Userinit

  インフェクタルーチンが、感染させる前に感染マーカ0x55AAをチェックすると指摘したことを思い出されるだろうか? ではこれが実行される際、何をしようとするのだろうか? 主要なペイロードはセクタ45にある、エンコードされた実行ファイルをローンチすることだ:

画像15:セクタ45のエンコードされた実行ファイル
15: Encoded Executable File at Sector 45

  これはデコードを開始し、最終ペイロードをローンチする前に、いくつかの準備を行う:

  •  360safeアンチウイルスの存在をチェックする。もし見つかれば、360safe IEブラウザプロテクションが無効にされる。

画像16:360safe IEプロテクション・レジストリキーチェック
16: 360safe IE Protection Registry Key Checking

  •  仮フォルダに偽のexplorer.exeを作成する。これは、デコードされた実行ファイルだ。

画像17:デコードされた実行ファイルによる偽Explorer
17: Fake Explorer with Decoded Executable

画像18:デコードされた実行ファイルによる偽Explorer
18: Fake Explorer with Decoded Executable

  •  デコーディング後、ShellExecuteを使用して「%temp%\explorer.exe」がローンチされる。これは感染を隠すデコイとして用いられる。同時に、「Winexec」を使用して本物の「explorer.exe」が実行される。

偽の「explorer.exe」を実行し、オリジナルの「explorer.exe」をローンチ
19: Execute fake explorer.exe and launch original explorer.exe

  準備が終了すると、ペイロードがローンチされる。

画像20:最終ダウンローダペイロード
20: Final Downloader Payload

  幸いにも、この最終ペイロードには何ら特別なところは無い。単なるダウンローダだ。感染した「userinit.exe」は、360safeのIEブラウザ保護を無効にし、それによりダウンローダがリモートサーバー「http://[...]」からファイルを取り出すことが可能になる。

投稿はLow Chin Yickによる。