2023年2月21日,CertiK发现了2023年迄今为止Arbitrum上最大的退出骗局。一个最近推出的名为Hope Finance的项目,号称在骗局中损失了180万美元。然而经过调查后发现,这场骗局竟与该项目团队自身的相关钱包有关。该钱包地址在策划了一个获取存款的后门后,抽走了Genesis Rewards Pool奖池的大量资金,造成了该起骗局。
事件过程
Hope Finance 于2月1日开始宣传他们的项目,并宣布预计在UTC时间2月20日下午两点启动。然而,启动没多久,一个外部地址(EOA)很快就耗尽了该项目的Genesis Rewards Pool奖金池。
起初来看,Hope Finance项目似乎是被黑客发现漏洞并利用了。然而在检查该团队的一些钱包活动后,CertiK专家发现该项目是一个退出骗局。
当然,并非所有与Hope Finance公司有关的团队成员都参与了该起退出骗局。事后,该项目的推特账户发布了一张他们声称“骗局负责人”的图片,同时还附上其身份证等信息。
被指控的人员是一名尼日利亚学生,大家很快找到其Linkedin账号,尽管没有发表过任何动态,但仍可确认该Linkedin账号属于该学生。
CertiK安全专家发现,一旦外部地址EOA 0x...9113调用含有关键漏洞的OpenTrade函数,Genesis Rewards Pool合约的资金就会被抽走。总价值186万美元的被盗资金在被桥接到了以太坊之后存入到了Tornado Cash。
为了抽走Genesis Rewards Pool资金池的资金,EOA 0x...9113创建了一个假的路由器合约,并将这个地址更新为Genesis Rewards Pool资金池内的 SwapHelper。
虽然这会带来私钥泄露的嫌疑,但它也意味着,需要多签钱包四个所有者中的三个得到确认。即: 任何外部黑客都必须在任何资金被盗之前破坏三个外部地址(EOA)。虽然这不是完全不可能,但是概率很小。
当检查0x8EBd0(Hope Finance multisig多签钱包时)所有者EOA时,我们可以看到EOA 0x11a9b和0xe1c37没有交易历史。一个钱包是奖池创建者,另一个钱包最初由Binance资助。
链上分析
① 该事件是从0x4481A创建了一个未经验证的假路由器合约开始。
② 然后GenesisRewardPool(0xdfcb)被用来更新SwapHelper,将路由器地址改为第一步创建的假地址。这个setRouter更新需要多签钱包0x8ebd的四个所有者中三个所有者的批准。
对setRouter的更新进行多签批准
③ 0x4481A调用了假的路由器合约,并调用0x3c6455ac函数用以更新_swapExactTokenForTokens和_USDC两个参数,其中第一个参数被设置为0x957D,第二个留了空白。
④ 0x4481A两次调用OpenTrade,用于借入资金,一次用于Pool 0 (WETH),另一次用于Pool 1 (USDC)。两次OpenTrade调用,总共向0x957D转移了477 枚WETH和1,061,759 枚USDC。
对于Pool 0,OpenTrade的调用触发了477枚WETH转移到Hope TradingHelper。此时,WETH会被正常的发送到swap地址并转换为USDC。
另外一边,在对0x1994函数反编译后,我们可以看到变量`v9`被赋值为`address(varg2[0x0])`,也就是交换`path`中的第一个token,即WETH。同时变量`v2`被赋值为预先设定的接收地址,即0x957D。而`v17`被赋值为`TradingHelper`地址,该地址存储了所有的WETH。
下图的一行代码,仍然是在_swapExactTokensForTokens函数中,将地址(单独计算)的477WETH从msg.sender的v17转移到了接收地址0x957D。
⑤ 两次OpenTrade调用,总共向0x957D转移了477 枚WETH和1,061,759 枚USDC。这些资金通过CelrBridge桥接到以太坊,并转换为总共1,095个ETH,然后被发送到Tornado Cash。
警惕!内鬼交易!
如今,很多项目都是内部人员作案,甚至自导自演声称自己是受害者。CertiK过去曾发布文章【「停止交易」!Web 3.0如何远离靠2美元就加入项目的「内鬼」?】报道过这一风险,我们有许多工具可供希望提高安全性和保护项目不受内部不良分子影响的Web3.0项目使用。