COM:慢雾:Furucombo被黑分析

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

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

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

慢雾:过去一周加密领域因安全事件累计损失3060万美元:7月24日消息,据慢雾统计,上周加密领域因遭遇攻击累计损失3060万美元,攻击者利用了不同的攻击向量。这些事件包括Alphapo热钱包被盗(损失2300万美元)、Conic Finance遭闪电贷攻击(损失30万美元)以及重入攻击(损失320万美元)、GMETA发生RugPull(损失360万美元)、BNO遭闪电贷攻击(损失50万美元)等。[2023/7/24 15:55:56]

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

慢雾:警惕针对 Blur NFT 市场的批量挂单签名“零元购”钓鱼风险:金色财经报道,近期,慢雾生态安全合作伙伴 Scam Sniffer 演示了一个针对 Blur NFT 市场批量挂单签名的“零元购”钓鱼攻击测试,通过一个如图这样的“Root 签名”即可以极低成本(特指“零元购”)钓走目标用户在 Blur 平台授权的所有 NFT,Blur 平台的这个“Root 签名”格式类似“盲签”,用户无法识别这种签名的影响。慢雾安全团队验证了该攻击的可行性及危害性。特此提醒 Blur 平台的所有用户警惕,当发现来非 Blur 官方域名(blur.io)的“Root 签名”,一定要拒绝,避免潜在的资产损失。[2023/3/7 12:46:39]

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

慢雾:V神相关地址近日于Uniswap卖出3000枚以太坊:11月14日消息,据慢雾监测显示,以太坊创始人Vitalik Buterin地址(0xe692开头)近日在Uniswap V3上分三笔将3000枚以太坊(约400万美元)兑换成了USDC。[2022/11/14 13:03:22]

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

慢雾:2021年上半年共发生78起区块链安全事件,总损失金额超17亿美元:据慢雾区块链被黑事件档案库统计,2021年上半年,整个区块链生态共发生78起较为著名的安全事件,涉及DeFi安全50起、钱包安全2起,公链安全3起,交易所安全6起,其他安全相关17起,其中以太坊上27起,币安智能链(BSC)上22起,Polygon上2起,火币生态链(HECO)、波卡生态、EOS上各1起,总损失金额超17亿美元(按事件发生时币价计算)。

经慢雾AML对涉事资金追踪分析发现,约60%的资金被攻击者转入混币平台,约30%的资金被转入交易所。慢雾安全团队在此建议,用户应增强安全意识,提高警惕,选择经过安全审计的可靠项目参与;项目方应不断提升自身的安全系数,通过专业安全审计机构的审计后才上线,避免损失;各交易所应加大反监管力度,进一步打击利用加密资产交易的等违规行为。[2021/7/1 0:20:42]

动态 | 慢雾:Electrum“更新钓鱼”盗币攻击补充预警:Electrum 是全球知名的比特币轻钱包,支持多签,历史悠久,具有非常广泛的用户群体,许多用户喜欢用 Electrum 做比特币甚至 USDT(Omni) 的冷钱包或多签钱包。基于这种使用场景,Electrum 在用户电脑上使用频率会比较低。Electrum 当前最新版本是 3.3.8,而已知的 3.3.4 之前的版本都存在“消息缺陷”,这个缺陷允许攻击者通过恶意的 ElectrumX 服务器发送“更新提示”。这个“更新提示”对于用户来说非常具有迷惑性,如果按提示下载所谓的新版本 Electrum,就可能中招。据用户反馈,因为这种攻击,被盗的比特币在四位数以上。本次捕获的盗币攻击不是盗取私钥(一般来说 Electrum 的私钥都是双因素加密存储的),而是在用户发起转账时,替换了转账目标地址。在此我们提醒用户,转账时,需要特别注意目标地址是否被替换,这是近期非常流行的盗币方式。并建议用户使用 Ledger 等硬件钱包,如果搭配 Electrum,虽然私钥不会有什么安全问题,但同样需要警惕目标地址被替换的情况。[2020/1/19]

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

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

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

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

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

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

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

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

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

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

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

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

地球链

[0:15ms0-1:49ms