热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

重入攻击如何破解?DexFinance损失约400万美元攻击事件分析

2022 年 11 月 10 日,根据区块链安全审计公司 Beosin 旗下Beosin EagleEye 安全风险监控、预警与阻断平台监测显示,Dex Finance 合约遭到黑客重入攻击,造成了约
2022 年 11 月 10 日,根据区块链安全审计公司 Beosin 旗下Beosin EagleEye 安全风险监控、预警与阻断平台监测显示,Dex Finance 合约遭到黑客重入攻击,造成了约 400 万美元的损失,而漏洞的关键点在于闪电贷业务与合约其他业务的组合性问题。Beosin 安全团队现将事件分析结果与大家分享如下。

* 该攻击漏洞与某个 CTF 挑战题目非常类似(CTF 题目链接:damnvulnerabledefi.xyz/challenges/4.html)。

#闪电贷背景介绍


我们先来看看正常闪电贷的逻辑:
1、获取用户传入的贷款币种与数量;
2、将用户指定代币发送给用户;
3、调用用户的指定函数;
4、判断用户是否归还借出代币。

仅看闪电贷的逻辑,并不能发现有什么问题,但一般闪电贷项目都不仅仅只提供闪电贷服务,有些还会提供质押、提取等业务,那这就存在一个潜在问题,如果用户在指定函数中将借出的代币再次进行抵押,而抵押的合约正是闪电贷合约,那么是否存在闪电贷将抵押代币错当成用户归还的代币的可能呢?

答案显而易见是肯定的。让我们仔细想想,用户在闪电贷中重新抵押代币之后,影响的是闪电贷合约中代币的数量,如果闪电贷在第 4 步判断用户是否归还借出代币的依据是根据合约前后余额来判断,那么会出现什么问题呢?

则用户便可以在闪电贷过程中使用抵押的方式使得合约余额增加到最初始的值,而抵押后,抵押业务会将这笔代币当作是用户抵押的资产,可供用户后续提取,而闪电贷业务会将这笔代币当作是用户归还的资产,而通过最终验证。换句话说,同样一笔钱,获得了两次使用,使得用户可以在闪电贷结束之后,凭空多出一笔抵押的“存款”。

接下来进入本次事件主题,本次的主角,便是这类项目。由于攻击交易繁多,选择其中一条交易进行分析。

#事件相关信息


攻击交易: 

0x52c53c5a2ae3082b8765dd5924d6ad0dc704223f6d0c98325a1b9ccd9d134ef7
黑客地址: 
0x14c19962e4a899f29b3dd9ff52ebfb5e4cb9a067
黑客合约: 
0x6cfa86a352339e766ff1ca119c8c40824f41f22d

#攻击流程


1.首先,攻击者通过DEX项目的闪电贷业务借出14w美元的XIDR代币与9.5w美元的USDC,但从代币交易看来,黑客立马就归还了闪电贷,这就有点不合逻辑了,一般闪电贷借出资金后,会进行一些其他交易,最终再进行还款。所以我们得从交易具体数据来分析。

 
2.从交易数据来看,黑客并不是归还了闪电贷,而是在闪电贷中进行了抵押操作,这就和我们上面说的很像。

 3.我们来看看 DEX 合约代码。
 
4.还真是这样,项目方在进行用户归还判断的过程中,使用的是前后余额来进行判断。那我们再来看看抵押函数与提取函数:

deposit:
 
withdrew:
 
5.可以看到,在 deposit 函数中,攻击者将代币转给闪电贷合约提供流动性,合约给攻击者铸了凭证代币,而攻击者拿着凭证代币便可使用 withdraw 函数将代币提取出来。而最终闪电贷判断也将通过。

6.攻击者进行了多次的攻击,共获利 400w 美元左右。Beosin Trace 正在对被盗资金进行实行监控。

#总结

针对本次事件,Beosin 安全团队建议:1.闪电贷过程中做好防重入。2.闪电贷归还判断尽量不使用本合约余额的形式进行判断。

Beosin 作为一家总部位于新加坡的区块链安全公司,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控、预警与阻断、虚拟货币被盗资产追回、安全合规 KYT/AML 等“一站式”区块链安全产品 + 服务,目前已为全球 2000 多个区块链企业提供安全技术服务,审计智能合约超过 2500 份,保护客户资产高达 5000 多亿美元。欢迎点击公众号留言框,与我们联系。

2022 年 Q3 全球区块链生态安全报告



* 公众号后台回复“Q3”可获取《2022 年 Q3 全球区块链生态安全报告》完整版。






推荐阅读
author-avatar
_戒咗微博地_100
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有