AES:通缩代币相关安全问题 教你如何完美避坑_KIMCHI币

近期Beosin安全团队研究发现,通缩代币引起的安全事件依然频发,造成众多项目方资金的损失,因此,Beosin安全团队准备了这篇详解通缩代币的文章,与大家分享。

本文将对通缩代币与pair结合过程中容易出现的问题以及历史发生的真实通缩代币安全事件两个方面进行介绍,通过本文,我们将彻底搞清楚通缩代币是什么意思以及通缩代币发生安全问题所涉及的原理,使我们在之后的项目中避坑。

过程详情图

数据:以太坊供应量时隔47天再次进入通缩模式,目前年化通缩率约为0.09%:1月16日消息,Ultrasound.money数据显示,目前以太坊总供应量较去年11月7日合并时减少24.10枚,自去年12月2日以来首次出现负增长,即时隔47天再次进入通缩模式。目前ETH年化通缩率约为0.09%。[2023/1/16 11:14:34]

销毁问题

该问题主要出现在使用“映射”机制的通缩代币中,这种代币的机制是存在两种代币余额存储变量,分别为tOwned和rOwned,而tOwned存储的是实际代币数量,rOwned存储的是通过currentRate变量放大映射之后的值。

rOwned的作用是什么呢?在文章开始说过,通缩代币能激励用户持有代币,这种激励目的使用的方式便是对交易者扣除rOwned值,同时扣除rTotal,这样其他用户rOwned所占rTotal的比例就会被动增加,实现被动收益。

UENC将执行UT-2000提案,开启长期通缩销毁计划:据官方消息,为促进UENC的生态健康发展,基于合理的市场供需关系UENC将执行UT-2000提案,全球实验室UT Lab在智能合约测试网上线后会对已有流通储备UENC进行长期通缩销毁计划,本期将销毁早期规划包含空投预留2400万枚以及测试网预留600万枚的剩余数量,减去已使用空投和测试网激励部分,本期将销毁合计24322663.818枚UENC,占发行总量约12%。[2022/3/4 13:38:04]

用户查询余额的方式有两种情况,一种是除外地址,直接返回tOwned的值,另一种是非除外地址,返回rOwned/currentRate,而currentRate计算方式为rTotal/tTotal。如果有办法使得rTotal减小,那么用户查询出的实际余额将变大,而如果pair查询余额变大,则可以通过skim函数将多余的代币转移出去。

加拿大企业家Kevin O'Leary支持以太坊通缩:8月10日消息,加拿大企业家、投资者及电视真人秀主持人Kevin O'Leary在名人个性化视频信息网站Cameo上宣扬以太坊8月5日伦敦升级的好处,他认为,一旦以太坊发生链式合并,它注定会成为“ultrasound money”。

此前消息,EIP-1559实施之后,ETH销毁总量达到20000枚。(Cointelegraph)[2021/8/10 1:45:49]

而该类通缩代币存在一个deliver()函数,非除外地址可调用,该函数会将调用者的rOwned销毁,并销毁相同数量的_rTotal,使得所有非除外地址的余额查询增加,pair如果非除外的话,便可使用上述方式套利攻击。

3通缩代币相关安全事件剖析

AES安全事件

Beosin已完成对永久通缩协议Mimosa代码审计:12月28日消息。据官方通告,区块链安全公司Beosin(LianAnTech)宣布已完成对永久通缩协议Mimosa的审计工作,审计项包括协议安全性评估、代码漏洞审查等,确认了MIMO在以太坊链上传输,通过扣除转账手续费的形式进行代币销毁,手续费比例可在有效范围0-100%内修改,当手续费比例为100%时转账数量全部销毁;目前手续费为默认5%。[2020/12/28 15:54:14]

北京时间2023年1月30日,Beosin旗下BeosinEagleEye安全风险监控、预警与阻断平台监测到,AES遭受到黑客攻击,该项目便存在上述的Skim问题。

