setodaNote

忘れる用のメモ書き for Cybersecurity

検体解析:2018-07-02-Zeus-Panda-Banker-caused-by-Emotet.exe (1)

動作概要

  • 確認中

#今回は Anti-Analysis を避けてみるところまで。

#(追記)続きは以下の記事に記載しています。 soji256.hatenablog.jp

ファイル概要

ファイル名:
2018-07-02-Zeus-Panda-Banker-caused-by-Emotet.exe

MD5    : 5adbfc0f8654bb458438b3f614ca9e37
SHA1   : 1a99cb666cccb67e4537856e083773576ec29e1d
SHA256 : 2527c9eb597bd85c4ca2e7a6550cc7480dbb3129dd3d6033e66e82b0988ee061
SSDEEP : 3072:aQ5wUD2hwA85rjT7LwuiEl8bBNpkLbNb9fkr+UnT2V3FPjDR08OUWd:aQX6hw9rf7Lwuhswdb9fkqUT63v08cd

TrID: 
 64.5% (.EXE) Win32 Executable MS Visual C++ (generic) (31206/45/13)
 13.6% (.DLL) Win32 Dynamic Link Library (generic) (6578/25/2)
  9.3% (.EXE) Win32 Executable (generic) (4508/7/1)
  4.1% (.EXE) OS/2 Executable (generic) (2029/13)
  4.1% (.EXE) Generic Win/DOS Executable (2002/3)

PEiD: 
 Microsoft Visual C++ 8 *

File Size                       : 223,744 Byte
File Permissions                : rw-rw-rw-
File Type                       : Win32 EXE
File Type Extension             : exe
MIME Type                       : application/octet-stream
Machine Type                    : Intel 386 or later, and compatibles
Time Stamp                      : 2018:07:02 16:54:19+09:00
PE Type                         : PE32
Linker Version                  : 10.0
Code Size                       : 100864
Initialized Data Size           : 136704
Uninitialized Data Size         : 0
Entry Point                     : 0x55ed
OS Version                      : 5.1
Image Version                   : 0.0
Subsystem Version               : 5.1
Subsystem                       : Windows GUI
File Version Number             : 11.0.0.0
Product Version Number          : 12.0.0.0
File Flags Mask                 : 0x003f
File Flags                      : (none)
File OS                         : Unknown (0x588891)
Object File Type                : VxD
File Subtype                    : 0
Language Code                   : Unknown (4678)
Character Set                   : Unknown (323B0)

挙動

レジストリの設定

なし

ファイルの作成

C:\Users\%USER%\AppData\Roaming\(※1)\Desktop (create shortcut).exe (※2)
C:\Users\%USER%\AppData\Local\Temp\updd44a2b07.bat

※1: Roaming配下のフォルダからひとつが選ばれる
※2: いくつかのファイル名からひとつが選ばれる?

通信先

なし

解析画像

単に検体の exe を起動するだけでは自身を削除してしまうだけなので、x64dbg でデバッグします。 今回の検体は 32bit で動作するので、x64dbg の x32dbg を起動します。

まず「CreateFileW」にブレークポイントを設定します。 [Ctrl+G]でダイアログを表示し「CreateFileW」と入力すると該当する箇所が表示されるので、 先頭とリターンの箇所にブレークポイントを設定しておきます。

次に[F9]を押下して EntryPoint まで実行します。
さらに[F9]を押下するとブレークポイントを設定した「CreateFileW」まで処理が進みます。 メモリ内容の表示から「C:\popupkiller.exe」の存在を確認している処理のようです。


ProcessMonitor で見ると以下のようになっていました。
ここからさらに[F9]で処理を進めると、以下のファイルについて存在チェックをしていると分かります。

  • C:\popupkiller.exe
  • C:\stimulator.ex
  • C:\TOOLS\execute.exe
  • \\.\NPF_NdisWanIp

ここで「\\.\NPF_NdisWanIp」の存在チェックの処理を確認すると、 処理後の LastError の値が 0x19 (ERROR SEEK) となっていることが分かります。


