IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> ?零时科技 | Paraluni攻击事件分析 -> 正文阅读

[游戏开发]?零时科技 | Paraluni攻击事件分析

0x1 事件背景

PARALUNI(平行宇宙)是新加坡Parallel Universe基金会发布的一个基于币安智能链的匿名项目,它重新定义了Defi2.0,以构建元宇宙的金融和经济体系为使命,致力于建立一个无法作恶、公平且自治、普通人都能参与的Def生态。同时Paraluni也为各大前端想构建元宇宙应用场景的企业提供开放接口,任何人都可以借助Paraluni构建自己的元宇宙经济体系。

零时科技区块链安全情报平台监控到消息,北京时间2022年3月13日,Paraluni称遭到黑客攻击,并呼吁投资者将Paraluni投资的全部本金赎回,零时科技安全团队及时对此安全事件进行分析。

?

0x2 攻击者信息

零时科技安全团队通过初步追踪分析,此次攻击发生在Binance链,主要攻击信息如下:

  • 攻击者钱包地址

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

  • 攻击者创建的相关合约地址

主攻击合约:https://bscscan.com/address/0x4770b5cb9d51ecb7ad5b14f0d4f2cee8e5563645

UGT:https://bscscan.com/address/0xbc5db89ce5ab8035a71c6cd1cd0f0721ad28b508

UBT:https://bscscan.com/address/0xca2ca459ec6e4f58ad88aeb7285d2e41747b9134

  • 攻击交易

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

  • 官方MasterChef合约

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

0x3 攻击分析

先来看一下攻击者获利的一笔交易操作:

?步骤1:攻击合约在PancakeSwap通过闪电贷借款获取BTCB和WBNB,随后将该资金在ParaPair中添加流动性后获取了约31枚Para-LP。(这里将获取到的Para-LP转移给攻击者部署的UBT合约)

步骤2:攻击者通过官方MasterChef合约添加流动性,添加流动性资金为攻击者控制的Token合约,随后通过可控的Token地址将真实的31枚LP Token存入,同时发生重入存入了两笔31枚LP Token。

步骤3:获取两次31枚的Para-LP,共62枚Para-LP。

步骤4:将获取的Para-LP兑换为BTCB和WBNB,最终归还闪电贷及手续费,攻击者该笔交易获取318枚BNB和3枚BTC。

至此,攻击者利用此攻击流程,通过对官方masterchef合约中多个池子进行了超过30次攻击共获利约170万美元。

0x4 漏洞细节

攻击者通过官方MasterChef合约中depositByAddLiquidity方法添加流动性质押代币,我们跟进该方法:

?分析该方法,这里的传参中攻击者传入的pid=9,两个token地址为攻击者控制的UGT和UBT地址,amount均是1。pid为9是目前合约中BTCB/WBNB池子,通过上述代码逻辑可以明确,这里并未判断用户输入的pid和两个token地址是否对应,随后调用_doTransferIn方法进行转账,

转账之后调用depositByAddLiquidityInternal方法,继续跟进:

?

该方法中判断了池子是否已在该合约添加,这里攻击者传入的是9,是合约存在的池子,判断条件通过,继续进入添加流动性的addLiquidityInternal方法:

?

该方法会对池子中的LP Token数量进行判断,也就是添加流动性之后的LP Token余额要大于添加流动性之前的余额,由于攻击者添加的LP Token与这里的池子并不对应,按理说这里的判断不能通过,但这里调用addLiquidty方法添加流动性时攻击者对token地址可控,并且攻击者在攻击开始的阶段就将闪电贷资金兑换后的真实LP Token转移至自己可控的token地址,所以这里攻击者通过自身可控的transferFrom方法将真实的LP Token存入该合约deposit,如下图:

?

从deposit方法的最终逻辑可以看出,存入的LP Token是以调用者余额进行存入,也就是攻击者的UBT合约。

回到addLiquidityInternal方法,这里通过了require(vars.newBalance > vars.oldBalance, "B:E");的条件判断,并在depositByAddLiquidityInternal方法中继续调用_deposit方法进行了存款操作,这里的存款用户为攻击者主合约。

随后攻击者分别使用攻击者主合约和UBT合约从MasterChef合约中取走两份LP Token资金。

?

至此此次攻击事件的合约漏洞分析结束,攻击者主要利用合约未对Token地址做严格检查,导致项目使用的Token合约方法可控造成的安全漏洞,同样,对于涉及质押存款的方法未做重入限制。

目前通过对官方masterchef合约初步分析,该合约中的其他添加流动性质押方法也存在该风险,合约中_doTransferIn方法传入的Token也可能引起严重危害,由于攻击者传入Token地址自己可控,所以这里的safeTransferFrom方法逻辑攻击者可控,如下:

?

0x5 总结

通过此次攻击事件来看,攻击成功最重要的因素是Paraluni官方MasterChef合约中没有对Token地址做严格校验和对质押存款的方法未做重入限制,当然前提还是对Token未做严格校验,该风险就算加入了重入限制条件,攻击者依然可以通过Token可控对项目造成威胁,所以对于此类安全事件,零时科技安全团队给出以下建议。

0x6 安全建议

  • 建议项目上线前进行安全审计;
  • 建议对合约传参的访问控制问题进行严格判断;
  • 建议对于涉及质押存款的方法未做重入限制。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:53:21  更:2022-03-16 22:53:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 17:42:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码