AES-USDTpair合约有一个skim函数,该函数可以强制平衡pair的供应量,将多余资金发送给指定地址。

聚币8月JT回购通缩率超1.02% 通缩率位居前列:据官方消息,聚币Jubi已于2020年8月15日完成JT 8月HRP溢价回购,总计回购数1027524.094JT,其中二级市场回购582918.844 JT,场外回购池回购444605.25JT。所有回购JT将转入黑洞地址(0x0000000000000000000000000000000000000000)进行销毁。聚币自HRP溢价回购机制升级后,在新通缩模型下,8月JT流通盘通缩率达1.0275%,超过HT 7月流通盘通缩率的0.92%。预估JT季度通缩率将超3%,据数据显示,BNB季度通缩率为1.69%,OKB季度通缩率为1.2565%。聚币平台通证JT通缩率已领先。[2020/8/15]

攻击者在本次攻击过程中,首先向pair里面直接转入了部分AES代币,导致供应量不平衡,从而攻击者调用skim函数时,会将多余的这部分代币转到攻击者指定地址,而攻击者在此处指定了pair合约为接收地址,使得多余的AES又发送到了pair合约,导致强制平衡之后pair合约依然处于不平衡状态,攻击者便可重复调用强制平衡函数,而AES发送过程会调用到AES合约的transfer函数,如下图。

另外一点,当调用AES代币合约的transfer函数时,若发送者为合约设置的pair合约时,会将一部分费用记录在swapFeeTotal之中,在最后的时候可以统一调用distributeFee函数将swapFeeTotal记录的费用从pair中转出,这里相比上述的过程,攻击者可以不用做sync函数调用操作,而是在最后将费用转移出去之后调用一次sync函数即可。

攻击者经过反复的强制平衡操作,费用记录变得异常大,基本接近pair的总余额,最后攻击者调用distributeFee函数将pair里面的AES转出,pair的AES余额变得非常少,导致攻击者利用少量AES兑换了大量的USDT。

BevoToken安全事件

北京时间2023年1月30日,Beosin旗下BeosinEagleEye安全风险监控、预警与阻断平台监测到,BevoToken遭受到闪电贷攻击,该项目便是上面所说的“映射”机制通缩代币。

由于BevoToken合约的balanceOf函数并非ERC20标准的函数,该函数在经过一些计算处理后再返回余额,而转账或其他操作可能使前后计算返回的余额不一致,当攻击者在swap操作前后可凭借这个问题来操控pair合约的余额,从而skim出多余的代币。

攻击者首先在pancake贷出192.5个BNB,之后换成约302,877个BEVO代币,再调用被攻击合约的deliver函数,此时_rTotal的值减小,_rTotal的值减小会导致_getRate中计算的值偏小,此时balanceOf返回的余额则会偏大,导致攻击者能skim出多余的BEVO。

之后,攻击者再将skim出的代币进行deliver,此时_rTotal的值已经很小了,在进行_getRate计算时,会减去除外地址的rOwned,此值固定且被攻击者在之前通过burn异常放大的,在最开始_rTotal正常的时候,减去该值对结果的影响不大,但是现在_rTotal被攻击者操控得异常小,再减去这个异常放大的固定值后,对结果产生了巨大的影响,第一次deliver导致pair计算结果偏大3倍,而第二次deliver之后,pair计算结果则偏大了数百倍,这也是为什么攻击者获得的代币要比自己销毁的代币多得多的原因。

4Beosin总结

通缩项目在业务设计的时候一定要考虑到与pair交互的情况,自身的通缩机制是否会对pair产生影响。我们也建议相关项目上线前寻找专业的安全审计机构进行全面的代码以及业务的安全审计工作。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

PEPE币CONV:从世界大会看 Web3 前景_bankex

2023年世界经济论坛年会于2023年1月16日至20日在达沃斯举行,这是世界经济论坛时隔三年回归线下。与1971年达沃斯论坛第一次举办时相比,如今达沃斯的雪量已经减少了40%以上.

[0:0ms0-7:155ms