返回文章库

仿冒 Qwen 仓库投毒分析:487KB“大模型”背后的 StealC 窃密链

查找币 漏洞披露 安全研究 Web3安全 区块链安全
仿冒 Qwen 仓库投毒分析:487KB“大模型”背后的 StealC 窃密链

查找币安全研究院

链上取证分析 | Web3 风险核验 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交敏感凭证或非公开材料。

查看研究院 研究报告中心
> 下载开源大模型时,你担心的是权重是否真实、能否正常运行。而这一次,真正的问题藏在别处——一个标称 27B 参数的仓库,交到你手里的只有 487 KB。里面装的不是模型权重,而是窃密木马。 ## 事件概述 2026 年 8 月 20 日,查找币监控系统监测到 GitHub 仓库 `unburdened-jackinthebox365/qwen38-uncensored` 向其 `assets/` 目录提交了一个名为 `uncensored_qwen_v2.6.zip` 的文件,大小仅为 **487,153 字节**。 该仓库的伪装几乎无懈可击:首页宣称提供 Qwen 3.8 27B 本地量化权重,README 中强调“完全离线运行、无遥测、数据不离开本机”——每一句话都精准命中本地模型用户的核心关切。四天后(8 月 24 日),README 再次更新,下载按钮、正文链接以及原本指向 Ollama 与 LM Studio 官网的外部链接,全部被替换为指向同一 ZIP 文件的 raw 地址。 到这里,破绽已经相当明显。 ## 核心异常:重量与体积的严重偏离 一个 27B 参数的 Q4_K_M 量化模型,落盘体积通常超过 **16 GB**。仓库自带的 `bin/install.cjs` 中打印的提示也写着约 16.8 GB。然而,攻击者实际交付的资产仅为 487 KB——解压后只有三个文件: - `Application.cmd` - `util.exe` - `cert.txt` **没有任何 GGUF 权重文件。** 经分析确认,这是一个借 Qwen 名义分发恶意文件的仿冒仓库。Qwen 官方项目本身并未被入侵。仓库中的 Node.js 安装脚本表面上实现了“写 Modelfile → 调用 ollama create”的常规流程,主要代码维持着正常项目的外观,恶意 ZIP 则作为 `assets/` 中的下载资产提交。这意味着,仅检查常规源码而不解包下载资产,极有可能遗漏这条攻击入口。 > 本次分析以静态证据为主,未运行任何样本。C2 请求使用模拟主机数据复现,仅读取响应并下载载荷,未执行下载内容,也未访问最终上传端点。文中对行为的描述均指代码中存在相应实现或调用路径,不代表这些操作已在真实主机上发生。 ## 487 KB 下载包里的三个文件 ### Application.cmd:一条命令完成交接 `Application.cmd` 的全部内容仅有一条命令(含换行符共 25 字节): ```cmd start util.exe cert.txt ``` 它没有解压模型,也没有调用 Ollama,只是让同目录下的 `util.exe` 去读取一个文本文件。控制权由此转交给 `cert.txt` 里的 Lua 脚本。 ### util.exe:改名后的 LuaJIT 解释器 `util.exe` 大小为 **759,808 字节**,是改名后的 LuaJIT 2.1 解释器。LuaJIT 本身是一个被大量正规软件使用的 Lua 运行时。PE 文件中残留的 PDB 路径 `D:\a\defold\...\luajit.pdb` 指向 Defold 游戏引擎的打包产物。 静态分析未在 `util.exe` 中发现不依赖脚本的恶意行为——它只是一个执行同目录混淆 Lua 脚本的载体。 ### cert.txt:182KB 的单行混淆脚本 `cert.txt` 名字看似证书,实则为 **182,116 字节的单行 Lua** 脚本。整份脚本没有一个换行,字符串全部拆解为十进制转义和查表调用,直接阅读只能看到一片数字和短变量名。以下是文件开头的一小段(为方便阅读按语句折行,末尾以省略号截断): ```lua local xI=function(k)local B=""for G=1,#k/2,1do B=B..k[#k/2+k[G]]endreturn B end local ZI=function(k)local B,G=k[#k],""for Q=1,#B,1do G=G..B[k[Q]]endreturn G end local AI={"\116\083\112\088";xI({5,4,3;1,2;"\083\120\080","\081\049\051\061";… ``` 前两个函数负责按索引取字符和重排顺序,第三行开始是被打散的字符串表。脚本中的数百个明文字符串均以这种形式存放,运行时才拼回原样。 **风险入口并不在所谓的模型程序上。** 这个压缩包提供的是一个通用解释器加一份文本,全部恶意逻辑都落在 `cert.txt` 中。 ## C2 响应补全了后续投放链 离线解混淆后,`cert.txt` 的结构变得清晰。它维护了一个 C2 配置,并在受感染主机上执行以下行为链: - **主机信息收集**:通过模拟主机数据复现 C2 请求,确认脚本会收集系统信息并回传。 - **C2 心跳与载荷下载**:脚本向 C2 服务器发起请求,接收响应并下载后续载荷。 - **StealC 窃密模块**:下载的载荷经比对确认与 StealC 窃密木马相关。StealC 是当前活跃的信息窃取恶意软件家族,主要针对浏览器存储的凭据、Cookie 和加密钱包数据。 ## 威胁分析:仿冒仓库为何防不胜防 本次攻击之所以值得警惕,在于其**多层伪装策略**: 1. **品牌仿冒**:借 Qwen 这一高知名度开源项目的名义,降低目标戒心。 2. **功能合理**:仓库主体代码保持正常项目外观,安装流程看似合规。 3. **恶意载荷分离**:恶意代码不在源码中,而是作为独立下载资产存在——常规源码审计难以发现。 4. **双重混淆**:Lua 脚本全量混淆(无换行 + 字符串查表),大幅提高静态分析门槛。 5. **利用信任链**:README 中强调“离线运行、无遥测”,恰恰利用了隐私敏感用户的心理。 ## 防护建议 针对此类仿冒仓库投毒攻击,查找币安全团队建议: - **核验仓库来源**:下载开源模型前,确认仓库是否为官方组织账号,检查仓库历史、Star 真实性及 Issue 反馈。 - **警惕体积异常**:量化模型有明确的体积预期,若下载文件大小与预期严重不符(如 27B 模型仅 487 KB),应立即停止执行。 - **审查下载资产**:不要仅检查仓库源码,对 `assets/`、`releases/` 等下载资产同样需要解包审查。 - **隔离运行环境**:对来源不明的模型文件,应在无网络连接的虚拟机或沙箱中先行验证。 - **部署威胁监控**:建议接入查找币监控系统等威胁情报平台,实时检测恶意域名与 C2 通信。 ## IOC(入侵指标) 本次事件提取到的 IOC 已接入查找币监控系统威胁检测引擎。相关恶意仓库、下载资产及 C2 地址的完整列表,可通过查找币监控系统查询。 --- **查找币监控系统** 是由查找币自主研发的 Web3 威胁情报与动态安全监控系统,集成安全监控与情报聚合能力,为用户提供实时的风险预警与资产守护。本次事件中,查找币监控系统对诱饵仓库、下载资产及后续载荷完成静态分析,使用模拟主机信息复现 C2 请求并保存响应与下载证据,还原出多阶段投放链并提取网络与文件 IOC。8 月 26 日复检了 C2 存活与分发设施轮换情况,另对分布在 23 个仓库中的 29 份同类 ZIP 做了离线行为对比。 **本文由查找币安全团队整理发布。**
在文章库中查看和回复