2022年3月13日,成都链安链必应-区块链安全态势感知平台舆情监测显示,Paraluni合约遭受攻击,损失约170万美元,成都链安技术团队对此事件进行了相关分析。
#1总述
我们以第一笔攻击交易0xd0b4a1d4964cec578516bd3a2fcb6d46cadefe1fea5a2f18eec4c0a496e696f9为例:
地址列表
攻击地址:
0x94bC1d555E63eEA23fE7FDbf937ef3f9aC5fcF8F
Dune宣布集成比特币链上数据:1月14日消息,区块链分析平台Dune Analytics在社交媒体宣布,比特币链上数据已经在Dune平台上线,现在可以在Dune Engine v2(Spark SQL和Dune SQL)上查询比特币区块链信息,目前提供了四个数据库表,分别是:比特币区块、比特币输入、比特币输出和比特币交易。此外,Dune Analytics还发布了针对比特币的平台指南文档。[2023/1/14 11:12:06]
攻击合约:
0x4770b5cb9d51EcB7AD5B14f0d4F2cEe8e5563645
关于数字卢布的法案已提交给俄罗斯议会:金色财经报道,由金融市场委员会主席Anatoly Aksakov领导的一组俄罗斯立法者已经提交了关于数字卢布的立法草案,即由俄罗斯货币当局铸造的CBDC。该文件建议进行立法改革,旨在为其引入创造条件。其主要目的是为数字卢布开发必要的支付基础设施。提案人认为,这将为俄罗斯公民、企业和国家提供快速、方便和低成本的资金转移。
俄罗斯中央银行在2020年10月提出了其数字货币的概念,并在2021年12月敲定了其原型平台。试验阶段于今年1月启动。5月,货币当局表示,它计划在2023年4月开始对真实交易和客户进行测试。[2023/1/1 22:19:46]
ParaProxy:
动态 | 媒体:资金盘项目GGT崩盘,项目方集体失联跑路:7月底,GGT项目投资者称该项目在未经投资者确认的情况下,强制将投资者存入的USDT资产兑换为GGT。有投资者表示在“强制兑换”事件发生的第一时间与项目方微信联系,但发现已被对方拉黑;维权者前往GGT的办公地点时被告知该公司在一个月前就已搬走。而此时距GGT项目开盘仅一个多月,这也意味着该项目方或许就没想打算运营项目,只是想割一波就立马跑路。(凤凰网区块链)[2019/8/8]
0x633Fa755a83B015cCcDc451F82C57EA0Bd32b4B4
火币李林:项目方申请火币上币时,披露红杉资本等顶级VC投资信息,将加速上币审核流程:火币创始人李林刚在朋友圈申明:从昨天开始,突然被很多朋友问到交易所上币申请会不会针对红杉资本有特别的政策。感觉有点突然,现申明如下,1.虽然火币是红杉资本投资的企业,但火币不能保证所有红杉资本投资的项目都会在火币list。公平公正对待所有的项目,是交易所的基本立场。2.投资人和股东背景确实是项目上币审核的一个指标,对于像红杉等这种全球顶级的vc投资的项目,在交易所上币审核时会得到加分。3.项目方在申请火币上币时,最好也重点披露一下是否接受过类似红杉这种顶级vc的投资,我们会直接联系vc做一些基础的尽调,提升上币审核效率,加速上币审核流程。[2018/5/8]
ParaImpl:
0xA386F30853A7EB7E6A25eC8389337a5C6973421D(MasterChef)
UGT:
0xbc5db89CE5AB8035A71c6Cd1cd0F0721aD28B508
UBT
0xcA2ca459Ec6E4F58AD88AEb7285D2e41747b9134
1.向CakeSwap(0x7EFaEf62)中通过闪电贷借贷224BSC-USD,224BUSD
2.把第1步借到的代币向Para-LP(0x3fD4FbD7)中添加流动性,并将获得的222枚流动性代币的接收地址指定为UBT(0xcA2ca459)地址,这一步是为了后续的重入做准备。
图2重入攻击
4.此处原本正常的逻辑为:添加流动性,并将流动性代币存入pid为18的流动性抵押池,但是本函数在代码中并未检查添加的流动性token0、token1得到的流动性代币是否与pid对应的流动性代币地址一致,导致了攻击的发生。注意,并不是所有的流动性池抵押都有该风险,由于第2524行代码,pool的ticket需要为零地址才能够通过该检查。
但是攻击者通过控制执行逻辑,实际执行的逻辑为:第2505,2506行将攻击者指定的1枚UGT、1枚UBT代币转入ParaProxy合约。然后在第2535行代码用于添加流动性,并在第2537行检查添加的流动性代币数量。
此时,vars.oldBalance为初始流动性代币数量。攻击者为了通过第2537行的检查,在添加流动性的过程中,进行了重入攻击。由于在添加流动性时调用了攻击者构造的恶意代币的transferFrom函数,攻击者在transferFrom函数中才将流动性通过deposit函数存入ParaProxy合约。这也是第2步时攻击合约将流动性代币接收地址指定为UBT合约的原因所在。
在重入过程中,UBT合约存入了真正的LP代币222枚,并计入ParaProxy的账本中。在重入完成后,ParaProxy合约地址新增了222枚LP代币,ParaProxy合约将其视为攻击合约添加的LP,并计入账本中。至此,UBT合约和攻击合约都新增了222枚LP的存取记录。
#2总结建议
攻击者一共执行了约40次攻击,共获利约170万美元。截止发稿时,攻击者通过跨链协议将其转到以太坊网络中,并将其中的660枚ETH转入Tornado.Cash,另外5枚ETH转入了0xDd52CE617cAF1b7C8cEaCC111DE2f1c54E20C1b0地址。
本次攻击主要由合约代码中存在逻辑缺陷以及存在资金操作的关键函数未进行防重入导致。建议合约开发者在开发过程中进行完整的测试以及第三方审计,并养成使用Openzeppelin库的ReentrancyGuard合约来进行重入攻击的防范。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。