1.前言
北京时间 3 月 15 日晚,知道创宇区块链安全实验室 监测到 Gnosis 链上的借贷类协议 Hundred Finance 与 Agave 均遭遇了闪电贷袭击,包括 AAVE 的分支 Agave 和 Compound 的分支 Hundred Finance 。协议损失超 1100 万美元。目前 项目方已暂停其数百个市场。
知道创宇区块链安全实验室 第一时间跟踪本次事件并分析。
Hundred Finance被攻击 tx:
0x534b84f657883ddc1b66a314e8b392feb35024afdec61dfe8e7c510cfac1a098
攻击合约:0xdbf225e3d626ec31f502d435b0f72d82b08e1bdd
攻击地址: 0xd041ad9aae5cf96b21c3ffcb303a0cb80779e358
CoinMetrics:以太坊在SEC文件中的提及率创历史新高:金色财经报道,CoinMetrics在其最近的网络状况(SOTN)报告中披露,从美国证券交易委员会的公开数据库中衡量,机构对以太坊的兴趣与ETH的价格有着强烈的正相关关系。该关系的原因被指出是公共机构有义务向SEC报告对加密货币信托基金和ETF的投资。通过挖掘SEC的数据库,检查13(f)证券文件,CoinMetrics发现,从2020年到2022年,在文件中提到以太坊的实体一直在上升。
报告指出,从2020年到2021年,以太坊的类似趋势很明显,反映出它在机构中的兴趣越来越大。CoinMetrics还表示,如果以太坊的ETF被批准,机构的兴趣可能会增加,就像对比特币的兴趣一样。与此类似,对以太坊基金的资金流入分析也显示了类似的趋势。对以太坊基金的机构投资已经出现了两周的资金流出,根据CoinShares的相关报道,上周共有约1700万美元的资金流出。(coingape)[2022/3/23 14:13:00]
攻击后跨链匿名化:https://etherscan.io/txs?a=0xd041ad9aae5cf96b21c3ffcb303a0cb80779e358
Agave被攻击tx:
0xa262141abcf7c127b88b4042aee8bf601f4f3372c9471dbd75cb54e76524f18e
Bitcoin.org遭到大规模DDoS攻击:金色财经报道,bitcoin.org的匿名所有者Cobra透露,该网站目前正遭受“绝对大规模”的DDoS攻击。并且攻击者要求发送比特币作为赎金,否则他们将继续。上个月,澳本聪(Craig Wright)通过缺席判决在伦敦高等法院赢得了针对Cobra的比特币白皮书版权侵权诉讼。后者选择不在法庭上为自己辩护,以隐瞒自己的真实身份。出于同样的原因,他也不能聘请律师。[2021/7/6 0:29:28]
攻击合约:0xF98169301B06e906AF7f9b719204AA10D1F160d6
攻击地址: 0x0a16a85be44627c10cee75db06b169c7bc76de2c
攻击后跨链匿名化:https://etherscan.io/txs?a=0x0a16a85be44627c10cee75db06b169c7bc76de2c
由于 Hundred Finance 与 Agave 攻击流程与手法类似,因此我们使用 Hundred Finance 进行分析。
Hundred Finance 攻击调用流程
1、攻击者利用合约在三个池子中利用闪电贷借出 WXDAI 和 USDC
2、在 WETH 池子质押借出的部分 USDC
3、利用重入利用一笔质押,超额借出池子中资金
4、重复质押-重入借出步骤,将其他两个池子资产超额借出
5、归还闪电贷
6、获利转移
导致本次问题的根本原因是由于在 Gnosis 链上的官方桥接代币 xDAI 合约中实现了一个对于 to 地址的回调( callAfterTransfer 函数)
合约实现地址:
https://blockscout.com/xdai/mainnet/address/0xf8D1677c8a0c961938bf2f9aDc3F3CFDA759A9d9/contracts
该回调将直接导致重入漏洞的产生,同时由于在 Hundred Finance 团队 fork 的 Compound 版本中没有严格遵循检查-生效-交互(防止重入的另一种方式),进而导致了总借贷量更新晚于重入实现。最终攻击者得以超额借贷。
类似的,对于 Agave 项目方,攻击者利用 liquidateCall 函数内部调用会调用 xDAI 的 callAfterTransfer 方法进行回调,最终导致攻击者能再次进行借贷。
在 Hundred Finance 攻击中攻击者重入的调用路径如下:
在 Agave 攻击中攻击者回调路径(调用 liquidateCall 时内部调用时回调)如下:
此次遭受攻击的两个借贷项目由于错误的引入了存在重入的 token,同时项目方的 fork 的代码没有采用检查-生效-交互模式导致了问题的发生。
我们强调:对于一个优秀的项目的引用必须建立在足够的理解和严谨的开发上,尤其是存在差异化的部分,切忌顾此失彼最终因为一个小的差错导致项目全部的损失。
近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。