Grim Finance是一个智能收益优化平台,允许用户将AMMs(自动做市商)发行的LP-Tokens押在Grim Vaults中,这些LP-Tokens会自动收获并将其奖励重新押在LP-Tokens上,以获得复合效应,帮助用户收获更多的奖励。
零时科技区块链安全情报平台监控到消息,北京时间2021年12月19日,Grim Finance官方发推文称平台被外部攻击者利用,攻击者盗币价值超过3000万美元,零时科技安全团队及时对该安全事件进行复盘分析。
-
攻击者钱包地址
https://ftmscan.com/address/0xdefc385d7038f391eb0063c2f7c238cfb55b206c
-
攻击者合约地址
https://ftmscan.com/address/0xb08ccb39741d746dd1818641900f182448eb5e41#code
-
攻击交易
https://ftmscan.com/tx/0x19315e5b150d0a83e797203bb9c957ec1fa8a6f404f4f761d970cb29a74a5dd6
-
GrimBoostVault合约
https://ftmscan.com/address/0x660184ce8af80e0b1e5a1172a16168b15f4136bf#code
以下将拆解攻击者交易,方便读者更清晰的了解攻击过程。
第一步:攻击者闪电贷借款30枚BTC和92万枚WFTM,并通过PancakePair将借款添加流动性获取0.0476枚Spirit LP。
第二步:将获取的Spirit LP质押后获得GB-BTC-FTM。
第三步:通过多次质押存款获取GB-BTC-FTM(攻击的主要部分,通过未验证的Token不断质押,提高质押奖励的差值)。
第四步:将获取的GB-BTC-FTM归还,获得0.0663枚Spirit LP(已通过多次质押差值获利)。
第五步:解除流动性获取41枚BTC和128万枚WFTM,并归还闪电贷借款及手续费,随后将获利的11枚BTC和36万枚WFTM转至攻击者钱包地址。
攻击者通过同样的攻击手法继续进行了8次攻击,如下图
至此
攻击者通过9笔攻击交易共获取累计获取26万枚BTC,1865万枚,75万枚DAI,75万枚USDC,13万枚BOO,价值约3000万美元。
下来通过合约代码了解漏洞发生原因。
通过查询交易详情可以找出本次攻击中使用的合约方法主要有两个:
GrimBoostVault.depositFor方法,用户质押资金并返回相应的证明代币。
GrimBoostVault.withdrawAll方法,用户归还证明代币获取对应的质押资金。
通过交易分析我们可以得知,攻击者成功的第三步主要是由于多次运转depositFor方法造成,首先来分析该方法,通读depositFor方法流程,主要是判断用户将资金质押转入合约后,计算合约余额差值,随后将差值进行计算后发送给用户相应的质押证明代币。乍一看貌似没有安全问题,但细心的同学会发现,这里的token地址并没有做固定限制,该token地址是由用户传入,由于depositFor方法中会用到token合约地址中的safeTransferFrom方法,token合约地址为用户可控后,safeTransferFrom方法随之可控。
现在可明确攻击者的攻击路径,首先创建Token合约,并在合约中的safeTransferFrom方法中写入重新调用GrimBoostVault.depositFor方法的逻辑,在进行多次重入后最后传入一笔正常的Token代币质押,之后虽然会进入到正常流程,但是由于之前的多次重入,导致获取合约余额的前后差值过大,最终铸造了大量的证明代币。
例如:攻击者进行了6次重入,最后一次传入资金为100,那么最终得到的差值就是100*6,铸币时的计算值也是600。
重入成功后,攻击者调用withdrawAll方法归还重入获取的大量证明代币获取对应的质押资金,完成获利。
目前,Grim Finance官方已暂停所有金库,并提醒用户尽快提取自身所有资金,暂未声明合约修改方案和补偿方案。
0x5 总结
-
对于合约代码安全,可找多家安全审计公司进行审计。
-
对于涉及资金转账的方法,应进行严格的权限控制。
-
对敏感性较强的代码,要做到及时更新完善。
?扫描关注零时科技服务号?
?区块链安全威胁情报实时掌握?
出品 | 零时科技安全团队
·END·
关注
往期内容回顾
区块链安全100问 | 第四篇:保护数字钱包安全,防止资产被盗
区块链安全100问 | 第五篇:黑客通过这些方法盗取数字资产,看看你是否中招?
零时科技 | 被盗6.1亿美金,Poly Network 被攻击复盘分析
原文始发于微信公众号(零时科技):零时科技 | DeFi平台Grim Finance攻击事件分析