供应链攻击:恶意软件包与被入侵的钱包库
加密货币供应链攻击会把恶意代码藏进你信任的软件里。了解被入侵的软件包和钱包库如何运作,以及如何保护自己。
加密货币供应链攻击是指犯罪分子入侵钱包、应用或网站所依赖的软件,例如开源软件包、浏览器扩展或更新服务器,让恶意代码通过受信任的渠道到达用户手中。这些代码通常会替换收款地址、向网站注入钱包盗取程序(wallet drainer)或窃取助记词,而受害者往往没有做错任何事,只是使用了一款他们本就信任的产品。
这类攻击关系到加密货币领域的每个人,而不只是开发者。现代钱包和去中心化应用由数百个第三方组件构建而成,一个组件被入侵就可能同时影响许多产品。本指南将解释这些攻击如何运作、需要留意什么,以及作为用户或开发者如何降低风险。
供应链攻击如何运作
加密货币应用的“供应链”是指构成它的一切:代码库、构建工具、托管服务商、内容分发网络和更新服务器。攻击通常遵循以下步骤:
- 1获取访问权限。 攻击者对热门代码库的维护者进行钓鱼、收购被弃用的软件包、猜出弱密码或利用构建服务器的漏洞。
- 2植入恶意代码。 攻击者发布包含隐藏代码的新版本,这些代码通常经过混淆,并且只在特定条件下才会激活,例如检测到加密货币钱包时。
- 3通过更新传播。 自动拉取该库最新版本的应用会在下一次构建中包含恶意代码;对于网站来说,则是在脚本加载的那一刻。
- 4实施盗窃。 代码可能会替换复制到剪贴板的地址、显示虚假的交易请求、索要助记词,或向去中心化应用的前端注入盗取程序。
- 5隐藏踪迹。 攻击者往往在得手后迅速删除代码,使调查更加困难。
已有符合这一模式的真实事件记录在案。2018 年,一个热门 JavaScript 软件包中被加入了恶意依赖项,其目的是盗取某款特定 bitcoin 钱包应用用户的资金。2023 年 12 月,Ledger 的 Connect Kit 库的一个被入侵版本曾短暂导致多个去中心化应用向用户展示钱包盗取程序。这两起事件都表明,薄弱环节在于共享代码,而非用户。如需深入了解,请参阅靓号地址的风险与相似地址。
常见入口
| 入口 | 被滥用的方式 | 受影响的人群 |
|---|---|---|
| 开源软件包(npm、PyPI 等) | 发布恶意版本,或上传名称极为相似的软件包 | 使用该软件包的应用和开发者 |
| 从第三方加载的前端脚本 | 脚本被修改以注入盗取程序 | 网站的每一位访问者 |
| 浏览器扩展 | 扩展被出售或劫持,然后通过更新加入恶意代码 | 安装了该扩展的用户 |
| 应用更新 | 更新服务器或签名密钥被入侵 | 安装了该更新的用户 |
| 开发者工具和 AI 推荐的软件包 | 看似可信的虚假软件包名称 | 未经核实就安装的开发者 |
抢注相似名称(typosquatting),即上传名称与热门软件包极其接近的软件包,尤其常见。开发者只要打错一个软件包名称,就可能在毫无察觉的情况下安装恶意软件。
一个假设的例子
这是一个用于说明的综合示例,并非真实案例。设想一家小型去中心化交易所从公共软件包仓库加载一个热门的钱包连接库。某天早上,该库的维护者遭到钓鱼,攻击者发布了一个新版本。交易所的网站自动加载了最新版本。
在几个小时内,每个连接钱包的用户都会看到一个看似普通的兑换请求。实际上,这是一个把他们的代币授权给攻击者合约的请求。仔细阅读钱包授权界面的用户发现了一个陌生合约,于是停了下来。不看内容就点击确认的用户则失去了他们的代币。交易所团队在用户报告损失后才发现问题并发布警报,但此时代码早已被删除。
给用户的警示信号
- 一款熟悉的应用突然要求你提供助记词,或要求一个以前从未有过的“钱包验证”步骤。
- 一个常规操作弹出了异常的钱包请求,例如无限额授权或为陌生合约签名。
- 硬件钱包屏幕上显示的地址与你想要的地址不一致。
- 某个浏览器扩展更新后请求新的权限,特别是读取和更改所有网站数据的权限。
- 项目方或安全研究人员发布紧急警告,提醒不要使用某个网站或应用。
其中许多信号与使用类似手法的剪贴板恶意软件和假钱包应用相重叠。另请参阅:针对加密货币用户的虚假浏览器更新与验证码恶意软件。
如何保护自己
作为用户
- 1使用硬件钱包,在确认之前阅读其屏幕上的地址、金额和合约。
- 2尽量少装扩展。 删除不用的扩展;当某个扩展更换所有者或请求新权限时要保持警惕。
- 3分开存放资金。 把长期持有的资产放在很少连接网站的钱包里,日常 DeFi 使用另一个钱包。
- 4安全警报发布后先暂停。 在应用确认问题已修复之前,避免使用它。
- 5定期撤销不需要的授权。
作为开发者或项目方
- 锁定依赖版本并使用锁文件;升级前审查变更内容。
- 仔细核对软件包名称,优先选择维护良好的库。
- 为软件包仓库和代码托管账户强制启用多重身份验证。
- 使用签名发布,并尽可能采用可复现构建,让用户能够验证二进制文件。
- 为第三方脚本使用 content security policy 和 subresource integrity。
如果你受到影响该怎么办
- 1停止使用受影响的应用或扩展,并断开所有钱包的连接。
- 2检查交易记录中在受影响期间是否有授权或转账。
- 3撤销任何可疑授权;如果你的助记词可能已经泄露,请把剩余资金转移到使用新助记词的新钱包。
- 4收集交易哈希和地址,然后通过项目的官方渠道以及我们的诈骗举报表单报告此事件。
请按照钱包被入侵后应立即采取的措施中的完整清单操作。
总结
供应链攻击会把受信任的软件变成盗窃的通道,所以仅靠避开可疑链接是不够的。把硬件钱包屏幕和钱包请求当作最后一道检查,尽量减少所用的软件,并对官方安全警报迅速作出反应。开发者承担着最主要的责任:对发布的一切进行版本锁定、审查和签名。
常见问题
什么是加密货币领域的供应链攻击?
这是一种攻击方式:犯罪分子不直接攻击用户,而是入侵其他产品所依赖的软件,例如代码库、浏览器扩展或应用更新。当这款受信任的软件更新时,恶意代码就会进入所有依赖它的应用和用户那里,通常用于盗取加密货币或替换地址。
供应链攻击会影响硬件钱包吗?
硬件钱包的屏幕就是为了在你的电脑或某个网站被入侵时仍能保护你,因为你是在设备上确认真实的地址和金额。不过,如果你不看屏幕,攻击仍可能诱使你批准恶意交易,所以务必在设备本身上核对细节。
我怎么知道自己用过的网站是否受到影响?
通常你会从受影响项目的官方公告或安全研究人员那里得知。如果你用过的项目报告其代码库或前端被入侵,请检查自己在受影响期间是否签署过任何内容,撤销授权,并在必要时把资金转移到新钱包。
开源钱包能免受供应链攻击吗?
开源有帮助,因为更多人可以审查代码,但它并不能让软件刀枪不入。恶意代码可能通过依赖项、被入侵的维护者账户或构建系统进入。可复现构建、签名发布和谨慎的依赖管理可以降低风险。
