重入攻击如何防范?—OMNI被攻击事件分析

Beosin
Beosin 机构得得号

Jul 13, 2022 Beosin是总部位于新加坡的全球知名区块链安全公司,为区块链生态提供代码安全审计,安全风险监控、预警与阻断,虚拟资产被盗追回,KYT/AML等“一站式”安全产品+服务,已为全球2000多个区块链企业服务,保护客户资产5000多亿美元。

摘要: 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.项目上线前,建议选择专业的安全审计公司进行全面的安全审计,规避安全风险。

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 Beosin 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信