慢雾:Furucombo被黑分析_PROX:Proxy

著名DeFi项目Furucombo被黑,损失超1500万美元。慢雾安全团队第一时间介入分析,并将攻击细节分享给大家。

攻击细节分析

本次发生问题的合约在Furucombo本身的代理合约当中。整个攻击流程很简单。攻击者通过设置了Furucombo的AaveV2Proxy的逻辑地址导致后续通过Furucombo代理合约调用的逻辑全部转发到攻击者自己的恶意合约上,导致任意资金被盗。

但是如果事情那么简单,那么本次分析不值一提。问题远比想象的复杂得多。

如上图所示攻击者的入口在Furucombo的batchExec函数,我们先对batchExec函数进行分析:

纽约时报反对在审判前对SBF发出禁言令:金色财经报道,8月3日,《纽约时报》对FTX前首席执行官Sam Bankman-Fried施加的临时和未来可能的禁言令表示反对。《纽约时报》在一份法庭文件中表示,限制言论的法庭命令必须遵循法律标准。任何此类命令都必须保护公众第一修正案的权利。与对法律顾问的限制相比,对言论的限制,特别是对SBF等非法律专业人士的限制,应该受到更严格的审查。为此,该公司援引了两项法律规定。

《纽约时报》声称,只有在被告的权利受到威胁的情况下才允许实施限制,但事实似乎并非如此,因为SBF选择自愿分享信息。此外,《纽约时报》对政府检察官的声明提出了反对。

政府此前表示,被告SBF有权向媒体发表言论,但他只能为自己辩护。《纽约时报》声称,无论相关条款如何,这都“不是标准”。[2023/8/4 16:17:58]

以上是FurucomboProxy合约的batchExec函数的具体实现,其中_preProcess和_postProcess合约分别是对调用前后做一些数据上的处理,不涉及具体的调用逻辑,这边可以先忽略。我们主要观察核心的_execs函数:

Banshees NFT项目Discord服务器遭入侵:金色财经报道,据CertiK官方推特发布消息称,Banshees NFT项目Discord服务器遭入侵在团队确认已重获对服务器的控制之前,请勿点击任何链接,进行铸币或者确认转账。[2023/7/17 10:59:48]

通过对execs代码的分析不难发现,函数的主要逻辑是对configs数组的数据做检查,并根据configs数组的数据对data进行一些处理。但是回顾上文中攻击者的调用数据,不难发现攻击者的调用数据中,configs的数据是一个0地址:

这里有一个trick,由于?0地址是一个EOA地址,所有对EOA地址的函数调用都会成功,但是不会返回任何结果。结合这个trick,execs函数中的关于configs数据的部分可以先暂时忽略。直接看到最后的核心_exec函数:

俄罗斯总检察长要求加密交易所必须共享用户数据:金色财经报道,据俄罗斯总检察长办公室负责人Igor Krasnov表示,应要求加密服务提供商在俄罗斯注册,交易所有义务与俄罗斯安全部门共享用户信息。他还认为,仅仅根据俄罗斯法律授予加密货币财产地位,不足以打击犯罪收益的合法化。Krasnov敦促对其进行监管,以应对将其用于非法目的所带来的挑战。Igor Krasnov还呼吁将加密货币加入俄罗斯刑法,包括承认加密货币可能成为犯罪和侵占的对象,以及建立国家扣押、储存和没收加密货币的程序。

俄罗斯议会下院国家杜马仍在审议一项关于加密货币挖矿的法案。上个月有报道称,立法者正在考虑对矿工逃税和未向政府报告数字资产的行为追究刑事责任。[2023/4/9 13:53:12]

_exec函数的逻辑也很简单,在校验了_to地址后,直接就将data转发到指定的_to地址上了。而通过对攻击交易的分析,我们能发现这个_to地址确实是官方指定的合法地址。

动态 | 慢雾:2020年加密货币勒索蠕虫已勒索到 8 笔比特币:慢雾科技反(AML)系统监测:世界最早的知名加密货币勒索蠕虫 WannaCry 还在网络空间中苟延残喘,通过对其三个传播版本的行为分析,其中两个最后一次勒索收到的比特币分别是 2019-04-22 0.0584 枚,2019-09-01 0.03011781 枚,且 2019 年仅发生一次,另外一个 2020 还在活跃,2020 开始已经勒索收到 8 笔比特币支付,但额度都很低 0.0001-0.0002 枚之间。这三个传播版本第一次发生的比特币收益都是在 2017-05-12,总收益比特币 54.43334953 枚。虽然收益很少,但 WannaCry 可以被认为是加密货币历史上勒索作恶的鼻主蠕虫,其传播核心是 2017-04-13 NSA 方程式组织被 ShdowBrokers(影子经纪人) 泄露第三批网络军火里的“永恒之蓝”(EternalBlue)漏洞,其成功的全球影响力且匿名性为之后的一系列勒索蠕虫(如 GandCrab)带来了巨大促进。[2020/2/23]

最后一步,便是调用_to地址,也就是官方指定的AaveV2Proxy合约的initialize函数,将攻击者自己的恶意地址设置成AaveV2Proxy合约的逻辑地址。通过对Furucombo合约的分析,可以发现整个调用流程上没有出现严重的安全点,对调用的地址也进行了白名单的检查。那么问题只能是出在了对应要调用的代理逻辑上,也就是AaveV2Proxy合约。

我们直接分析AaveV2Proxy合约的initialize函数的逻辑:

可以看到initialize函数是一个public函数,并在开头就检查了_implementation是否是0地址,如果是0地址,则抛出错误。这个检查的目的其实就是检查了_implementation是否被设置了,如果被设置了,就无法再次设置。根据这个设置,不难想出initialize这个函数只能调用一次。除非AaveV2Proxy从来没有设置过_implementation,否则这个调用是不会成功的。难道Furucombo真的没有设置过对应的_implementation吗?带着这样的疑问,我们检查了交易内的状态变化。如下:

可以看到,交易中改变了存储位置为0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc的内容,而写入的内容正是攻击者自己的恶意合约地址?0x86765dde9304bea32f65330d266155c4fa0c4f04。

而?0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc这个位置,正是_implementation数据的存储地址。

也就是说,官方从来没有设置过?AaveV2Proxy合约的_implementation地址,导致攻击者钻了这个空子,造成了Furucombo资产损失。

总结

通过对整个事件的分析来看,Furucombo此次事故并不在安全漏洞的范畴内,主要的原因在于官方将未启用的?AaveV2Proxy合约添加进了自己的白名单中,并且未对AaveV2Proxy合约进行初始化,导致攻击者有机可乘。

建议

目前,由于Furucombo遭受攻击,导致任何将代币授权过给Furucombo合约(0x17e8ca1b4798b97602895f63206afcd1fc90ca5f)的用户都将面临资金损失的风险。

慢雾安全团队建议与Furucombo交互过的用户检查是否有将相关代币授权给Furucombo合约。如有授权,应及时撤销相关授权,避免进一步损失。

来源:金色财经

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:31ms0-2:969ms