前言
2026 年 8 月 27 日,安全研究员 Himanshu Anand 发布了一份威胁情报,揭示了一条以伪造学术简历为饵的链式攻击路径:一个伪装成简历的 ZIP/EXE,一旦被双击,就会在后台依次加载 Go loader、SNOWLIGHT 与 VShell RAT,全程无文件落地,最终取得交互式远程控制。本文基于其 ANY.RUN 沙箱捕获与静态解码结果,复盘技术事实与影响范围。先给结论:这是一次定向鱼叉攻击,受害者画像中置信指向大陆学术圈,攻击者归属未知,目前没有持久化与数据泄密的实锤证据。它不是大规模蠕虫,也远未到 APT 定案的程度。
一、攻击事实
初始向量是一个 ZIP 压缩包,内部放了一个与压缩包同名的 .exe 文件。Windows 默认隐藏扩展名,再加上图标被仿造成文档样式,收件人双击“简历”时,实际运行的是一个 PE 可执行文件。

运行后,它会从远程拉取一份真实的 DOCX 诱饵文档,存到 C:\Windows\Temp\ 目录并调用 Word 打开,让受害者以为文件一切正常,而恶意加载在后台同步进行。
完整载荷链为:Fake Resume EXE 触发 Stage1 Go loader,Stage1 拉起 Stage2 SNOWLIGHT shellcode,Stage2 接收并跳入 Stage3 VShell RAT,全程 fileless。
这里需要把 VShell 说清楚。它是一种公开可得的 Go 语言跨平台远程访问木马框架,SNOWLIGHT 是其默认 stager。本例解码出来的是一个 32 位 Go PE,.data 段高熵加密,符号也被混淆处理。公开文档与控制台记录显示,它具备交互式终端与任意命令执行、文件浏览与上传下载、屏幕截图与实时监控、主机与网络侦察、反向代理隧道,以及 TCP/WebSocket/KCP 等多传输协议支持。
把 VShell 当作“某个神秘 APT 专属武器”是一种误读。它是商品化甚至已经泄露的货架级 RAT,任何拿到面板的 operator 都能生成同样的 stager。
二、攻击链拆解
2.1 Stage1:Go loader 的反沙箱与配置
样本是 32 位 Go 1.22.0 Windows 二进制,带一枚无效的金山签名(HashMismatch)。它先执行反沙箱逻辑:检查路径中是否包含 C:\Users\Administrator\Desktop 且文件名包含 2016,满足条件就退出,主要针对微步类沙箱环境;CPU 逻辑核数小于 4 也会直接退出;还会借助 kernel32!Beep(30000Hz,10s) 测量真实时间,加速型沙箱会被识破。
配置信息是加密存储的,解码流程为 Base32hex → AES-CBC(密钥 YtWzxwZimsZoeMen) → 按位 NOT → Base64,最终解出两个 URL 和落盘路径。内存执行依靠 Activeds.dll!AllocADsMem 分配可执行内存,再起线程运行 shellcode。
反沙箱加上多层编码,是商品化 loader 的标配。静态分析直接看字符串基本无解,必须解码配置或让沙箱真实运行。
2.2 Stage2:SNOWLIGHT 跨界到 Windows
从 :50813/EasyConnectUpdata_Log.txt 下载约 6KB 的响应内容,解码成 1454 字节 x86 shellcode。它创建 %TEMP%\log_de.log 作为 kill-switch 标记,文件存在就退出;随后连接 38.207.178[.]192:50812;先发送 40 字节架构/检查包(开头 w32 加端口与 IP);再以 0x99 循环异或接收约 4.65MB 数据后跳转执行。全程没有服务器认证,也没有签名校验,属于 VShell 面板生成的通用 stager。

kill-switch 与无认证设计说明它是通用投递件,不绑定特定 operator。这也解释了为什么多个团伙能共用同一套工具。
2.3 Stage3:VShell 的 C2 与行为
C2 通信使用 AES-256-GCM 加密,密钥取自 MD5(salt) 的十六进制串,帧结构为 4 字节小端长度 + 12 字节 nonce + 密文 + 16 字节 tag。沙箱中观察到注册、MD5 挑战、conf 通道以及心跳等约 198 帧健康流量,但没有看到人工下发的指令。

