元宇宙非小号金色财经交流群社区官网

通缩币频遭闪电贷攻击,罪魁祸首竟是奖励分配机制?

Time:2023-02-15 Click:136


通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

近日,CertiK 监测到两起针对 FETA 以及 BEVO 反射机制的通缩币项目的闪电贷攻击事件。为帮助读者对此类攻击事件有更全面的了解,本文将对此类通缩币项目的背景、攻击过程、攻击原理以及防范方法进行具体分析并总结,期望各位读者能对该类型攻击有较为深入的理解和启发。

背景

通缩币是一种随着交易进行不断有 token 被销毁,发行总量因此不断减少进而实现潜在升值的数字货币

随着 2021 年 Safemoon 项目的一炮而红,通缩币项目在当时几乎横扫主流的 ERC 20 项目,备受瞩目。

对于通缩机制本身,大部分项目都使用了 Reflect 这一最经典的通缩奖励分配机制。Reflect 机制即“反射”机制,可以将通缩产生的收益让所有的持币者根据持币量平均分配。在该机制下,用户手里的 token 有了两种计量方式,即:“反射”前的实际 token 数量,和“反射”后的反射 token 数量。

该机制中,通缩的来源是对于 token 交易者的惩罚性税收,在每次交易时对交易账户“反射”后的 token 数量进行一定比例的收税和销毁,从而改变了“反射”的比率,使得每个普通持币者都可以获得更多的“反射”前的 token 作为奖励。

由此可见,Reflect 是一种静态奖励机制,为了鼓励长期持币者而惩罚频繁交易者,使得更多用户愿意持有和参与,最终促使币价趋于稳中有升的态势。

有趣的是,包含 Reflect 机制的智能合约很多都会加入一个函数,即`deliver()`。该函数的作用是调用者以“牺牲自我”的方式,直接销毁自己的 token,从而改变“反射”机制的比率,使每一位持币者得到奖励。

这种牺牲自我利益为所有持币者谋福利的做法不失为一种“慈善捐赠”,调用这个函数的人就好像“天使”一般。然而,天使的背后也有可能是魔鬼。CertiK 最近监测到的两起攻击事件,正是利用了`deliver()`函数改变“反射”机制的比率,对通缩币在去中心化交易所的交易对地址发起了闪电贷攻击,盗走交易对中的大额 WBNB。

攻击案例分析

2023 年 1 月 31 日,CertiK 监测到通缩币项目 FETA 遭受到闪电贷攻击。攻击者通过闪电贷借到 18.5 个 WBNB 后,通过调用 FETA 的`deliver()`函数以及去中心化交易所中 FETA-WBNB 交易对合约的`skim()`函数,在归还闪电贷借款之后仍获利 10.34 个 WBNB。

无独有偶,在前一日,CertiK 还监测到另外一起类似的闪电贷攻击事件,被攻击对象是通缩币项目 BEVO,攻击者通过类似的方法获利 144 个 WBNB。

这两起攻击事件看上去仿佛只需调用两个十分普通的函数就可以攻击成功,那么这种“魔法”究竟是怎么施展的呢?

我们不难发现,对于普通用户地址而言,反射机制的逻辑以及`deliver()`函数的逻辑都是没有问题的,甚至是非常高明的奖励机制,否则通缩币项目也不可能如此受到认可。问题恰恰在于“不那么普通”的地址——下面我们看看如果对去中心化交易所的交易对地址使用了“反射”机制究竟会发生什么。

首先,根据“反射”机制的代码可知,在“反射”前后,用户的 token 数量是通过乘以一个比率 rate 来相互转化的,若我们设“反射”前的 token 数量为 tAmount,“反射”后的 token 数量为 rAmount,则有

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

其中 rate 系两种计量方式的总量之比,即

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?把 rate 带入,我们可以得到用户的实际 token 数量

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

对于所有加入“反射”机制的地址,由于每次有交易者在交易时都会交税并通过销毁减少一些 rTotal,根据公式,在 rAmount、tTotal 不变的情况下,tAmount 将会增加,即实现了静态持有时的增值。

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

