重入攻击如何防范?—OMNI被攻击事件分析
摘要: OMNI合约遭受黑客攻击,黑客获利约 425.5 ETH,约456,267.905美元。
2022年7月11日,成都链安链必应-区块链安全态势感知平台舆情监测显示,OMNI合约遭受黑客攻击,黑客获利约 425.5 ETH,约456,267.905美元。成都链安安全团队对事件进行了分析,结果如下。
#事件相关信息
OMNI 是一个去中心化协议,可以为以太坊区块链上的各种资产提供借贷服务。
•攻击者地址
攻击者:
0x627a22ff70cb84e74c9c70e2d5b0b75af5a1dcb9
攻击者合约:
0x5992f10a5b284be845947a1ae1694f8560a89fa8
0x23f8770bd80effa7f09dffdc12a35b7221d5cad3
0x948d6fe8a7e9ebbb672508e7e93d58c6cfbd3d3f
0x5133647aae89f1ff301f4d1ca70623459ff1ad20
0x4d97b179dc9248b6318e458e6588f83bd0cbfa8b
0x259e45e6dec75530c2bbc9a60429733fb709ff90
0x0e7f758f470eb97428c73bf130ee1708886c8fca
0x2c67224dd2cb2562822cf56142fcdbc4a556a408
0x7ed6c98dafdcea4ff448716a862c1e9c575e2f63
0x606c2590d68b4f7b5a7ea1e8a8bbfaf375506891
0x57e9b3f7f1a58e08ad1707eefe92b9ae4376d209
•攻击交易
0x05d65e0adddc5d9ccfe6cd65be4a7899ebcb6e5ec7a39787971bcc3d6ba73996
0xbebcd50e9c337c02bfe198ae7d10ffc0aaa8160d2ff4dda9f5a1dcfb4c04dde9
0xaddf0624e2dcf0bdbba18be77be40b62c9264ff85dfb7244ad36a67029673b82
•被攻击合约:
0x218615c78104e16b5f17764d35b905b638fe4a92
#攻击过程
本次攻击以
0x05d65e0adddc5d9ccfe6cd65be4a7899ebcb6e5ec7a39787971bcc3d6ba73996为例进行阐述,攻击流程图如下:
1.攻击者通过闪电贷借出1000个WETH和20个NFT(DOODLE代币),质押id为720、5251和7425的NFT;
2.通过步骤1中的质押,借出12.15个WETH;
3.攻击者调用withdrawERC721函数提取出id为720和5251的NFT;
4.步骤3过程中会调用Ntoken合约burn函数,其内部会调用safeTransferFrom函数把NFT发送给攻击者合约,并回调攻击者合约的onERC721Received函数;
5.攻击者在攻击合约的onERC721Received函数中重入 Pool合约的liquidationERC721函数对id为7425的NFT进行清算;
6.在此清算的过程中,会调用了_burnCollateralNTokens函数销毁攻击者合约的凭证币以及归还抵押的NFT,所以又一次调用了safeTransferFrom函数触发攻击者合约的onERC721Received函数;
7.攻击者再次重入,将闪电贷借来的20个NFT全部质押;
8.借出81个WETH后回到liquidationERC721函数中,将攻击者的借贷状态设置为false;
9.已经将攻击者的借贷状态设置为false,即把用户的借贷状态改为未借贷,所以可成功提取。
#漏洞分析
本次攻击的主要原因在于提取质押品时销毁凭证NFT的相关函数以及清算后NFT转账函数可触发外部合约的回调,构成重入漏洞;并且在用户质押品被清算后会更新用户的借贷状态,导致了攻击者可利用重入进行质押借贷后进行清算,使得该用户的借贷状态被设置为无借贷,可顺利提取出质押的NFT。
#资金追踪
截止发文时,攻击者攻击获利的425.5 ETH已经全部进入Tornado.Cash。
#总结
针对本次事件,成都链安安全团队建议:
1.在关键函数中做好防重入措施。
2.项目上线前,建议选择专业的安全审计公司进行全面的安全审计,规避安全风险。
评论(0)
Oh! no
您是否确认要删除该条评论吗?