9 月 15 日更新: 官方表示丢失的资产已经全部找回。
9 月 14 日,bZx 协议再次遭到攻击,共计损失价值逾 800 万资产。另一方面,去中心化保险 的有效保额突破了 2 亿美元,较昨日翻倍。
撰文:张改娟
昨日,DeFi 借贷协议 bZx 年内第三次遭到攻击,由于代码重复事故导致共计损失价值超 800 万的资产,这距离 BZx 新版本部署仅不到两周。受此影响,bZx 代币 BZRX 过去 24 小时跌近 30%,从 0.6679USDT 一度跌至 0.4 USDT,发文时暂报 0.44USDT。
BZRX 30 分钟 K 线图,来源:币安
与此同时,bZx 锁仓量较昨日暴跌 99.71%,几乎归零,目前仅为 176 美元。
北京时间 9 月 14 日下午 3 点半左右,bZx 发现其协议总锁定价值(TVL)出现显著下降。大约 3 小时后 bZx 确认多个 iToken 发生了重复事故,即 iToken 合约中的_internalTransferFrom() 函数出现异常行为,攻击者利用了相同的_from 和_to 地址调用了传输函数。确认问题后 bZx 随即暂停了放贷操作。
bZx 表示,目前该函数异常行为已被修复,协议也已恢复正常运行。借款和交易未受到影响,用户不会受到资金风险。bZx 也已部署了新版本的 iToken 合约,并针对重复事故重设了余额。修复后的代码已发送给区块链安全公司 Peckshield 和 Certik 进行审查。目前 iToken 的铸造和销毁已恢复。
bZx 披露的信息显示,此次重复事故发生后已将以下债务添加至其保险基金中,包括近 22 万 LINK、4502ETH、175.64 万 USDT、141.20 万 USDC、以及 66.80 万 DAI,按当前价格计算,总价值逾 800 万美元,具体如下:
- 219,199.66 LINK
- 4,502.70 ETH
- 1,756,351.27 USDT
- 1,412,048.48 USDC
- 667,988.62 DAI
去中心化借贷协议 Compound 创始人 Robert Leshner 表示,这意味着 bZx 损失了价值 800 多万的资产,并建议 bZx 重新审计合约,而不是仅向用户表示「no big deal」。
针对 bZx 协议被攻击一事,Bitcoin.com 首席工程师 Marc Thelan 表示,昨晚其在 bZx 中发现了该漏洞,有价值超过 2000 万美元的资产处于危险之中。Marc Thelan 称其将该漏洞告知了 bZx 团队,但该团队反应过于缓慢。等到 bZx 团队获悉该漏洞时,攻击者几乎已经耗尽了 Dai 和 USDC 资产。如果攻击者有更多时间,可能会耗尽整个池子。bZx 的一位创始人在电报群中表示,团队安全小组建议给 Marc Thelan 1.25 万美元的赏金。
1inch 联合创始人 Anton Bukon 此前也发现了该漏洞,其表示,「我们发现有人在两天前就利用该漏洞将自己的余额增加到 1.536 亿枚 iUSDT,并开始从 USDT 池中转走,直到 bZx 协议管理员销毁了 1.519 亿枚 iUSDT,这表明似乎有 170 万 USDT 被盗。」
关于 bZx 协议管理员销毁 iUSDT 一事,开发人员 Roman Semenov 解释称,bZx 协议管理员使用了一个允许其销毁任何用户资金的后门,然后将代币的实现状态更新为未经验证。在销毁一些涉及攻击的用户资金后,他们再次将其更新为漏洞修复后的正常实现。
bZx 进一步解释称,该协议此前已经过区块链安全公司 Peckshield 及 Certik 的安全审计,并进行了大量的自动化测试,但通过审计并不能确保协议 100% 安全。Peckshield 及 Certik 正在分析此次事件的根本原因。
DeFi 项目频繁遭受攻击,刺激去中心化保险需求
事实上,这并不是 bZx 协议首次受到攻击。今年 2 月中旬,bZx 协议曾两次受到攻击,共计损失价值逾 90 多万的资产。当月中旬,bZx 联合创始人 Kyle Kistner 表示,「部分 ETH 已损失,此次事件是因为一个合约被利用导致的,其他资金是安全的。」业内人士估测,此次损失金额约为 35 万美元。
3 天后(2 月 18 日),bZx 再次受到攻击。bZx 表示又发现了一次使用闪电贷进行的可疑交易,攻击者后续使用了 Synthetix 交易,不过没有影响到 Synthetix 系统。
除 bZx 之外,近期随着 DeFi 热度的大幅提升,安全问题成为了 DeFi 行业的最大挑战。据 PeckShield 数据显示,八月共发生安全事件 28 起,其中 DeFi 市场就发生了 8 起。
正因如此,去中心化保险的市场需求应运而生。Nexus Mutual Tracker 数据显示,截至目前,去中心化保险 Nexus Mutual 的有效保额突破了 2 亿美元,较之两个月前,该数值已经增长逾 20 倍。
而在过去短短的 24 小时左右时间里,该数据就大涨 130%,今日 bZx 的安全事故显然成为了去中心化保险「大跃进式」增长的重要催化剂。
去中心化保险 Nexus Mutual 的有效保额,来源:Nexus Mutual Tracker
可以想象,随着 DeFi 市场的持续发展,去中心化保险、预言机等细分市场有望继续保持增长势头。
bZx 协议代码安全漏洞的技术细节与进展更新
根据 bZx 发布的漏洞 报告,此次事件发生后的团队所采取的进展以及技术细节如下:
- 团队注意到协议总锁定价值出现了异常变动;
- 在 iToken 上识别出与_internalTransferFrom() 函数相关的异常行为;
- 团队在确定修复方案后暂停了 iToken 的铸造和销毁,不过,借款和交易并未受到影响;
- 部署了新版本的 iToken 合约,并重设了余额;
- 修复后的代码已发送给 Peckshield 和 Certik 进行审查;
- 恢复 iToken 的铸造和销毁。
在以太坊 ERC20 代币中,TransferFrom() 函数(传输函数)是将一定数量的代币从一个地址转移至另一个地址的执行操作,即从地址_from 发送_value 个 token 到地址_to。
此次 iToken 重复事故正是攻击者利用了相同的_from 和_to 地址调用了传输函数。
有误的代码
当_from 和_to 地址相同时,会导致_balancesFrom 和_balancesTo 相等。
有误的代码
上述问题导致再减少_balancesFrom 余额的情况下增加了_balancesTo 的余额,并且还保存了_balancesFromNew 和_balancesToNew,这会导致用户能够人为地增加自己的余额。
修复后的代码在 balances[_from] 余额减少后,会进行 balancesTo 余额的转移,从而防止用户人为增加自己的余额。
修复后的代码
内容搜集自网络,整理者:BTCover,如若侵权请联系站长,会尽快删除。