ASUS社のWindowsパソコン用自動アップデートツール「ASUS Live Update Utility」に埋め込まれたバックドア(Operation ShadowHammer)を解析してみました。
検体情報および解析環境
[検体情報]
- ファイル名: Liveupdate_Test_VER365.zip
ハッシュ値(SHA256): bebb16193e4b80f4bc053e4fa818aa4e2832885392469cd5b8ace5cec7e4ca19 - ファイル名: Setup.exe (上記ZIPに格納されているファイル)
ハッシュ値(SHA256): 9a72f971944fcb7a143017bc5c6c2db913bbb59f923110198ebd5a78809ea5fc
- Windows7 Home Edition SP1 32bit版(VMwareWorkstation仮想マシン)
- IDApro
- OllyDbg
解析の方針
Kaspersky社の記事によると、マルウェアはハードコーディングされたおよそ600個のMACアドレスを有するパソコンでのみ動作するとのこと。 このあたりのコードを探せばよさそうです。
ただ、一般的なマルウェアは難読化されていることが多いため、マルウェアのコードを展開するためのメモリを確保しているコード(HeapAllocやVirtualAllocなど)、および確保したメモリにコードをジャンプしているコード(call eaxなど)も探していきます。
解析結果
(1) インポート関数の確認
IDAでインポート関数を確認したところ、MACアドレスの取得に利用される関数(GetAdaptersInfo、GetIpAddrTable、GetAdaptersAddressesなど)が見当たりません。
そのため、マルウェアは難読化したコードをメモリに展開し、そこでMACアドレスを確認しているものと予想されます。
IDAでインポート関数にあるHeapAlloc、VirtualAllocの呼び出し元を逆参照(Ctrl+X)で探し、コードを確認してみましたが、確保したメモリにコードを展開し、そこにジャンプする処理が見当たりません。
CCleanerにマルウェアを埋め込まれた時には、この手順ですぐにマルウェアのコードを特定できたのですが、残念・・・(汗)
メモリに展開されたマルウェアのコードの先頭部分をオリジナルエントリーポイント(OEP)と呼びますが、この検体では、OEPにジャンプする処理も見つけにくくなっているようです。
(2) OllyDbgによる挙動の確認
IDAでコードを目視点検すれば、OEPジャンプ(の疑いがあるコード)を探せると思いますが時間がかかるので、OllyDbgでざっくりとした動作を確認してみます。
OllyDbgで検体を読み込みし、コードを流し読みしながらF8キーを連打し、ステップ実行で処理を進めたところ、不審なVirtualAlloc関数の呼び出しを発見できました。

不審なVirtualAlloc関数に続くコードを確認すると、確保したメモリにコードを展開しジャンプ(call EDX)しています。このジャンプ先がOEPに違いありません!(キリッ)

このあたりの処理をIDAで確認してみます。この検体では、GetModuleHandleでインスタンス(自分自身のメモリアドレス)を取得し、そこにVirtualAlloc関数へのオフセットを加算したアドレスをコールすることで関数の呼び出しの隠蔽を図っていました。

このコードの呼び出し元を逆参照で確認すると、ASUSの正規プログラムの終了処理の直前にマルウェアが混入していたようです。

(3) OllyDbgによるOEP以降の挙動の確認
マルウェアのOEP以降の処理をOllyDbgで確認していくと、MACアドレスを取得する処理がありました。
また、ハードコードされたMACアドレスのMD5ハッシュ値と思われるデータをメモリにコピーしている処理もあります。

続く処理で検証パソコンのMACアドレスのMD5を計算し、上記データと比較していることから、上記データは標的とするMACアドレスのMD5と考えて間違いなさそうです。

パソコンのMACアドレスが標的とするMACアドレスと一致した場合は、インターネットの攻撃者サーバにMACアドレスを送信するとともに、何かをダウンロードする処理が走りますが、解析した時点(2019年3月31日)ではURLにアクセスできませんでした。
[通信先URL] https[:]//asushotfix[.]com/log2.jpg?【MACアドレスのMD5】(画像をクリックするとスタックに積まれたURLサンプルを確認できます)

(4) まとめ
解析の結果、本検体はKasperskyの記事のとおりの挙動であることが確認できました。また、ハードコードされていた標的MACアドレスのMD5一覧も確認することができました。
ただし、Kasperskyの記事では、標的MACアドレスのMD5が600個ほどハードコードされているとのことですが、ここまでの解析では24個しか確認できませんでした。他の部分にMD5が埋め込まれているのかもしれません。
余談
がんばって英語っぽい発音で「シャドゥハマァ―」と言ってみたところ、ほぼ全員から「・・・? あ、シャドウハンマーのことね」と訂正されます。(しょぼーん)
以上です。