对于旁观者,DeFi 是一场新奇的社会实验;对于参与者,DeFi 被盗是一次昂贵的教训。
撰文:David,深潮 TechFlow
屋漏偏逢连夜雨,黑客专挑下跌时。
在近期整个加密市场行情低迷的环境下,老牌 DeFi 协议再遭重创。
11 月 3 日,链上数据显示,协议 Balancer 疑似遭到黑客攻击。约 7,090 万美元 的资产被转移至新钱包,其中包括 6,850 枚 osETH、6,590 枚 WETH 及 4,260 枚 wstETH。
随后据 Lookonchain 监测相关钱包地址,协议遭受攻击的总损失金额已升至 1.166 亿美元。
而 Balancer 团队在事件后表示:
「已发现可能影响 Balancer v2 池的漏洞攻击,其工程和安全团队正在高优先级调查此事件,将在获取更多信息后分享已验证的更新和后续措施。」
此外,官方也尝公开表示愿意支付被盗资产的 20% 作为白帽奖励以追回资产,48 小时内有效。
回应的很及时,但也很官方。
不过,如果你是个 DeFi 老玩家,肯定不会对「Balancer 被黑」这个标题感到诧异,而是有一种诡异的既视感。
作为一个成立于 2020 年的老牌 DeFi 协议,Balancer 5 年来甚至出现了 6 次安全事故,平均每一年都会上演一次黑客光顾的保留节目,而这一次只是其中被盗金额最大的。
回看历史,当市场行情让交易难度变成地狱级,很有可能存在 DeFi 里生息套利也并不安全。
2020 年 3 月,Balancer 带着「灵活的自动化做市商」的创新理念进入 DeFi 世界。然而,仅仅三个月后,这个雄心勃勃的协议就迎来了第一个噩梦。
攻击者利用了协议对通缩代币(Deflationary Token)处理不当的漏洞,造成了约 52 万美金的损失。
大体的原理是,当时一个叫做 STA 的代币每次转账会自动销毁 1% 作为手续费。
攻击者从 dYdX 闪电贷借出 10.4 万 ETH,然后在 STA 和 ETH 之间反复交易 24 次。由于 Balancer 没有正确计算每次转账后的实际余额,池子里的 STA 最终被耗尽至仅剩 1 wei。随后攻击者利用价格严重失衡,用微量 STA 换走了大量 ETH、WBTC、LINK 和 SNX。
这次 Balancer 是间接受害者。
Euler Finance 遭受 1.97 亿美元闪电贷攻击,Balancer 的 bb-e-USD 池因持有 Euler 的 eToken 而受到牵连。
当 Euler 被攻击时,约 1190 万美元从 Balancer 的 bb-e-USD 池被转移到 Euler,占该池 TVL 的 65%。虽然 Balancer 紧急暂停了相关池子,但损失已经造成而无法挽回。
这次攻击其实之前有预兆。当年 8 月 22 日,Balancer 主动披露漏洞并警告用户撤资,但 5 天后攻击还是发生了。
漏洞涉及 V2 Boosted Pool 的舍入误差(rounding error)。攻击者通过精确操纵,使得 BPT(Balancer Pool Token)的供应量计算出现偏差,从而以不正当的汇率提取池中资产。攻击通过多笔闪电贷交易完成,不同安全公司对损失的估算从 97.9 万到 210 万美元不等。
这是一次社会工程攻击,目标不是智能合约而是传统互联网基础设施。
黑客通过社会工程手段攻破域名注册商 EuroDNS,劫持 balancer.fi 域名。用户被重定向到钓鱼网站,该网站使用 Angel Drainer 恶意合约诱骗用户授权转账。
攻击者再将所盗赃款通过 Tornado Cash 进行洗白。
虽然这事本身并不是 Balancer 的锅,但树大招风,利用该协议的品牌进行钓鱼,也让人防不胜防。
虽然 Velocore 是独立项目,它被盗本来和 Balancer 没啥关系。但作为 Balancer 的分叉,Velocore 使用了相同的 CPMM(恒定乘积做市商)池设计,某种程度上可谓一脉相承,更像是盗在别处,但机制在 Balancer。
这次的始末,大概是攻击者利用 Velocore 的 Balancer 式 CPMM 池合约中的溢出漏洞,通过操纵费用乘数(feeMultiplier)使其超过 100%,导致计算错误。
攻击者最终通过闪电贷配合精心构造的提取操作,盗取了约 680 万美元。
这次攻击的技术原理已经初步明确。根据安全研究员分析,漏洞位于 Balancer V2 协议里的 manageUserBalance 函数的访问控制检查中,而这也对应着用户权限的检查。
根据安全监控机构 Defimon Alerts 和 Decurity 的分析,系统在验证 Balancer V2 的提款权限时,本应检查调用者是否是账户的真正所有者,但代码错误地检查了 msg.sender(实际调用者)是否等于用户自己提供的 op.sender 参数。
由于 op.sender 是用户可控的输入参数,攻击者可以随意伪造身份,绕过权限验证,执行 WITHDRAW_INTERNAL(内部提款)操作。
说人话就是,这个漏洞让任何人都可以冒充任何账户的所有者,直接提取内部余额。这种基础的访问控制错误更像是低级失误,在一个运行 5 年的成熟协议中出现,让人非常诧异。
我们能从这段「黑客光顾史」里学到什么?
笔者的感受是,加密世界里的 DeFi 协议,更像是「可远观而不可亵玩」,远看风平浪静,而如果真要细细研究,有很多叙事之外的技术债恐怕需要偿还。
比如 Balancer 这个老牌 DeFi 协议,仔细看它的创新之一,那自然绕不过允许最多 8 种代币的自定义权重而组成混合池。
相比 Uniswap 的简洁设计,Balancer 的复杂性呈指数级增长。
每增加一种代币,池子的状态空间就会急剧膨胀。当你试图在一个池子里平衡 8 种不同代币的价格、权重和流动性时,攻击面也随之扩大。2020 年的通缩代币攻击和 2023 年的舍入误差漏洞,本质上都是复杂性带来的边界条件处理不当。
更要命的是,Balancer 选择了快速迭代的发展路径。从 V1 到 V2,再到各种 Boosted Pool,每次升级都在旧代码上叠加新功能。这种「技术债务」的累积,让代码库变成了一个脆弱的积木塔;
比如最近这次因为权限问题而导致的攻击,如此基础的设计错误不应该是一个运行 5 年的协议所产生的问题,或许某种程度上也说明项目的代码维护已经失控。
又或许,在叙事、利润和情绪大于技术的现在,底层代码是否有漏洞,已经不重要了。
Balancer 当然也不会是最后一个,你永远都不知道因为 DeFi 各种可组合性所堆叠的黑天鹅到底何时到来。DeFi 世界里各种复杂的依赖网络,让风险评估变得几乎不可能。
即使你信任 Balancer 的代码,你能信任它所有的集成与合作伙伴吗?
对于旁观者,DeFi 是一场新奇的社会实验;对于参与者,DeFi 被盗是一次昂贵的教训;对于整个行业,DeFi 健全是走向成熟必须付出的学费。
只是这个学费,希望不要太贵了。
 
 
 
 
 
 
 
 
 
 
 
 【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
