重入攻击是什么?一文解读智能合约中的重入攻击

时间:2024-06-12  分类:电子

重入攻击是智能合约最常见的攻击之一,这在之前许多攻击事件中都可以看到。


2021年8月17日,BSC上DeFi项目XSURGE遭遇闪电贷攻击。


当地时间8月16日,XSURGE官方在遭攻击前曾发布了关于SurgeBNB漏洞的声明,由于SurgeBNB合约不可更改且已被放弃,因此无法修补该漏洞。XSURGE称没有透露任何关于此漏洞性质的具体细节,但强烈建议用户尽快迁移出SurgereBnb,该漏洞随时可能被攻击者触发。在声明发布后,XSURGE随后便遭遇攻击,攻击者在SurgeBNB中窃取了500万美元。


攻击过程如下:


(1)首先攻击合约通过闪电贷从PancakeSwap中借了10000BNB


(2)攻击合约使用10000BNB买入SURGE,将买入的BURGE卖出,调用BurgeToken合约中的sell函数。在BNB转账的时候,攻击合约再次将收到的BNB转账到了BurgeToken合约中,再次触发了购买BURGE的业务。根据sell函数的代码以及BurgeToken合约的receive函数,的确可能在sell过程中发生转账,然后在sell函数尚未修改状态变量之前再次购买BURGE。


(3)在sell函数中重入了purchase函数,在重入的purchase函数中,_totalSupply没有减掉sell函数中卖出的BNB数量,造成可以买入更多的SURGE。


(4)攻击者合约中获取了高达3,896,288,852,239,440,000BURGE,兑换成BNB有22191BNB,偿还了闪电贷以及手续费10030BNB,剩余的12161BNB为攻击者此次攻击获取的利润,最后将获得的BNB转入到攻击者的账户。


2022年3月16日,Gnosis链上的借贷类协议HundredFinance与Agave均遭遇了闪电贷袭击,包括AAVE的分支Agave和Compound的分支HundredFinance。损失超1100万美元。


攻击过程如下:


(1)从SushiSwap上通过闪电兑借出USDC和wXDAI


(2)抵押1,200,000个USDC,并借贷59,999,789.075个hUSDC


(3)继续超额借贷出其他代币,并且重复相同攻击多次


(4)归还闪电贷,完成攻击


可以看出,本次攻击的根本原因是因为合约存在超额借贷漏洞,通过分析具体的合约我们发现合约中存在重入问题,导致攻击者可以完成攻击并进行超额借贷。


2022年3月27日,RevestFinance遭到黑客攻击。


黑客利用了Revest合约的逻辑漏洞盗取了近770万枚ECO、579枚LYXe、近7.15亿枚BLOCKS以及超35万枚RENA,价值约200万美元。黑客攻击使用从TornadoCash取出的资金发动了攻击,通过SushiSwap以及Uniswap将盗取的Token兑换成了ETH,最后通过TornadoCash平台将ETH转移到了其他账户。


攻击过程如下:


(1)首先,攻击者通过UniswapV2的闪电兑换功能调用Revest合约中的mintAddressLock函数


(3)在mintAddressLock函数完成前调用_mint函数时,攻击者重入了depositAdditionalToFNFT函数【ERC1155onERC1155Received重入】。


(4)由于NFTnextId(即FNFTHandler.fnftsCreated)在mint函数铸造NFT完成并进行更新。因此,在重入调用depositAdditionalToFNFT函数时,NFTId仍然是1027,nextId任仍然是1028。另外,合约并未验证1028的Token数量是否为0,攻击者再次成功地铸造了1个ID为1028的NFT。


2022年7月10日,去中心化金融协议NFT市场Omni因智能合约漏洞遭到黑客闪电贷攻击,耗尽了1300ETH,约143万美元。


这次攻击交易hash:0x264e16f4862d182a6a0b74977df28a85747b6f237b5e229c9a5bbacdf499ccb4


攻击过程如下:


(1)首先,攻击者通过Balancer借贷平台闪电贷1000ETH


(2)通过函数flashLoan闪电贷20个DOODLE


(3)通过SushiSwap平台使用WETH兑换了1个DOODLE


(4)赎回20个NFT,tokenId=2574,2595,6851,8522,8883,


(5)抵押NFT(supplyERC721),tokenId=5251,4777,3693,然后铸造nDOODLE


(6)借贷WETH(borrow),数量为12.15ETH


(7)提取抵押的3个NFT中的2个,tokenId=5251,4777


(8)销毁抵押NFT时铸造的nDOODLE,然后调用safeTransferFrom函数将抵押的NFT转移到攻击合约,攻击者利用onERC721Received函数发起了重入攻击


(9)质押的3个NFT提取了两个,还剩下一个tokenID=3693的NFT,此时抵押仓位,攻击者在重入攻击中实现了自我清算,清算完成后,将借贷设置为false。


(10)在转移剩下的NFT时再次发生重入,此次重入,攻击者抵押了全部的20个NFT,然后铸造nDOODLE,以此做抵押,借贷了81WETH。最后,将所有的20个NFT提取出来。


(11)重复以上抵押、铸造、销毁等操作,最终获利148.8ETH。


在本次事件中,由于safeTransferFrom函数调用onERC721Received函数引起的重入漏洞。攻击者利用该漏洞发起了重入攻击,最终获利。


回顾了这么多的重入攻击事件,可想而知重入漏洞在智能合约中是多么常见。


2022中国国际金融年度论坛于2022年9月2日在北京举行,中国人民银行数字货币研究所所长穆长春发表了关于智能合约与数字人民币主题演讲。穆长春表示,数字人民币智能合约应用场景比较广泛,可以降低经济活动的履约成本,优化营商环境,推动数字经济深化发展。由于智能合约的可信任、可互通优势,可以更好的支撑数字经济。


一边是推动智能合约与数字人名币的发展,一边是频繁发生的合约安全问题,我们应该采取哪些有效预防措施,避免损失,保障安全?



-->> 2/2 文章结束,返回第一页

以上就是 重入攻击是什么?一文解读智能合约中的重入攻击的全部内容,望能这篇 重入攻击是什么?一文解读智能合约中的重入攻击可以帮助您解决问题,能够解决大家的实际问题是非常好学习网一直努力的方向和目标。