UCO:慢雾:Furucombo被黑分析

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

攻击细节分析

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

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

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

Binance矿池推出BCH挖矿服务:7月27日消息,据官方公告,Binance 矿池推出比特币现金(BCH)挖矿服务,该服务采用 FPPS 结算方式。挖矿收益将在每日 18:00(东八区时间)之前自动存入用户的资金账户。[2023/7/27 16:01:56]

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

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

币安计划今年年中在哈萨克斯坦开设分支机构:金色财经报道,Binance计划到2023年年中在哈萨克斯坦开设分支机构。该公司区域主管vladimirsmerkis介绍称,该交易所将能够提供兑换和转换服务、法定货币的存取款、加密货币资产的存储和交易所交易。

2022年9月,币安在哈萨克斯坦获得了运营数字资产平台并在AIFC从事托管活动的许可证。[2023/4/28 14:33:09]

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

数据:交易所储备稳定币达411.86亿美元 创历史新高:金色财经报道,据区块链分析公司Glassnode最新数据显示,由于持币者寻求自我保管的安全,比特币以创历史记录的速度从交易所被提走,自11月6日以来交易所经历了一次史上最大的比特币总余额净下降,在7天内减少了7.29万枚BTC。对以太币也有类似的观察,上周有101万枚以太坊从交易所提走,这是自2020年9月 \"DeFi之夏 \"的高峰期以来最大的30天内余额下降。另一方面,稳定币大幅净流入交易所,11月10日,USDT、USDC、BUSD和DAI合计流入超过10.4亿美元,这是历史上第七大日净流入量,并将所有交易所储备中持有的稳定币推到了411.86亿美元的历史新高,其中BUSD的主导地位明显增加,在交易所储备中持有超过214.4亿美元。这可能是Binance最近对BUSD进行稳定币整合的结果,也是其作为世界上最大交易所的主导地位不断增强的结果。最近几个月,USDT的交易所储备略有下降,USDC的储备下降幅度更大,表明市场偏好的潜在转变正在进行。[2022/11/16 13:11:22]

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

数据:当前Solana生态总市值为264.9亿美元:金色财经消息,据CoinGecko最新数据显示,当前Solana生态总市值为264.9亿美元(截至发稿时为26,496,565,028美元),24小时交易额为2,473,155,227

美元。目前按市值排名前三的项目分别是:Solana(17,502,314,162美元)、STEPN(836,768,374美元)和Serum(360,364,532美元)。[2022/5/23 3:34:56]

最后一步,便是调用_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合约。如有授权,应及时撤销相关授权,避免进一步损失。

来源:金色财经

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

金星链

芝麻开门交易所下载OIN:火星能量MC币特点

火星能量MC币是可以让用户得到更多收益赚取的手机软件,这里提供的所有区块动态每天都会不断更新,让用户的投资任何时候都可以便捷去进行,提供给用户的赚取方式简单便捷.

[0:62ms0-1:18ms