返回论坛

深度剖析:Web3 面试陷阱 —— 伪装开源项目窃取加密资产

查找币 漏洞披露 安全研究 Web3安全 区块链安全

查找币安全研究院

钱包恢复评估 | 链上取证分析 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交完整私钥或助记词。

查看研究院 研究报告中心
## 背景概述 2025 年 8 月 9 日,查找币安全团队接到一位社区成员的紧急求助。该成员在参与某自称来自乌克兰的 Web3 团队首轮面试时,被要求**在本地克隆一个 GitHub 仓库**并运行。凭借敏锐的安全意识,该成员对仓库代码产生了怀疑,并第一时间联系了我们。 接到求助后,查找币安全团队立即对该 GitHub 开源项目 `EvaCodes-Community/UltraX` 进行了**全链路安全审计**。分析结果证实:这确实是一起精心设计的、以招聘为诱饵的定向攻击事件。经当事人同意,我们现将技术细节与防护建议公开,以警示广大 Web3 从业者。 > 相关安全公告详见:查找币安全团队 Twitter 公告 --- ## 技术分析:恶意代码的层层伪装 ### 1. 可疑的依赖变更 我们首先审计了项目仓库 `https://github.com/EvaCodes-Community/UltraX`。通过对比历史提交记录,发现最新版本引入了一个名为 `rtk-logger@1.11.5` 的第三方 NPM 包,替代了原本的 `redux-ace@1.0.3`。 关键发现: - **`redux-ace@1.0.3`** 因包含恶意代码,已被 NPM 官方安全团队**下架处理**。 - **`rtk-logger@1.11.5`** 是一个**全新发布**的 NPM 包,其 GitHub 源代码仓库已被攻击者**主动删除**。 这种“替换旧毒包、发布新毒包”的手法,意图规避已有安全检测机制。 ### 2. 解密链:从 LICENSE 文件到恶意载荷 我们下载并解包 `rtk-logger@1.11.5`,在 `/rtk-logger/lib/utils/smtp-connection` 目录下发现了核心恶意逻辑。 **攻击流程如下:** 1. **入口伪装**:`index.js` 导入模块后,调用 `fs.readFile` 读取项目根目录下的 `LICENSE` 文件(一个看似无害的文本文件)。 2. **动态解密**:将 `LICENSE` 内容传入 `parseLib()` 方法(位于 `parse.js`),该方法使用**硬编码的 AES-256-CBC 密钥和 IV**,将十六进制密文解密为 UTF-8 字符串。 3. **远程执行**:解密后的字符串被直接传入 `eval()` 函数执行——这是典型的**代码注入**攻击。 ### 3. 解混淆后的恶意功能全景 解密后的代码经过高度混淆,我们通过静态分析与动态调试还原了其真实逻辑。该恶意包实现了以下**六大核心窃密功能**: #### 3.1 浏览器扩展与钱包文件扫描 - 硬编码了 Chrome、Brave、Opera、Firefox 等主流浏览器的**扩展数据目录路径**。 - 针对特定加密货币钱包扩展 ID 进行精准扫描,包括 MetaMask、Phantom 等常见钱包。 - 一旦发现相关配置文件或密钥存储文件,立即调用 `Upload()` 函数上传至攻击者服务器。 #### 3.2 跨浏览器数据窃取 - **`uploadFiles()`**:遍历 Chrome、Brave、Opera 的配置文件目录,收集 Cookies、登录凭据、本地存储数据。 - **`uploadMozilla()`**:专门针对 Firefox 浏览器,窃取其 `logins.json`、`key4.db` 等敏感文件。 #### 3.3 桌面钱包攻击 - **`uploadEs()`**:专门针对 **Exodus 钱包**,窃取其配置文件、种子短语备份文件等。 #### 3.4 系统凭据窃取 - **`UpKeychain()`**:利用操作系统接口,窃取 **macOS Keychain** 中存储的密码、证书、浏览器登录数据。 #### 3.5 浏览器凭据与密钥提取 - **`UpUserData()`**:从浏览器中提取**高度敏感的登录凭据**以及用于解密其他本地数据的密钥。 #### 3.6 远程载荷下载与执行 - **`runP()`**:检查本地是否存在 `p.zi` 文件。若存在,将其重命名为 `p5.zip` 并解压;若不存在,则从远程服务器 `144[.]172[.]112[.]106` 下载恶意载荷,保存为 `p.zi` 后解压执行。这为攻击者提供了**持续的远程控制能力**。 ### 4. 数据外传机制 所有窃取的数据均通过 `Upload()` 函数上传至攻击者控制的服务器 `144[.]172[.]112[.]106`。函数实现中**未包含任何错误处理**,这意味着即使上传失败,也不会留下明显日志,增加了被发现的难度。 --- ## 攻击链条总结 ``` 面试邀请 → 要求克隆 GitHub 仓库 → 项目依赖恶意 NPM 包 → LICENSE 文件作为加密载荷 → AES-256 解密 → eval() 执行 → 多维度窃取浏览器/钱包/系统数据 → 上传至攻击者服务器 → (可选)下载并执行第二阶段载荷 ``` --- ## 关联威胁情报 经关联分析,以下 GitHub 仓库与本次攻击存在**高度关联性**(均包含或引用过恶意 NPM 包): - `https://github[.]com/kylengn/UltraX` - `https://github[.]com/taqveemahsan/UltraX` - `https://github[.]com/zinping/Pain_project` 已知恶意 NPM 包: - `rtk-logger`(所有版本) - `redux-ace`(已下架) --- ## 防护建议 针对此类“招聘式钓鱼”攻击,查找币安全团队建议: 1. **警惕面试中的代码执行要求**:正规技术面试通常不会要求候选人在**本地生产环境**运行未经验证的第三方项目。如遇此类要求,应保持高度警惕。 2. **沙箱环境隔离**:如需运行可疑项目,务必在**隔离的虚拟机**或**无敏感数据的独立机器**上执行,且断开网络连接。 3. **审查依赖变更**:在运行任何开源项目前,使用 `npm audit`、`snyk` 等工具检查依赖安全,并手动审查 `package.json` 中的依赖变更记录。 4. **监控异常网络连接**:使用防火墙或网络监控工具,留意是否有进程向**陌生 IP** 发起连接。本次攻击中,恶意服务器 IP 为 `144[.]172[.]112[.]106`。 5. **定期备份与密钥管理**:将加密钱包种子短语、私钥等敏感信息**离线存储**,切勿存储在浏览器或系统 Keychain 中。 --- ## 结语 本次事件再次证明,Web3 领域的攻击已从单纯的合约漏洞利用,演变为**高度社会工程化的定向渗透**。攻击者利用求职者对“Web3 团队”的信任,通过伪装成合法开源项目,在面试环节植入恶意代码,实现资产窃取。 查找币安全团队将持续追踪此类威胁,为社区提供及时的风险预警与技术分析。我们呼吁所有开发者与用户:**在 Web3 的世界里,保持怀疑是最高级别的安全策略。** --- *本文由查找币安全团队整理发布*
在论坛中查看和回复