你印象里的恶意软件是什么样子?一个EXE文件悄悄下载到电脑,然后防病毒软件开始报警。但安全公司Confiant最近曝光的手法,可能要让你重新认识一下“下载”这件事——连文件都不是从服务器直接给的,而是你的浏览器自己在内存里一块一块拼出来的。
2026年7月23日,Confiant详细公布了一项代号为SourTrade的恶意广告活动。这个活动早在2024年底就开始运作,一直冒充TradingView、Solana、Luno这类知名交易和加密货币服务平台。它在12个国家撒网,投放页面支持25种语言,直指零售交易者和币圈投资者。最厉害的地方在于,你如果不小心点进一个恶意广告,它会先检查你是不是真的“买家”——页面会悄悄采集指纹,如果发现你可能是安全研究员或者机器人,就只给一个空白页;如果判断你是一个“有价值的”目标,立刻甩出一套以假乱真的克隆服务页面,连界面细节都模仿到位。普通用户根本分不清这是不是真正的交易平台。
Confiant在报告中给出的防护建议倒很简单:装交易软件、钱包软件,请老老实实去厂家的官方站点下载,别信广告。因为这次的攻击链,根本不需要浏览器漏洞,也不移除Windows特有的“网络标记”(Mark of the Web,简称MotW)。整个交付过程绕得非常鸡贼。
第一步,页面一打开就开始准备“产线”,根本不等待用户点击下载按钮。它在页面作用域内注册一个ServiceWorker(路径/sw.js),接着从页面内嵌的JavaScript里悄悄构建一个SharedWorker。由于SharedWorker的源码直接来自页面自身,网络日志里根本看不到一个单独的worker脚本请求,隐蔽性直接拉满。
第二步,这个SharedWorker先向网站的/config路径发请求,服务器返回一个“组装配方”——包含一个模板、一个第二阶段的运行时URL,以及一些会话专有的随机值(随机种子和长度)。根据发布的分析样本,这个第二阶段的域名是purelogicbox[.]org。浏览器收到之后,会去那个域名下载并解压一个干净的、完全合法的Bun运行时。
了解Bun的人都知道,它是一个基于JavaScriptCore引擎的JS/TS运行时,官方本身就支持把应用程序或字节码编译成独立的Windows可执行文件。攻击者正是看上了这个合法功能。“工厂”的设备全是正规零件。
第三步,真正的诡计在/config返回的配置里。这里面还塞了Base64编码的二进制数据块,分别提供了Windows PE文件头、区段表以及一个名为.bun的区段。.bun区段里装着针对app.js的恶意JavaScriptCore字节码。等于说,可执行文件的骨架和恶意逻辑都以“原材料”的形式混合在了配置文件里,而不需要一个完整的恶意EXE摆在某个URL上等着被下载。
组装过程也相当精巧。SharedWorker使用AES计数器模式(AES-CTR)先生成一大段伪随机字节流。接着,它按照模板里的“字节复制食谱”,从三个地方按指定区间取数据:一部分从干净的Bun运行时里提取,一部分从刚才生成的随机字节流里切,一部分从攻击者控制的PE材料和字节码里取。这三股来源一拼接,就在浏览器内存里变出了一个全新的、功能完整的EXE文件。
而且这招还能做到每次都不一样。因为每次/config请求都可以更换随机种子和大小,导致拼出来的文件哈希千变万化,但恶意代码的核心逻辑却保持不变。Confiant威胁情报团队的Michael Steele给这个机制下了一个很精妙的评价:“No finished malware ever exists on the network.”——没有任何完整的恶意软件曾经存在于网络上。严格来说,没有一个完整的二进制文件在某个URL上出现过,但PE结构和字节码却以Base64形式老老实实地躺在/config的响应里。
组装完成后,页面会把这个可执行文件以可读流的形式传给ServiceWorker。同一个页面上还有一个隐藏的iframe,让它导航到一个与页面同源的URL。ServiceWorker拦截这个导航请求后,直接把生成的字节流作为响应返回,并附加Content-Disposition attachment头。这样一来,浏览器就会提示下载,并且生成的MotW记录会标注这个文件的来源是落地页自身,而不是那个提供Bun运行时库的purelogicbox[.]org域名。MotW标记仍然存在,但下载来源看着却像是一个合法的网站,很具有欺骗性。
Confiant还指出,SourTrade的手法是在不断演化的。在2026年4月30日之前,他们追踪到的攻击活动就与现在的版本有所差别,但整体思路一脉相承:用浏览器现成的API和合法的开源运行时,把恶意逻辑拆成零件送到终端,就地拼装执行。这比传统的一次性全文件远程托管要难查得多。安全团队想靠网络流量特征来抓黑,就变得异常困难,因为流量里要么是正经的Bun运行时下载,要么是看着人畜无害的配置JSON,混在正常请求里毫无违和感。
热门跟贴