通过 WhatsApp 投递的 Winos 4.0 / ValleyRAT 分阶段加载器:DLL 侧加载、BYOVD 终止 Defender(CVE-2026-36425)、基于 TCP 443 的自定义 C2 协议,以及此前未报告的 C2 基础设施。
作者: Mac Awad,网络安全专业学生(四级证书,昆士兰 TAFE)· LinkedIn 日期: 2026 年 10 月 30 日至 11 月 1 日(时间为 AEST,UTC+10) 状态: 已报告至 ASD 的 ACSC(ReportCyber)、ThreatFox 和域名注册商
一个从被劫持的 WhatsApp 账户发送的“付款对账单”ZIP 文件,最终被证实是一个 Winos 4.0 / ValleyRAT 投放器。在隔离的实验环境中,它利用一个已签名的易受攻击驱动程序杀死了 Microsoft Defender,随后通过 TCP 443 上的自定义二进制协议向一个此前未被报告的 C2 域名发送信标。被动 OSINT 将 C2 追溯至香港的一批一次性 Windows 服务器。
ardrv.sys(CVE-2026-36425)被用于杀死 Microsoft Defenderwwwapko[.]top → 156.234.7[.]71,原始 TCP/443(非 TLS),16 字节 hello,约每 67 秒发送一次信标156.234.7[.]170 上,很可能是在 IP 变更前的同一台服务器flowchart TD
A[WhatsApp lure<br/>from hijacked contact] --> B[ZIP]
B --> C[VHD mounted as drive<br/>no MOTW warning]
C --> D[Signed SETTINGM.exe<br/>sideloads hidden Is.Dll]
D --> E[Stage in Users\Public\Libraries<br/>relaunch via rundll32]
E --> F[UAC bypass]
F --> G[Drop ardrv.sys<br/>kill Defender]
G --> H[Beacon to wwwapko.top<br/>TCP 443, every ~67 s]
H --> I[Next stage: Winos 4.0<br/>online module, not received]

该消息使用了典型的发票欺诈话术:紧迫感(“解决这笔付款差额”)、权威性(“把它转发给你的财务负责人”)以及平台引导(“在电脑上打开它”,因为该载荷只能在 Windows 上运行)。账号所有者在 47 分钟后发送了一条垃圾信息警告,证实该账号已被劫持。

| 文件 | 大小 | 备注 |
|---|---|---|
E-statement Proforma Invoice (2).zip | 2.9 MB | 封装层 |
10301023482034.vhd | 6.3 MB | 动态 VHD,exFAT,卷标为“Business”,在 UTC+8 时钟下于 10 月 30 日 02:24 UTC 构建 |
I1030102341.exe | 360 KB | 正版 Menksoft SETTINGM.exe(2017),签名有效;从 Is.dll 导入 3 个函数 |
Is.Dll | 4.28 MB | 恶意文件,隐藏 + 系统属性,编译于 2026 年 10 月 29 日 17:03 UTC,导出名 MSEdgeWebView.dll |

Is.Dll 的关键发现:
vcruntime140_1_app,用于通过 rundll32 重新启动自身SETTINGSDATABASE、SYNCENGINEDATABASE、UXDATABASE)是加密载荷curl -L -s -o、bitsadmin /transfer、certutil -urlcache、msiexec /qn3DC0C2FE338F567442B73E4B644B4F1A解密器(静态分析,从不执行样本):
import re, sys
key = b'3DC0C2FE338F567442B73E4B644B4F1A'
def rc4(k, d):
S = list(range(256)); j = 0
for i in range(256):
j = (j + S[i] + k[i % len(k)]) % 256; S[i], S[j] = S[j], S[i]
i = j = 0; out = bytearray()
for b in d:
i = (i + 1) % 256; j = (j + S[i]) % 256; S[i], S[j] = S[j], S[i]
out.append(b ^ S[(S[i] + S[j]) % 256])
return bytes(out)
data = open(sys.argv[1], 'rb').read()
for m in re.finditer(rb'(?:[0-9A-F]\x00){16,}', data):
h = m.group().decode('utf-16le')
if len(h) % 2: continue
pt = rc4(key, bytes.fromhex(h))
if sum(32 <= c < 127 for c in pt) > 0.85 * len(pt):
print(pt.decode()[:150])
解密后的字符串显示:
\\.\HWAudioX64、\\.\ardrv、\\.\AlinubxHKCU\Software\Classes\ms-settings\shell\open\command + ComputerDefaults.exe,以及 CMSTPLUA 提权 moniker {3E5FC7F9-9A51-4367-9063-A120244FBEC7}C:\Users\Public\Libraries\<random>\<random>环境设置: Windows 11 虚拟机(Defender 开启,Sysinternals Procmon、Process Explorer、Autoruns)和一台 Kali 虚拟机作为伪造互联网(INetSim、一个小型伪造 DNS 脚本、tcpdump),位于无真实互联网连接的私有 VMware LAN 网段。每次运行前恢复干净快照。
| 时间 | 观察结果 |
|---|---|
| 21:40 | VHD 挂载为“Business”;仅 EXE 可见;未出现窗口 |
| 21:40 | 工具包被复制到 C:\Users\Public\Libraries 下 3 个隐藏的垃圾命名文件夹中,宿主 EXE 被重命名为 OneDrive 文件名(SafeDelete.db-wal.exe、telemetry-dll-ramp-value.exe、SyncEngineDatabase.db.exe) |
| 21:40 | 重新启动:rundll32.exe "...\IS.dll",vcruntime140_1_app |
| 21:40:25 | 释放一个 17,744 字节的驱动并创建内核服务 ardrv(OPSWAT,签名已验证) |
| 21:40 | Defender 被终止:MsMpEng 消失,实时保护关闭,未记录任何检测 |
| 21:40:39 | 首次对 wwwapko[.]top 进行 DNS 查询;不到一小时内共 1,080 次查询 |



释放的驱动的 SHA-256 7504887e... 与 OPSWAT AppRemover ardrv.sys,CVE-2026-36425 匹配:其 IOCTL 0x2420031 可从内核模式终止任意进程 ID。未创建 Run 键或计划任务,因此持久化将来自下一阶段。
在可用的伪造 DNS 下,恶意软件解析了该域名并连接到 TCP 443,但从未启动 TLS。它改为发送了一个 16 字节的二进制 hello:
10 00 00 00 2c 4b 0a 00 5d 8e 13 33 fb 00 66 62
| 字节 | 含义 |
|---|---|
| 0-3 | 长度 = 16(小端序),常量 |
| 4-7 | Windows 运行时间,单位毫秒(674,604 = 11.2 分钟);每个数据包之间按实际经过时间精确递增 |
| 8-12 | 每个数据包随机生成 |
| 13 | 始终为 00 |
| 14-15 | 校验字节;字节 15 = 字节 14 XOR 0x04 |
重试模式: 每 2.5 秒以突发方式建立新的 TCP 连接,大约每 67 秒进行一次全新的 DNS 查询。这与 Winos 4.0 的 stager 向其 C2 请求核心“在线模块”的行为相符。真实服务器被刻意设置为从未被联系。
我将 Is.Dll 加载到 Ghidra 12.1.4(仅静态分析)中,并将实验环境中的行为追溯到代码。Ghidra 恢复了 23,215 个函数,其中大部分是静态链接的 MFC 和 C++ 运行时。恶意逻辑是 .text 段中一个小的“工具箱”,由一个经过重度混淆的加壳节调用。