前言
北京时间3月20日晚,知道创宇区块链安全实验室?监测到以太坊上分布式跨链协议。Li.Finance 受到了攻击,攻击者执行了 37 次call注入,获取了多个钱包中约 60 万美元的资产(204个ETH)。此次资产损失并没有非常大,但项目方对于攻击的处理非常积极并值得学习与肯定(见后文),目前项目方已补偿了协议损失并修复后重新部署了协议。
知道创宇区块链安全实验室?第一时间跟踪本次事件并分析。
分析
1.攻击者相关信息
攻击tx:
0x4b4143cbe7f5475029cf23d6dcbb56856366d91794426f2e33819b9b1aac4e96
Cyber Capital创始人:SOL有太多危险讯号:金色财经报道,加密风投基金Cyber Capital创始人兼首席投资官Justin Bons在社交媒体发布长文称,Solana(SOL)有太多危险信号,他首先强调区块链永远不应该宕机,但Solana是过去几个月中唯一宕机七次的区块链,此外SOL团队在2020年4月声称 Token 总流通量为 820 万枚,但其实超过 2000 万枚,因此涉嫌公然欺诈,而且还被第三方发现一个未锁定的Solana钱包,其中包含1300万枚SOL。Justin Bons还表示,Solana围绕TPS指标做出虚假陈述,比如SOL网络因执行40万TPS而瘫痪。Justin Bons声称,希望Solana能改变并修复这些缺陷。[2022/7/24 2:33:48]
被攻击合约:
0x5A9Fd7c39a6C488E715437D7b1f3C823d5596eD1--代理合约
特朗普:加密货币是一件非常危险的事情,总有一天会爆炸:金色财经报道,美国前总统特朗普在周末接受采访时,对加密货币、他妻子的NFT平台以及他的新社交媒体平台Truth Social发表了评论。特朗普表示,从不喜欢它,因为喜欢拥有美元。认为货币应该是美元,所以从来不是一个粉丝。但它的扩散越来越大,没有人对此采取任何措施。加密货币是一件非常危险的事情,总有一天会爆炸,此外,在谈到他妻子的NFT计划时,特朗普表示。她会做得很好,她有很好的想象力。(news.bitcoin)[2021/12/22 7:55:07]
0x73a499e043b03fc047189ab1ba72eb595ff1fc8e--逻辑合约
攻击者地址: ?
0xC6f2bDE06967E04caAf4bF4E43717c3342680d76 -- 部署地址
以太坊基金会披露2019年发现的安全漏洞,柏林升级后该漏洞危险性降低:以太坊基金会披露了一个2019年首次发现的安全漏洞,在上个月的柏林升级之前,该漏洞的严重程度为发生攻击时可能使主网瘫痪。该漏洞的本质是触发随机Trie查询,以太坊开发人员曾试图用EIP-1884、EIP-2583、EIP-2929、以及快照功能来抵御该漏洞,最终在柏林升级之后该漏洞危险性降低。[2021/5/19 22:18:57]
0x878099F08131a18Fab6bB0b4Cfc6B6DAe54b177E -- 收款地址
2.攻击流程
攻击调用流程
攻击者构造 payload 并调用被攻击合约 0x5a9fd7c3 的 swapAndStartBridgeTokensViaCBridge 函数:
分析 | 熊市的开门钥匙 比特币强支撑位7600有多危险??:据Huobi数据显示,BTC现报8023美元,日内涨幅1.16%。针对当前走势,金色盘面特邀分析师币圈老油条表示:比特币在昨日最低测试7700美元,短时在8000美元附近持续盘整,这个价位短时最好不要下破才是。从小时线趋势上看来,有突破下降趋势线压制,如破位可能回到8200美元。整体上,依然处于弱势震荡中,价格8000-9000美元空间,上方重点关注8780美元,下方支撑重点关注7700美元。
操作上:比特币如回调8780点,可以轻仓做空,止损位9000点,获利点8400点,行情波动较大,不宜重仓操作。[2019/9/27]
具体使用的 Payload 如下--图中选中部分即为利用授权转账(transferFrom)部分的 payload:
声音 | 存款保险公司CEO:依赖加密货币是非常危险的:据cointelegraph消息,7月25日,尼日利亚存款保险公司(NDIC)发布了关于依赖加密货币的公开警告。NDIC的 CEO Umaru Ibrahim表示,依赖加密货币是非常危险的,因为它们在大多数金融司法管辖区都不受中央银行的监管和支持。[2019/7/26]
调用一次正常50刀的跨链桥功能(为了能正常调用 swapAndStartBridgeTokensViaCBridge 函数):
在 payload 中包括多个call方法(调实际用transferFrom)。让 0x5a9fd7c3 调用 37 个call,借此利用多个钱包对于 0x5a9fd7c3 合约的授权(approve)将钱包资产转账到攻击者地址:
后续执行正常的跨链桥逻辑 _startBridge(_cBridgeData); 这也是为什么第一个 swap 是正常的,这样才能让后续逻辑正常执行下去:
3.漏洞细节
导致本次问题的根本原因被攻击合约0x5a9fd7c3的逻辑合约存在一个批量让call 调用传入数据的函数 swapAndStartBridgeTokensViaCBridge:
该合约将会取出payload中的多个_swapData 数据结构并调用,LibSwap.swap(...);实现如下:
借此,攻击者利用该合约的 call 将各个钱包对 0x5a9fd7c3 合约的代码授权转走了多个钱包中的各种代币。
4.项目方进展
在事件发生后,项目方第一时间对合约可能的方法进行了停用,并为其审计和安全性问题进行致歉:
而后,项目方还联系了黑客,希望能与其取得联系并和平解决:
同时,最快的时间将漏洞合约修复后上线:
并将钱包(以Matic为例)对于之前被攻击合约的授权取消,对新的合约进行了重新授权:
最后,将用户资产进行补回:
同时我们关注到,其在 polygon 链上的合约也已实现了新的部署:
总结
此次攻击的根本原因是项目方对于 swapAndStartBridgeTokensViaCBridge 合约的实现过度自由化所导致的 call 调用注入,但项目方积极的面对问题的态度和后续补救的及时性值得学习和肯定。不贵于无过,而贵与改过。
但我们仍希望能将错误扼杀在发生之前,应从他人的错误中学习并避免自己未来的错误,正如 Li.Finance 所说的那样:“我们的使命是最大化用户体验,现在我们痛苦地了解到,为了遵循这种精神,我们的安全措施必须大幅改进。”
近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。