`deliver()`函数可以直接减少 rTotal,同时保持 tTotal 不变 ,此时 rate 将会极具下降。若此时关注该 token 在去中心化交易所的交易对地址 pair,则 pair 对应的 balance,即用 tAmount 衡量的 token 数量会大幅增长。

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

而去中心化交易所的交易对智能合约作为数字货币的交换池,存储了大量该交易对的两种 token,例如 BEVO-WBNB。该智能合约提供了一个函数`skim()`,可以让用户把合约中 token 的 balance 数值和交换池中实际存储的 token 数量 reserve 的差值取出来,正是这个方法让攻击者发现了套利空间。

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

根据上文所述,当调用`deliver()`函数时,rTotal 减少会带动 pair 的 balance,即用 tAmount 衡量的 token 数量的大幅增长,然而 pair 里面实际存储的 token 数量 reserve 并没有发生变化,此时,两部分的差值全部会被攻击者调用`skim()`全部取出来。

然而想要调用`deliver()`函数,即完成初始的“捐款”,是需要启动资金的。对于攻击者来说,方法总比困难多——方法即为我们平时经常听说的闪电贷。

也就是说,攻击者只需在一个区块之内将钱还上,就可以借到大量的钱用`deliver()`函数操纵交易对的 balance。最终,只要通过`skim()`取出来并换成 WBNB 的钱比借到的钱多,攻击者就完成了一次无风险套利。

总攻击过程如下图所示:

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

攻击防御

知道了原理,那又该怎么预防呢?

能够带来严重损失的漏洞,或许在事情发生前就进行预防,并不十分复杂。根据 CertiK 安全专家的分析,攻击者要想钻空子,需要能够改变合约中 rTotal 的数量,进而操纵合约中交易对的 balance。

在此,CertiK 专家建议:

要么在设计合约的时候直接剔除有风险的`deliver()`函数,要么直接将交易对地址剔除 Reflect 机制,即在代码中或合约部署后,调用`excludeFromReward()`将 pair 地址填入,使其剔除反射奖励机制即可。此时 pair 的 balance 将无法被攻击者通过`deliver()`函数所操纵。

通缩币频遭闪电贷攻击罪魁祸首竟是奖励分配机制?

写在最后

CertiK 通过两起最近发生的通缩币闪电贷攻击事件,详细讲述了包含 Reflect 机制的通缩币被攻击的原理和预防方法,希望能给各位读者有所启示。

通缩币作为最常见也是最经典的数字货币类型之一,至今仍然能被攻击者抓住漏洞进行攻击,主要原因也是项目方在智能合约设计时仅考虑到数字货币自身的智能合约逻辑,却并未深入研究与去中心化交易所合约交互的过程,才酿成了如此的损失。

标签:闪电

  • 闪电网钱包及其工作原理是什么?盘点四大最佳闪电网钱包

    闪电网钱包及其工作原理是什么?盘点四大最佳闪电网钱包

    T:

    比特币网络被设计成高分布式,也是世界上最灵活的计算机系统之一。然而,这种结构的一个问题是,BTC一直在与有限的可扩展性作斗争。与支付巨头Visa每秒可处理65000笔交易(TPS)比特币网络TPS只有7笔。因此,随着对加密货币需求的激增,B...

  • 比特币亚洲闪电交易 比特币“拼图”缺失的一块:闪电网络

    比特币亚洲闪电交易 比特币“拼图”缺失的一块:闪电网络

    T:

    英伟才青闪电网络是区块链上的一种子层技术,据说可以解决比特币的可扩展性问题。虽然这种潜在的解决方案仍处于起步阶段,但闪电网络似乎引起了人们的关注。闪电技术通过链下支付渠道处理交易,无需等待区块链挖掘,加快了交易时间,降低了挖掘成本。截至4 ...

本站分享的区块链、Web3.0元宇宙、NFT、数字藏品最新消息等相关数藏知识快讯NFR资讯新闻,与金色财经非小号巴比特星球前线Btc中国官网无关,本站资讯观点不作为投资依据,市场有风险,投资需谨慎!不提供社区论坛BBS微博微信交流群等相关币圈信息发布!
本站内容来源于互联网,如存在侵权及违规内容投诉邮箱( zztaobao@vip.qq.com )