SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

NFT金融协议Omni因智能合约漏洞遭到黑客闪电贷攻击,耗尽了1300ETH,损失约143万美元。

7月10日,NFT金融协议Omni因智能合约漏洞遭到黑客闪电贷攻击,耗尽了1300ETH,损失约143万美元。

近期NFT流动性市场安全问题频发。SharkTeam第一时间对此事件进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

一、 事件分析

攻击者创建多个攻击合约并发起了多次攻击,以其中一笔攻击交易为例:

攻击者地址:0x00000000c251faf2de8217ab64accd0070b97e47

攻击合约地址:0x3c10e78343c475b99d20fa544dd30b43c0cba26f

攻击者在创建了攻击合约后,通过攻击合约发起了攻击交易,攻击交易如下:

txHash: 0x264e16f4862d182a6a0b74977df28a85747b6f237b5e229c9a5bbacdf499ccb4

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

攻击者在该交易中获利148.8 ETH,攻击过程如下:

  1. 首先,攻击者通过Balancer借贷平台闪电贷1000 ETH
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
  1. 通过函数flashLoan闪电贷20个DOODLE
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
  1. 通过SushiSwap平台使用WETH兑换了1个DOODLE
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
  1. 赎回20个NFT,tokenId = 2574, 2595, 6851, 8522, 8883, ……
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
  1. 抵押NFT(supplyERC721),tokenId = 5251, 4777, 3693,然后铸造nDOODLE
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
  1. 借贷WETH(borrow),数量为12.15 ETH
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
  1. 提取抵押的3个NFT中的2个,tokenId = 5251, 4777
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

(1)销毁抵押NFT时铸造的nDOODLE,然后调用safeTransferFrom函数将抵押的NFT转移到攻击合约。

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

safeTransferFrom函数如下:

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

攻击者利用onERC721Received函数发起了重入攻击。

质押的3个NFT提取了两个,还剩下一个tokenID = 3693的NFT,此时抵押仓位,攻击者在重入攻击中实现了自我清算

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

即支付WETH,销毁nDOODLE,提取tokenId = 3693的NFT,在转移NFT时再次发生重入。

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

此次重入,攻击者抵押了全部的20个NFT,然后铸造nDOODLE,以此做抵押,借贷了81 WETH。

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析
SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

最后,将所有的20个NFT提取出来。

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

那么,黑客为什么可以将重入中质押的NFT提取出来呢?

原因是在重入发生前,攻击者自我清算了所有抵押的NFT,清算完成后,将借贷设置为false。,即没有抵押和借贷。

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

在重入发生后,该状态一直没有改变。准确的说,重入后修改的状态并不是重入前以及提取时的状态

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

重入前:

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

重入后:

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

修改的userConfig的状态变量对应着不同的地址,因此最后可以将所有的NFT提取出来。

  1. 重复上述步骤5 – 7,最终获利148.8 ETH。

攻击者在完成攻击后,将获得的ETH存入Tornado.Cash平台。

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

此外,该攻击者的账户地址最初的资金同样来自于Tornado.Cash平台。

SharkTeam独家分析 | 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析

以上分析,本次安全事件发生的根本原因是合约存在重入漏洞,而且是safeTransferFrom函数调用onERC721Received函数引起的。攻击者利用该漏洞发起了重入攻击,最终获利。

二、安全建议

引发本次安全事件的根本原因是合约存在重入漏洞。针对重入漏洞,我们提出以下建议,将有效帮助您规避重入带来的风险:

  1. 使用重入锁机制,如继承Openzeppelin标准库中的重入锁合约。
  2. 应用check-effects-interactions模式,即先修改状态变量,然后进行外部调用
  3. 发送ether使用transfer函数,尽量不使用call和send函数,transfer函数只允许消耗2300 gas,不足以使目的地址调用另一份智能合约。

此外,选择多个专业的智能合约审计团队进行审计,也是提高合约安全性的重要保障

(声明:请读者严格遵守所在地法律法规,本文不代表任何投资建议)

(0)
上一篇 2022年7月12日 下午2:28
下一篇 2022年7月12日 下午4:07

相关推荐

  • 伪装项目程序扫描你的电脑私钥等文件:Redline Stealer木马盗币分析

    据我们了解,这种攻击主要是通过 Discord 邀请用户参与新的游戏项目内测,打着 “给予优惠” 等幌子,或是通过群内私聊等方式发一个程序让你下载,一般是发送压缩包,解压出来是一个大概 800 M 左右的 exe 文件,一旦你在电脑上运行,它会扫描你电脑上的文件,然后过滤包含 Wallet 等关键词的文件上传到攻击者服务器,达到盗取加密货币的目的。

    2022年9月7日
  • 一文详解AIGC:如何助推元宇宙发展?

    由 AI 作画应用 Midjourney 生成的绘画作品《太空歌剧院》在今年 9 月美国科罗纳州博览会上获得艺术比赛一等奖,吸引了不少人的眼球。今年以来连续好几个 AIGC 领域的项目获得了不错的融资, 到底 AIGC 有什么特别之处?本文中,PANews 将对 AIGC 近来的发展作一个梳理介绍。

    2022年11月28日
  • CoinLoan 降低提现额,又一批 CeFi 进入暴雷倒计时

    7 月 4 日,加密资产借贷平台 CoinLoan 宣布,将用户每日提款限额从 50 万美元降低至 5000 美元,该平台将原因归咎于同类竞品平台的流动性问题引发恐慌、导致用户从 CoinLoan 提款激增。

    2022年7月6日

发表回复

登录后才能评论
微信

联系我们
邮箱:whylweb3@163.com
微信:gaoshuang613