この処理をリターンする直前まで進めてから[F8]を押下すると以下の処理に遷移します。
処理を見ると GetLastError で直前のエラーを取得し、値を判定しているらしいことが分かります。 判定処理はざっくりとは以下の通りです。

  • 以下の場合は bl に 1 を代入する
    • eax が 0xFFFFFFFF (ファイルが存在している)の場合
    • LastError が 0x3 (フォルダが存在しない)の場合
    • LastError が 0x2 (ファイルが存在しない)の場合

ここでは詳細は割愛しますが、 bl に 1 が代入されてしまうと、自身を削除する処理に遷移する仕組みになっており、 ファイルが存在している、もしくは予見していないエラーが発生している場合は自身を終了させる仕組みのようです。

通常「\\ .\NPF_NdisWanIp」の確認では結果が「0x19 (ERROR SEEK) 」となり、 予見していないエラーとして処理を終了させてしまいます。 これも解析対策のようです。

そこで、この値をデバッガで書き換えて処理を継続させます。

画面の右側にある LastError をダブルクリックするとダイアログが表示され、値を編集することができます。 0x2 もしくは 0x3 とすれば問題なく処理が継続されそうなので 0x3 としてみました。


うまくいったようです。無事に bl に 1 を代入する処理をスキップしました。

ここで再び[Ctrl+G]からダイアログを表示し「CreateToolhelp32Snapshot」と入力し、 表示された箇所にブレークポイントを設定します。

この状態で[F9]を押下し処理を実行させると、監視しているプロセス名が確認できます。 ここでは Wireshark が監視されているようです。

同様に続けると以下の文字列が列挙されることが分かります。 いずれもプロセス名を監視しているということのようです。

  • immunity
  • processhacker
  • procexp
  • procmon
  • idaq
  • regshot
  • aut2exe
  • perl
  • python

なお、プロセス名は実行ファイル名を変更すれば変わるので、 Procmon.exe を p_mon.exe としておけば監視を逃れることができます。 これらの確認の後で、再びファイルの存在チェックが始まります。

確認されるのは以下のファイルです。

  • \\.\REGVXG→ 0x2 (ERROR_FILE_NOT_FOUND)
  • \\.\FILEVXG → 0x2 (ERROR_FILE_NOT_FOUND)
  • \\.\REGSYS → 0x2 (ERROR_FILE_NOT_FOUND)
  • \\.\FILEM → 0x2 (ERROR_FILE_NOT_FOUND)
  • \\.\TRW → 0x2 (ERROR_FILE_NOT_FOUND)

これが終わると、次に C:\Users\%USER%\AppData\Roaming のフォルダの走査が始まります。 これは後でファイルをドロップ(自身のコピーなど)するのに利用するフォルダを決めるための処理のようです。

ドロップ時のの処理を確認するには[Ctrl+G]からダイアログを表示し「WriteFile」と入力すればよいはずです。

なお、生成されるファイルのひとつである自身を消去するバッチファイルの中身は以下の通りです。

@echo off
:d
del /F /Q "C:\0\90_kentai\exe1\2018-07-02-Zeus-Panda-Banker-caused-by-Emotet.exe"
if exist "C:\0\90_kentai\exe1\2018-07-02-Zeus-Panda-Banker-caused-by-Emotet.exe" goto d
del /F "C:\Users\%USER%\AppData\Local\Temp\upd787e0584.bat"

結果、Roming 配下のどこかに自身をコピーしたものが生成されているのが確認できるはずです。 処理の直後に ProcessExplorer などから Roaming で動作しているプロセスを見つけるか、 デバッガや ProcessMonitor で WriteFile を拾うとどこに生成されたのかが分かると思います。

なお、手元の環境では特に永続化はされておらず、プロセスも一定時間後に終了しているようでした。 ここからの挙動など、続きの解析はまた別記事で記載します。

参考

今回の検体は、ほぼこちらのサイトの解析方法に即して解析をしています。

更新履歴

  • 2019/03/21 一部記載の削除。
  • 2020/03/19 続きの記事についての記載を追記。
  • 2023/01/10 一部リンク切れの旨を追記