著名DeFi项目Furucombo被黑,损失超1500万美元。慢雾安全团队第一时间介入分析,并将攻击细节分享给大家。
攻击细节分析
本次发生问题的合约在Furucombo本身的代理合约当中。整个攻击流程很简单。攻击者通过设置了Furucombo的AaveV2Proxy的逻辑地址导致后续通过Furucombo代理合约调用的逻辑全部转发到攻击者自己的恶意合约上,导致任意资金被盗。
但是如果事情那么简单,那么本次分析不值一提。问题远比想象的复杂得多。
如上图所示攻击者的入口在Furucombo的batchExec函数,我们先对batchExec函数进行分析:
美国2021财年预算赤字为2.77万亿美元:根据美国2021财年预算结果声明,美国2021财年预算赤字为2.77万亿美元。 (金十)[2021/10/23 20:50:21]
以上是FurucomboProxy合约的batchExec函数的具体实现,其中_preProcess和_postProcess合约分别是对调用前后做一些数据上的处理,不涉及具体的调用逻辑,这边可以先忽略。我们主要观察核心的_execs函数:
通过对execs代码的分析不难发现,函数的主要逻辑是对configs数组的数据做检查,并根据configs数组的数据对data进行一些处理。但是回顾上文中攻击者的调用数据,不难发现攻击者的调用数据中,configs的数据是一个0地址:
Higer:2020年最耀眼的不是比特币 而是DeFi:金色财经年度巨献洞见财富密码2021投资策略会持续进行中,区块链研习社Higer《如何布局DeFi下一爆发点》的精华看点如下:
目前,排名前20的加密资产里已经呈现了一种正在发生着的趋势,就是DeFi代币越来越多,未来这个趋势还会加速。
在2020年DeFi锁仓金额实现了30倍的增长,各细分领域不断演化且表现优异,Aave涨幅5000%、YFI涨幅2350%、Melon涨幅960%,涨幅500%以上的还有:LINK、REN、LRC、BNT等。
在2021年Uniswap、AAVE、YFI等头部项目可能继续加大产品创新并受到追捧,与此同时,一些创新项目在短期内还会吸引广泛关注,比如比特币锚定币以及算法稳定币。
但是DeFi世界变化太快,而投资的核心是观察项目的增长数据,项目之间的竞争非常激烈,没有一个赛道能稳坐宝座,Cover对NXM的挑战就是一个例子。[2020/12/30 16:06:01]
这里有一个trick,由于?0地址是一个EOA地址,所有对EOA地址的函数调用都会成功,但是不会返回任何结果。结合这个trick,execs函数中的关于configs数据的部分可以先暂时忽略。直接看到最后的核心_exec函数:
BiKi平台已完成2020第1季度回购销毁,总量为2030万枚BIKI:据官方公告,2020年第1季度,BIKI销毁总量为2030万枚,回购均价为0.074USDT,回购资金总额150.22万USDT,其中回购销毁数量为现货手续费回购销毁1560万枚、合约手续费回购销毁470万枚,本次销毁数量占流通盘的5.38%;
BIKI初始发行总量10亿枚,累计回购销毁了4.178亿枚,目前总供给量更新5.822亿,流通量为3.76亿,团队和基金会未流通量部分为2.06亿,平台币将持续销毁到剩余1亿枚为止;
目前BIKI的使用场景有BIKI抵扣手续费7.5折等多种福利政策。详情见原文链接。[2020/4/16]
_exec函数的逻辑也很简单,在校验了_to地址后,直接就将data转发到指定的_to地址上了。而通过对攻击交易的分析,我们能发现这个_to地址确实是官方指定的合法地址。
声音 | 慢雾:ETDP钱包连续转移近2000 ETH到Bitstamp交易所,项目方疑似跑路:据慢雾科技反(AML)系统监测显示,自北京时间 12 月 16 日凌晨 2 点开始,ETDP 项目方钱包(地址 0xE1d9C35F…19Dc1C3)连续转移近 2000 ETH 到 Bitstamp 交易所,另有 3800 ETH 分散在 3 个新地址中,未发生进一步动作。慢雾安全团队在此提醒交易所、钱包注意加强地址监控,避免相关恶意资金流入平台。[2019/12/16]
最后一步,便是调用_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合约。如有授权,应及时撤销相关授权,避免进一步损失。
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。