只看到心跳而没看到操作指令,说明捕获到的是“已上线未行动”的窗口期。据此不能推断攻击目的已经达成。
三、影响范围核实
这一节是全文的重心,逐项给出证据,避免被标题带偏成 APT 定案或全网恐慌。
3.1 直接受影响
直接中招的是打开恶意 ZIP 内伪装 EXE 的 Windows 用户。风险最高的一类,是通过学术邮箱收到这份“简历附件”的高校教师或课题组负责人。诱饵文档使用简体中文、WPS 区域码 2052,通篇是“应届毕业生”“个人简历”“课题组”“贵课题组”等大陆学术用语,研究意向集中在 AI 电网故障诊断、智能电气系统、新能源变流器控制,明显是一份套磁导师的模板。
3.2 潜在扩散
一旦单台工作站失陷,VShell 的反向代理隧道可以深入内网,进行横向移动与凭据收集,波及整个研究室或院校网络。这是潜在面,具体取决于失陷主机的网络位置与权限。
3.3 非断言项
作者明确区分了三件事。第一,北京理工大学仅为诱饵声称的“申请人母校”,不代表该校是受害机构。第二,没有数据证明国防研究项目遭到定向攻击。第三,没有证据显示已经发生数据泄密。把“用了 BIT 名义”直接读成“打了中国国防”,属于过度推断。
3.4 无文件与持久化
本例全程 fileless,仅诱饵 DOCX 与 kill-switch 标记文件落到磁盘。沙箱里 Windows Defender 阻断了重建的 PE,没有注册表、服务层面的持久化实锤。
3.5 地域与行业语境
综合 lure 语言、WPS 简中环境、“国防七子”名义带来的权威感包装,以及研究意向集中在电力系统与可再生能源控制,中置信结论指向大陆学术科研网络。但这是受害者画像,不是攻击者画像。
四、检测与狩猎
网络层可以先拦。已知的 C2 基础设施是 38.207.178[.]192,涉及 50812(SNOWLIGHT/VShell)、50813(HTTP 暂存与诱饵)、40010(历史 VShell 中置信)三个端口,边界与出向规则直接阻断即可。SNOWLIGHT 的 40 字节检查包带有 w32 标签,VShell 帧带 12 字节 nonce,都可以写成告警特征。
终端侧需要盯住几个点:搜索 %TEMP%\log_de.log 这个 kill-switch 标记;观察“简历名 EXE 启动 Word 又拉起 cmd”的父子进程关系;抓取 AllocADsMem → VirtualProtect → CreateThread 这条内存执行链;留意先收大段 TCP 再分配数十 MB 可执行内存的行为;还有带无效金山证书的 Go 二进制,以及出向流量里的 w32/w64/... 标签。
邮件网关侧,应对 ZIP 内 EXE、仿文档文件名,以及借“国防七子”等名义的套磁附件提高审查等级,必要时默认拦截可执行附件。
五、归因与防御视角
归因上作者没有给出定论,最贴切的标签是“使用面向大陆学术 lure、商品化 SNOWLIGHT+VShell 生态的未知 actor”。SNOWLIGHT 历史上由 Mandiant 命名并与 UNC5174 相关,但到 2026 年 VShell 面板已经商品化甚至泄露,Earth Lamia、UAT-8302、UNC6586 都用过同一套工具,却与本例 IOC 没有重合。工具共性不能当作同一团伙的证据。
防御上要三道防线一起上。其一,学术邮箱严格过滤 ZIP/EXE,默认显示扩展名,禁用双击来源不明的 EXE。其二,终端 EDR 覆盖内存执行与无文件行为,不能只看落盘 PE。其三,网络侧阻断已知 C2,落地零信任分段以限制横向移动。人员培训同样关键,要让师生识别“仿文档 EXE”和套磁钓鱼。
商品化 RAT 叠加本土化社工,是低成本高回报的组合。治本之道在“人 + 网关 + EDR”,而不是等归因定案再行动。
结束语
本文核实后的结论很明确:这是一起以伪造简历为饵、无文件投递 VShell RAT 的定向鱼叉攻击,受害者画像中置信指向大陆学术圈,攻击者归属未知,无持久化与泄密实锤。高校与科研单位不必全网恐慌,应按照 3.1 到 3.3 的梳理,把资产自查落在学术邮箱网关、终端 EDR 与网络 IOC 三个位置。VShell/SNOWLIGHT 生态的商品化,让“无文件 RAT + 本土化社工”成为常态,唯有把社工防线与无文件检测能力建起来,才能从根上收口。后续持续跟踪此类威胁,也可在 云栈社区 安全板块交流讨论。
IOC 一览
Original archive SHA-256
c25d4412f7f93e7de5b2aaf41747175d94cffd983ca20efbd0efcdd718b58c4d
Go loader SHA-256
81c51138d5527ca7dcc258171eb36659c479f66c86a8947b6340d040b3860a30
Go loader MD5
a7cc7e3cdd2f0f9210044911a483fa5d
Encrypted HTTP response SHA-256
f6d4da5afc89bf9e536a9002c4d256c696df2389d77279f4c5daf6979557e74e
SNOWLIGHT shellcode SHA-256
0524619d2471d77aba4b7993f5ffbaa4b8be6d2c0d91e63a02943851dc4b6404
XOR-encoded VShell stream SHA-256
ed2eaa6ef3eda95383b6efc35b88acbca742ad7bd118931f74727a3139ff7e97
Decoded VShell SHA-256
c666ac4f1a1b8df7ccfe8b19705279acd8b7eb7a4d0b3802bb3465064883ab25
DOCX decoy SHA-256
de3f56d0d5b71f2a1a1905f0b01b84fbab237e9d4c5179a05b127d806823f83c
C2 / staging IP
38.207.178[.]192
HTTP staging
38.207.178[.]192:50813
SNOWLIGHT TCP
38.207.178[.]192:50812
Loader AES key
YtWzxwZimsZoeMen
SNOWLIGHT XOR key
0x99
Kill-switch marker
%TEMP%\log_de.log