样本来自于微步云沙箱公开提交记录 (MD5: 4c42136da4df69ccbc13b50519fef746)

文件名称具有迷惑性,让人第一想到东南亚,喜欢看热闹的若不小心双击就会中招。

样本是一个 32 位的 C++ GUI 程序,编译时间为 3 月 9 日晚 10 点,挺新的一个样本

反分析操作
样本有反虚拟机和反调试两类反分析操作。
反虚拟机
通过 COM 操作 WMI,执行 WQL 语句查询相关数据来进行反虚拟机操作

检测物理内存插槽数
SELECT MaxCapacity, MemoryDevices FROM Win32_PhysicalMemoryArray

检测 BIOS 制造商
SELECT Manufacturer, SerialNumber FROM Win32_BIOS

Manufacturer 值是否为
- VMware
- VirtualBox
- QEMU
- Xen
- innotek (VirtualBox 创造者)
SerialNumber 值是否包含 VMware 和 VirtualBox

检测计算机型号名称
SELECT Model FROM Win32_ComputerSystem
Model 的值是否为以下
- VMware
- VirtualBox
- QEMU
- KVM
- Microsoft Virtual

反调试
通过调用与时间相关的 API 来反调试操作

释放文件
样本在释放文件前后会进行一次反调试

一共释放 3 个文件
- kwpswnsserver.exe (白文件)
- ra.log (加密的 Payload)
- Microsoft.WindowsAppRuntime.Bootstrap.dll (黑 DLL 文件)
3 个文件中一个为白文件,一个为加密的 Payload,最后一个为黑 DLL 文件,释放的路径为 %APPDATA% 下

最终通过 COM 操作添加计划任务

创建一个名为 WpsTaskMachineCoreTask 计划任务,当用户登录时触发,执行 kwpswnsserver.exe

kwpswnserver.exe
kwpswnserver.exe 是一个与 WPS 有关的程序,带有效签名,签名正常

查看导入表,会调用 Microsoft.WindowsAppRuntime.Bootstrap.dll 中的 2 个导出函数

Microsoft…Bootstrap.dll
Microsoft.WindowsAppRuntime.Bootstrap.dll 是一个 32 位的 DLL 文件,编译时间为 3 月 9 日上午 11 点

导出函数虽有 3 个,但实为同一个

存在 PDB 路径

C:\Users\12521\source\repos\Dll1\Release\Dll1.pdb
通过 PEB,函数哈希获取相关函数调用地址

读取 ra.log 内容到分配后的内存中

然后再进行对其解密 (RC4),3ch0bachky 为密钥

将解密后的内容移动到新分配后内存当中

最终通过一种特殊的方式去执行此段解密后的 Payload

将 SetupCommitFileQueueW 中的回调函数设置为解密后 Payload 的首地址,这样在执行文件队列操作时会去执行回调函数,通过这样达到执行 Payload 目的。
解密后的 Payload
解密后的 Payload 大小为 200 多 KB,按常理来讲不会设计这么大,在查看内容时发现里面嵌入了一个 PE 文件

前半部分为 shellcode,后半部分为 PE 文件,而且是一个 32 位 DLL 文件

编译时间为 3 月 5 日 17 点左右,提取的 shellcode 只有 3 KB左右,采用的方式为反射加载,执行此 DLL 中的 run 导出函数。
反射加载 DLL
DLL run 导出函数中只开启一个线程

在线程函数中可明显看到 C2 地址 (156[.]254.21.227:8888)

大概全部看了下,基本和泄露的 WinOS (银狐) 客户端生成 DLL 反编译后的结果大差不差,相似度高,所以将此样本归类为银狐合理,关于此 DLL 的分析后面不再展开。
结论
样本利用白加黑的手段,黑 DLL 中反射加载另一 DLL,中规中矩,唯一点是通过设置 SetupCommitFileQueueW 的回调函数地址参数来执行 Payload 的方式,作为防御方,如何检测这类威胁
- 监控 VirtualAlloc、VirtualProtect、WriteProcessMemory,对分配后写入这块内存的容进行扫描检测
- 对于此类有回调函数参数的 API 进行 HOOK,检测这个地址是否是 VirtualAlloc 分配的,正常情况下是编译时就确定了
- 若要进一步检测,检测回调函数地址处前 50 或 100 或更多 个字节,看是否包含通过 PEB 查找 API 地址的特殊指令 (opcode)
IoCs
MD5:
- 4c42136da4df69ccbc13b50519fef746 (小黑屋残忍殴打虐待中国人视频曝光.exe)
- 3449d5d0f10ff1d619c5043380d6bd50 (kwpswnsserver.exe)
- 3e8c81e2defe82e55d758ca6fa742c0e (Microsoft.WindowsAppRuntime.Bootstrap.dll)
- df7b2f20d73b492f2714dba7da1b860c (ra.log)
C2:
- 156[.]254.21.227:8888
Others:
- C:\Users\12521\source\repos\Dll1\Release\Dll1.pdb