闪电贷和重入攻击:Grim Finance被黑事件分析

  • SharkTeam
  • 更新于 2022-03-03 16:04
  • 阅读 2829

Fantom链上收益协议Grim Finance遭遇闪电贷攻击

北京时间12月19日,Fantom链上收益协议Grim Finance遭遇闪电贷攻击,损失超过3000万美元,之后Grim Finance暂停了所有金库的功能,并提醒用户及时撤出个人资产。

SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。

一、事件分析

整个攻击过程中,攻击者攻击了Grim Finance的多个LP金库合约和单币金库合约,包括以下交易:

最后将获得到token通过AnySwap跨链转账转移到其他公链,比如FTM跨链交易如下:

以交易0x19315e5b150d0a83e797203bb9c957ec1fa8a6f404f4f761d970cb29a74a5dd6为例,详细说明攻击工程,如下:

  1. 闪电贷并添加流动性。通过闪电贷借款937830 WFTM 以及 30 BTC,然后向WFTM/BTC Pancake交易对添加流动性,获得 0.0476 SPIRIT-LP 流动性凭证。

  1. 质押流动性凭证到金库合约并铸造份额代币。

攻击合约通过GrimBoostVault合约中的depositFor函数将流动性通证质押到金库中,铸造得到316 GB-BTC-FTM的份额代币。

在该过程中,因为depositFor函数并没有对参数token进行校验,即可以传递任意的token来铸造份额代币,攻击者合约通过传递自定义的token合约(攻击合约地址)来铸造份额代币。

通过自定义token合约中的safeTransferFrom函数多次实现depositFor函数的重入。

在最后一次重入调用depositFor函数时传递正确的WFTM/BTC SPIRIT-LP交易对地址以及0.0476 SPIRIT-LP。

如此重复铸造份额代币,最终使得GrimBoostVault 合约为攻击者铸造了远多于预期的份额代币(316 GB-BTC-FTM)。

  1. 根据份额代币提取流动性凭证。

攻击合约根据铸造的远多于预期的份额代币(316 GB-BTC-FTM)提取到了0.0663 SPIRIT-LP,明显比实际质押的0.0476 SPIRIT-LP要多。

  1. 移除流动性并闪电贷还款。

  1. 将剩余的362770 WFTM以及11.78 BTC转账到攻击者账户地址。

本次攻击的根本原因在于:因为Grim合约中的depositFor函数没有对参数token进行校验,即可以传递任意的token来铸造份额代币。攻击者通过传递自定义的token合约(攻击合约地址)来铸造份额代币,通过自定义token合约中的safeTransferFrom函数实现对depositFor函数的重入,最终造成GrimBoostVault 合约为攻击者铸造出远多于预期的份额代币(316 GB-BTC-FTM)

二、安全建议

SharkTeam提醒您,在涉足区块链项目时请提高警惕,选择更稳定、更安全,且经过完备多轮审计的公链和项目,切不可将您的资产置于风险之中,沦为黑客的提款机。

SharkTeam作为领先的区块链安全服务团队,为开发者提供智能合约审计服务。智能合约审计服务由人工审计和自动化审计构成,满足不同客户需求,独家实现覆盖高级语言层、虚拟机层、区块链层、业务逻辑层四个方面近两百项审计内容,全面保障智能合约安全

Twitter:https://twitter.com/sharkteamorg

Telegram:https://t.me/sharkteamorg

更多区块链安全资讯与行业分析,点击下方链接查看 image.png D查查|链上风险核查

点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
SharkTeam
SharkTeam
0xC0f5...8888
SharkTeam是领先的Web3安全服务提供商,提供智能合约审计、链上分析和应急响应服务。 Web: https://www.sharkteam.org Telegram: https://t.me/sharkteamorg Twitter:https://twitter.com/sharkteamorg