5

xWin攻击事件复盘分析 | 零时科技

 2 years ago
source link: https://learnblockchain.cn/article/2673
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
xWin攻击事件复盘分析 | 零时科技 | 登链社区 | 深入浅出区块链技术

xWin攻击事件复盘分析 | 零时科技

北京时间2021年6月25日,xWin.FINANCE官方推文称xWin平台上经历了一次闪贷,xWin部分功能已暂停使用,零时科技安全团队及时对该安全事件进行复盘分析。

在这里插入图片描述

xWin是采用币安智能链区块链技术建立的DeFi平台。它提供行业指数、耕种金库以及其他多种金库,以实现收益最大化。
零时科技区块链安全情报平台监控到消息,北京时间2021年6月25日,xWin.FINANCE官方推文称xWin平台上经历了一次闪贷,xWin部分功能已暂停使用,零时科技安全团队及时对该安全事件进行复盘分析。

在这里插入图片描述

攻击信息
通过初步追踪分析,攻击者创建了一个合约,进行了两笔攻击交易,共盗取资金超过29万美元,攻击信息如下:

推荐人地址

https://bscscan.com/address/0x2Df8DD8880010A28b1539d9aEfF9bcEec39E2040

攻击者钱包地址

https://bscscan.com/address/0xb63f0d8b9aa0c4e68d5630f54bfefc6cf2c2ad19

攻击者合约地址

https://bscscan.com/address/0x67d3737c410f4d206012cad5cb41b2e155061945

攻击者盗取资金交易

https://bscscan.com/tx/0xba0fa8c150b2408eec9bbbbfe63f9ca63e99f3ff53ac46ee08d691883ac05c1d

https://bscscan.com/tx/0xda1016b24b8982ea27671e3502691c0ca17231e1dbc0dfd00df41f0646217643

xWinFarm合约地址

https://bscscan.com/address/0x8f52e0c41164169818c1fb04b263fdc7c1e56088#code

xWinDeFi合约地址

https://bscscan.com/address/0x1bf7fe7568211ecff68b6bc7ccad31ecd8fe8092#code

由于攻击者的两笔攻击交易均类似,这里分析攻击者的第一笔交易,该笔交易也是损失资金最多的交易,下面分步解析该笔交易,方便读者更清晰的了解攻击过程。

在这里插入图片描述

第一步:闪电贷共获取76000枚BNB。

第二步:将闪电贷借出所有BNB分成1:1两笔,并将其中一笔37999枚BNB兑换为山寨币,并在xWinFarm合约中添加流动性获取Cake-LP。

第三步:由于添加了流动性,合约随即铸造了对应的PCLP-xWin代币给用户,作为流动性提供者的证明。(到这里xWin 协议将授权的推荐 xWin 代币奖励记录到推荐地址)

第四步:调用redeem函数将之前加入的BNB赎回,并销毁Cake-LP。

随后攻击者将此过程(第一步至第四步)循环20次,不断积累推荐人奖励。

在这里插入图片描述

第五步:最终攻击者使用推荐人地址提取了303998枚xWin奖励,

第六步:通过PancakeSwap V2将303998枚xWin兑换为903枚BNB,获利离场。

至此

攻击者通过该笔交易获取了903枚BNB,加上攻击者第二笔攻击交易获取的资金,攻击者共计获取了1007枚BNB,总价值超过30万美元。

看似简单的循环步骤,被推荐人利用资金循环操作,为何可以不断增加推荐者的代币奖励数量,该奖励是否没有数额限制,带着以上疑问,继续分析合约的代码逻辑。

攻击成功的原因

通过以上交易分析可以明确,攻击者会通过每一次循环更新推荐者奖励数量,通过链上交易log信息可获取攻击者更新奖励调用的事件_Subscribe,如下图:

在这里插入图片描述

继续跟进代码中的Subscribe方法,该方法也是攻击者获取奖励调用的主要方法,如下图:

在这里插入图片描述

Subscribe方法中,更新奖励的代码逻辑在以上标注的if判断框中,并且需要达到rewardRemaining > 0的判断条件,也就是推荐奖励的总额,目前合约中rewardRemaining变量为6000万,并且该值会通过奖励值不断减小。当前来看该变量依旧是一个非常大的数值,以至于攻击者可以获取大量奖励资金。达到if条件判断后,会继续调用storeRewardQty方法和updateReferralReward方法,这里是更新推荐人奖励,所以继续跟进updateReferralReward方法,如下图:

在这里插入图片描述

updateReferralReward方法中,推荐奖励是通过_tradeParams.amount.mul(referralperunit).div(1e18);计算公式来获得,目前合约中referralperunit奖励参数为0.1,也就是当每次循环76000BNB时,会得到7600枚xWin代币,那么20次循环后只会得到152000枚xWin代币,而通过交易信息分析,攻击者共获取了303998枚xWin代币,也就是说该算法下的奖励资金比攻击者获得的资金少了一倍。

继续分析合约,该合约中存在管理员修改referralperunit变量,也就是说合约管理员可能已经将奖励参数修改为0.2。

在这里插入图片描述

当referralperunit变量为0.2时,每次循环76000BNB时推荐者就会得到15200枚xWin,20次循环的奖励总额也就是303998枚xWin代币,该值也是攻击者最终获取到的资金数。

目前,xWin官方已终止推荐及其相关奖励功能,并将所有在闪电贷攻击之前抵押 LP xWin-BNB Farm的 xWin 代币持有者提供 1:1 xWin代币补偿。

通过此次攻击事件来看,攻击者通过多次循环流动操作,并通过xWin合约中的推荐人奖励缺陷,最终获得了大量代币,目前类似的闪电贷攻击事件居多,为何还会频频发生,对于DeFi项目而言,合约代码的安全,代币价格的相对稳定,旧版本的及时更新都是保证项目安全极其重要的部分,对于合约功能缺陷问题,应在合约上线前进行严格审查及测试。对于此类闪电贷攻击事件,零时科技安全团队给出以下建议:

  • 对于合约代码安全,可找多家安全审计公司进行审计。
  • 对LP价格及获取奖励的铸币代码块,应根据业务逻辑进行严格审核演算,避免出现参数可控制导致大量铸币问题。
  • 使用可信的并且安全可靠的预言机,如Chainlink去中心化预言机,Alpha homera采用的。
  • 对敏感性较强的代码,要做到及时更新完善。

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 1天前
  • 阅读 ( 43 )
  • 学分 ( 8 )
  • 分类:资讯

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK