文章分析了 Solana 上 Drift Protocol 约2.85亿美元被盗事件,指出其本质不是智能合约漏洞,而是针对多签签名者的长期社会工程攻击。攻击者通过线下接触、建立信任、伪装成量化机构并持续数月渗透,最终诱导签名者批准恶意交易。作者认为硬件钱包和人工审查在复杂交易面前存在“盲签”问题,单靠教育和个人谨慎并不够,核心解法应是提升交易可读性与签名可验证性,例如 ERC-8213、ERC-7730 以及 Solana 上的对应标准,让安全成为默认路径。
Patrick Collins
这起价值 2.85 亿美元的 Drift 黑客事件通过线下社交工程攻破了一个 multisig。以下解释了为什么像 ERC-8213 这样的交易可读性标准才是解决之道。
这起价值 2.85 亿美元的 Drift Protocol 黑客事件并不是 Web3 历史上规模最大的一次黑客事件——Bybit 的 14 亿美元漏洞利用才是。但它可能是这个行业最需要理解的一次。原因如下。
Drift Protocol 依赖一个 2-of-5 multisig 运行,使用的是 Squads,这是 Solana 上的标准 multisig 基础设施。团队已确认,所有 multisig 签名者都使用 cold wallet。
攻击者只需要获得两个批准。根据 Drift 的事后分析:
这次攻击是由预先签名的 durable nonce 交易,以及多个 multisig 签名者批准被攻破共同促成的,其实现方式很可能是有针对性的社交工程或交易误导。
这类漏洞利用本身——通过操纵签名者所批准的内容来攻破 multisig——并不新鲜。我们在 Bybit(14 亿美元)、WazirX(2 亿美元) 和 Radiant Capital(5000 万美元) 中都见过完全相同的模式。其手法一贯如此:
这笔漏洞利用交易大约在 12 分钟内完成。
此前所有由国家支持的加密黑客事件都依赖远程社交工程——虚假的工作机会、Telegram 消息,以及发给陌生人的恶意链接。线下面谈一直被认为对攻击者来说风险太高,因此团队可以把线下核验作为一种缓解手段。
而 Drift 的攻击者打破了这一假设。
根据 Drift 的披露:
Drift 贡献者在一场大型 crypto conference 上,被一群自称某量化公司的人接触,对方表示希望围绕该协议展开合作。他们技术娴熟,拥有可验证的职业背景,并且熟悉 Drift 的运作方式。
在接下来的六个月里,攻击者在 Drift 上接入了一个 Ecosystem Vault,存入了超过 100 万美元的自有资金,参与工作会议,并在多个国家的多场 conference 上与贡献者面对面会面。等到攻击实施时,这段关系已经持续了将近半年。
这让人联想到 XZ Utils 后门事件——一名贡献者通过多年建立信任,逐步渗透关键开源基础设施,最终植入后门。
有两点让这次升级对 Web3 的每个团队都意义重大:
有一些具体步骤本可以降低攻击面。我们应该坦诚承认这一点:
交易验证。 虽然使用了硬件钱包,但签名者无法验证自己实际在签署什么。硬件钱包上的交易数据——尤其是复杂的 Solana instructions——会以原始 hex 形式呈现。要将成千上万的字符与预期值逐一比对,几乎不现实。这就是跨所有链都存在的盲签名问题。
代码执行卫生。 一名贡献者可能是在克隆了攻击者共享的代码仓库后被入侵的。Docker containers、dev containers 和沙盒环境就是为此而存在的。SEAL 的 Pascal Caversaccio 推荐使用 Qubes OS 实现完全隔离。
设备分离。 签名设备应在物理和逻辑上与工作设备分离。被攻陷的 laptop 不应以任何方式接触到 signing key。
这些措施都有效,在黑客事件发生前也都已经存在。但问题在于——如今没有一个是团队日常工作的默认路径。而这才是真正的系统性问题。
安全领域有一个概念叫 security fatigue——当做正确事情的认知负担高到一定程度,人们就会干脆不再去做。每一次黑客事件中,如果回应是“他们本该更小心”,那其实都是这个问题的症状。
以密码为例。几十年来,针对凭证复用的“解决方案”一直是告诉人们记住彼此不同的密码。这个建议在技术上是正确的,但在实践中并不可行。真正的修复来自于我们构建了基础设施——password managers、passkeys——让安全路径变成最容易走的路径。
这里也适用同样的模式。我们可以告诉每个 multisig 签名者,在硬件钱包上核对每笔交易的每一个字符。这个建议在技术上没有错,但在实践中没有人会这么做——因为那可能是 20 页的 hex 数据,而只要有一个字符出错,就可能造成灾难性损失。
这是把 fundamental attribution error 应用于安全:把情境性失败归咎于个人。解决办法不是更好的教育,而是更好的基础设施。
ERC-8213 是我们为 Ethereum 生态提出的一项标准。它不再在硬件钱包上显示原始 calldata,而是显示一个单独的 32-byte digest。签名者在另一台设备上独立计算预期的 digest 并进行比对。只需验证一个 hash,而不是成千上万的字符。
这面向技术用户和企业签名者——也就是任何负责高价值 multisig 操作的人。
ERC-7730 是一个更长期的配套方案。它建立了一个 registry,由项目方提供结构化 metadata,将原始交易数据翻译成自然语言描述。这面向非技术用户和零售用户。
Drift 黑客事件发生在 Solana 上,而这些标准在那里尚不存在。我们已经在 SIMD repository 中开启了一个讨论,希望将这两种方法带到 Solana 生态——一个 transaction digest 的等效方案,以及一个 human-readable signing registry。
如果你运营一个 multisig、管理 treasury,或者代表某个协议签署交易:
这些是当下可以立刻采取的个人措施。但真正的修复——系统性的修复——是让钱包从一开始就不允许这类事情发生。
默认路径必须是安全路径。
- 原文链接: cyfrin.io/blog/drift-hac...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
作者暂未设置收款二维码