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(下)
なぜMBRファイルシステムインフェクタなのか? おそらくは、それがWindows File Protection(WFP)をバイパスすることができるからだろう。WFPはプロテクトモードで動作しているので、もし置き換えられれば、すべてのWFP保護ファイルは即座にリストアされる。
インフェクタペイロードがサイズA00Hでセクタ39から開始される一方で、オリジナルのMBRはセクタ5に保存される。このペイロードは、Windowsのクリティカルシステムファイル「userinit.exe」に上書きされる。
画像3&4:16進法による感染したMBR(左)とオリジナルのMBR(下)
画像5:16進法によるMBRファイルシステムインフェクタルーチン
画像6:16進法によるUserinitインフェクタペイロード
なぜ「Userinit」なのか? おそらくは、システムがスタートすると自動的にローンチされるプロセスの一つであり、システムスタート時にマルウェアが自動的に実行可能になるためだろう。
「Smitnyl」はブートシーケンスの最初のステージから、Userinitを感染させる。これはMBRが0x7C00にロードされる際、パーティションテーブル、さらにはブートセクタのstarting offsetからアクティブパーティションを測定する。
次にマシンのファイルシステムタイプをチェックする:
画像7:ブートセクタタイプの測定
NTFSファイルシステムが見つかれば、マスタファイルテーブル(MFT)を解析し、(MFTが正しく解析されると仮定して)ディスク内の「Userinit」の生データを確定するため、$ROOT (.)ファイルレコードの属性を読んで$INDEX_ALLOCATION属性を探す。「Smitnyl」は、userinit.exeが置かれている、$ROOTからSystem32ディレクトリまでWindowsのパスをチェックする。
画像8&9:Userinit.exeの位置を特定する。パート1
このマルウェアは、userinit.exeファイルを見つけるのに「get_userinit_data_content_addr」ルーチンを使用し、次にExtended Write Function(ファンクションナンバー ah = 43H)を使用して、セクタ39でインフェクタペイロードを書き込む。userinit.exe感染ルーチンの間、同マルウェアはoffset 0x28で感染マーカの存在も(後からより詳しく)チェックする。
画像10&11:Userinit.exeの位置を特定する。パート2
マシンが感染したMBRとともに、うまくブートされると、userinit.exeは感染され、自動的にローンチされるはずだ。感染したuserinit.exeを確認する一つの方法は、ファイルプロパティのチェックだ:
画像12&13:userinit.exeプロパティ。オリジナルと感染したもの
幸いなことに、違いはかなり明白だ。
16進表示で、感染したファイルを見てみよう:
画像14:感染したUserinit
インフェクタルーチンが、感染させる前に感染マーカ0x55AAをチェックすると指摘したことを思い出されるだろうか? ではこれが実行される際、何をしようとするのだろうか? 主要なペイロードはセクタ45にある、エンコードされた実行ファイルをローンチすることだ:
画像15:セクタ45のエンコードされた実行ファイル
これはデコードを開始し、最終ペイロードをローンチする前に、いくつかの準備を行う:
• 360safeアンチウイルスの存在をチェックする。もし見つかれば、360safe IEブラウザプロテクションが無効にされる。
画像16:360safe IEプロテクション・レジストリキーチェック
• 仮フォルダに偽のexplorer.exeを作成する。これは、デコードされた実行ファイルだ。
画像17:デコードされた実行ファイルによる偽Explorer
画像18:デコードされた実行ファイルによる偽Explorer
• デコーディング後、ShellExecuteを使用して「%temp%\explorer.exe」がローンチされる。これは感染を隠すデコイとして用いられる。同時に、「Winexec」を使用して本物の「explorer.exe」が実行される。
偽の「explorer.exe」を実行し、オリジナルの「explorer.exe」をローンチ
準備が終了すると、ペイロードがローンチされる。
画像20:最終ダウンローダペイロード
幸いにも、この最終ペイロードには何ら特別なところは無い。単なるダウンローダだ。感染した「userinit.exe」は、360safeのIEブラウザ保護を無効にし、それによりダウンローダがリモートサーバー「http://[...]」からファイルを取り出すことが可能になる。
投稿はLow Chin Yickによる。
これには、PEインフェクタの方が作成の厄介さが少なく、そしてより強固で、開発やコントロールがより容易だからという理由もある。対照的にMBRインフェクタはより複雑で、サイズは62セクタ(7C00H)に限定されている。またエラーの余地も少ない。すなわち、MBRファイルシステムインフェクタでの小さなミスやバグは、システムを起動不能にするのだ。
よって、いくつかの無料ファイル共有ネットワークによって配布されているらしい「Trojan:W32/Smitnyl.A (98b349c7880eda46c63ae1061d2475181b2c9d7b)」のようなMBRファイルシステムインフェクタは、一つのPortable Executableシステムファイルを標的にしているだけであっても、そしてその感染が一般のウイルスファイルインフェクタと比較して単純であっても、迅速に分析することは価値があると思われる。
「Smitnyl.A」は最初に、RAWディスクアクセスを介してMBRを感染させる。次にそれを、ファイルインフェクタルーチンを含む悪意あるMBRで置き換える(セクター32に保存される)。
画像1&2:オリジナルのMBRを上書き。パート1(上)とパート2(下)
なぜMBRファイルシステムインフェクタなのか? おそらくは、それがWindows File Protection(WFP)をバイパスすることができるからだろう。WFPはプロテクトモードで動作しているので、もし置き換えられれば、すべてのWFP保護ファイルは即座にリストアされる。
インフェクタペイロードがサイズA00Hでセクタ39から開始される一方で、オリジナルのMBRはセクタ5に保存される。このペイロードは、Windowsのクリティカルシステムファイル「userinit.exe」に上書きされる。
画像3&4:16進法による感染したMBR(左)とオリジナルのMBR(下)
画像5:16進法によるMBRファイルシステムインフェクタルーチン
画像6:16進法によるUserinitインフェクタペイロード
なぜ「Userinit」なのか? おそらくは、システムがスタートすると自動的にローンチされるプロセスの一つであり、システムスタート時にマルウェアが自動的に実行可能になるためだろう。
「Smitnyl」はブートシーケンスの最初のステージから、Userinitを感染させる。これはMBRが0x7C00にロードされる際、パーティションテーブル、さらにはブートセクタのstarting offsetからアクティブパーティションを測定する。
次にマシンのファイルシステムタイプをチェックする:
画像7:ブートセクタタイプの測定
NTFSファイルシステムが見つかれば、マスタファイルテーブル(MFT)を解析し、(MFTが正しく解析されると仮定して)ディスク内の「Userinit」の生データを確定するため、$ROOT (.)ファイルレコードの属性を読んで$INDEX_ALLOCATION属性を探す。「Smitnyl」は、userinit.exeが置かれている、$ROOTからSystem32ディレクトリまでWindowsのパスをチェックする。
画像8&9:Userinit.exeの位置を特定する。パート1
このマルウェアは、userinit.exeファイルを見つけるのに「get_userinit_data_content_addr」ルーチンを使用し、次にExtended Write Function(ファンクションナンバー ah = 43H)を使用して、セクタ39でインフェクタペイロードを書き込む。userinit.exe感染ルーチンの間、同マルウェアはoffset 0x28で感染マーカの存在も(後からより詳しく)チェックする。
画像10&11:Userinit.exeの位置を特定する。パート2
マシンが感染したMBRとともに、うまくブートされると、userinit.exeは感染され、自動的にローンチされるはずだ。感染したuserinit.exeを確認する一つの方法は、ファイルプロパティのチェックだ:
画像12&13:userinit.exeプロパティ。オリジナルと感染したもの
幸いなことに、違いはかなり明白だ。
16進表示で、感染したファイルを見てみよう:
画像14:感染したUserinit
インフェクタルーチンが、感染させる前に感染マーカ0x55AAをチェックすると指摘したことを思い出されるだろうか? ではこれが実行される際、何をしようとするのだろうか? 主要なペイロードはセクタ45にある、エンコードされた実行ファイルをローンチすることだ:
画像15:セクタ45のエンコードされた実行ファイル
これはデコードを開始し、最終ペイロードをローンチする前に、いくつかの準備を行う:
• 360safeアンチウイルスの存在をチェックする。もし見つかれば、360safe IEブラウザプロテクションが無効にされる。
画像16:360safe IEプロテクション・レジストリキーチェック
• 仮フォルダに偽のexplorer.exeを作成する。これは、デコードされた実行ファイルだ。
画像17:デコードされた実行ファイルによる偽Explorer
画像18:デコードされた実行ファイルによる偽Explorer
• デコーディング後、ShellExecuteを使用して「%temp%\explorer.exe」がローンチされる。これは感染を隠すデコイとして用いられる。同時に、「Winexec」を使用して本物の「explorer.exe」が実行される。
偽の「explorer.exe」を実行し、オリジナルの「explorer.exe」をローンチ
準備が終了すると、ペイロードがローンチされる。
画像20:最終ダウンローダペイロード
幸いにも、この最終ペイロードには何ら特別なところは無い。単なるダウンローダだ。感染した「userinit.exe」は、360safeのIEブラウザ保護を無効にし、それによりダウンローダがリモートサーバー「http://[...]」からファイルを取り出すことが可能になる。
投稿はLow Chin Yickによる。