SWAP:细数DeFi浪潮下的DEX都会受到哪些安全威胁?

如今,随着人们对DeFi的兴趣日益浓厚,DEX风靡一时。它们解决了常见的CEX问题,那我们也会问,DEX够安全吗?在上一篇说明了代币本身的安全问题后|DEFI安全问题之基础篇),现在来聊聊DEX在兑换代币时可能产生的安全问题。目前DEX主要面临的安全问题大致可分成两类:DEX项目本身存在的安全问题。作为第三方协议,与其他DEFI项目交互时产生的安全问题。本文将对第一类安全问题进行介绍。

Part.1

-DecentralizedExchange重入漏洞重入漏洞在上一篇我们也提到过,它属于需要防范的经典漏洞。与普通代币的重入相比,Uniswap的重入漏洞的主要表现形式为:攻击者在一笔兑换交易中利用Uniswap未及时更新价格前发起二次兑换,由于此时Uniswap未更新价格,使得二次兑换可兑出的代币数量比正常兑换的多。此外,在Uniswap的重入攻击中,攻击者利用单笔交易可能只能获得微小的收益,因此攻击者往往倾向于使用闪电贷或者循环套利扩大战果。以imBTC攻击事件为例,该事件是由于UniswapV1在调用ERC777系列代币时,未充分考虑合约回调的情况。具体表现为:攻击者使用imBTC代币兑换ETH时,合约先通过self.getInputPrice函数计算正确的ETH数额并将ETH发送到目标地址,然后调用self.token.transferFrom函数时,会调用imBTC合约的_callTokensToSend函数,而_callTokensToSend函数会调用用户指定存储imBTC代币的合约。因此,如果攻击者部署存储合约,并改写其中TokensToSend函数,那么当兑换代币时,pair(两种代币组成的交易对)合约调用攻击者部署的存储合约,就可以回调pair进行二次兑换,而二次兑换时pair合约账本还未更新,使得计算的ETH数额比正常兑换要多,以此来获利。

马斯克:推特员工规模约为原来的20%:4月18日消息,马斯克表示推特的员工规模约为原来的20%。(金十)[2023/4/18 14:10:11]

图1Uniswap的tokenToEthInput函数

图2imBTC的transferFrom函数

图3imBTC的__callTokensToSend函数详细攻击流程如下:

图4ETH-imBTC事件流程图那么,为什么在第二次调用tokenToEthSwapInput函数兑换代币时,发送的ETH会比正常兑换要多呢?我们可以用公式来还原可兑换代币数量的代码逻辑:首先,正常兑换下,getInputPrice函数计算可兑换的ETH数量为:

韩国元宇宙平台Ifland将在49国家和地区上线:11月23日消息,韩国电信巨头SK宣布,旗下元宇宙平台Ifland将在北美、欧洲、中东和亚洲的49个国家和地区推出。SKT将利用K-pop与各种国际合作伙伴共同开发内容,并加强平台上的交流功能,以将Ifland推广为全球社交元宇宙。据2022年第三季度数据,Ifland累计拥有1280万用户。

据悉,SKT就各自元宇宙平台的内容开发、技术和服务展开合作,已与日本最大的移动电话运营商NTT Docomo签署了一份谅解备忘录(MOU)。此外,Ifland还指定总部位于阿联酋的科技公司e&和新加坡电信集团Singtel作为其全球合作伙伴。[2022/11/23 7:59:51]

且正常第二次可兑换的ETH数量为:

但重入后第二次可兑换的ETH数量为:

由此可知,在重入后第二次兑换中只有ETH的储备量减少,而imBTC储备量未增加。这样在分母不增加的情况下,导致了等量的imBTC可以兑换更多的ETH。针对此类安全问题,成都链安建议:当合约涉及到资产转移时,使用“检查-生效-交互”模式来处理逻辑,对关键的业务操作可以使用OpenZeppelin官方的ReentrancyGuard进行修饰。

OptiFi:66.1万枚USDC被错误锁定,将于9月2日进行结算赔偿:金色财经消息,Solana生态衍生品DEXOptiFi发推表示,UTC时间8月29日6:00左右,团队成员尝试在Solana上进行更新升级,但OptiFi主网程序不小心因错误被关闭,无法恢复,其中66.1万枚USDC被锁定(95%的资金为团队成员所有),将补偿所有用户的资金。团队将在UTC时间9月2日8:00根据预言机PythNetwork提供的数据退回所有用户的存款并手动结算所有用户头寸,其中所有交易/存款都将基于Solscan数据。[2022/8/30 12:56:32]

Part.2

-DecentralizedExchangeswap函数未对K值进行校验Uniswap的核心是常量乘积模型K=x*y,其中的K值是该pair合约持有代币数量的乘积,且要求之后的每一笔交易完成后K值必须增加(考虑手续费)。因此如果不进行K值校验,将很容易成为攻击点。

图5Uniswap的价格波动以ImpossibleFinance事件为例,该项目是Uniswap的仿盘,实现了两种兑换代币的函数:cheapSwap和swap。其中cheapSwap函数少了k值校验,但是项目方知道缺少K值校验的后果,专门为cheapSwap函数增加了onlyIFRouter做修饰,来限制cheapSwap函数只能被指定的Router合约调用。

Tether:做空USDT的对冲基金未能如期获得回报:金色财经报道,USDT 发行方 Tether 批评一些对冲基金做空该稳定币并称空投押注未能如期获得回报,反而需要支付巨额交易费用。由于投资者自今年五月 Terra 崩盘后恐慌退出稳定币市场,一度导致 USDT 与美元短暂脱锚,价格曾跌至 0.95 美元,结果促使几家对冲基金在市场做空 USDT,希望制造“数十亿美元的压力,导致大量资金外流损害 Tether 的流动性,并最终以低得多的价格回购 USDT”。

但据 Tether 称,由于对 USDT 的运作机制缺乏基本了解,这些对冲基金已经在空头押注中损失了数百万美元。Tether 表示:“这些对冲基金之所以想做空 USDT,是因为他们不相信 USDT 能为交易者提供足够的资金支持,但交易者已经表示他们愿意看多 USDT,而且能在永续市场中从做空 USDT 的对冲基金那里获得费用收入,做空基金的资金被锁定而且无法获利。”( beincrypto)[2022/7/31 2:50:01]

图6合约未检查k值的cheapSwap函数正常情况下,当用户使用Router合约兑换代币时,首先会使用getAmountsOut函数来计算正确的代币数量amounts;然后调用safeTransferFrom将用户的兑换消耗代币转入目标pair合约;最后,通过内部调用_swap函数来执行cheapSwap函数将兑换代币转至目标地址。

美国CFTC 倡导扩大加密货币市场管辖范围:金色财经报道,自比特币创建以来已经过去了十多年,但立法者和监管机构仍在继续探讨重要问题,例如应该允许哪个监管机构来监管数字资产。包括商品期货交易委员会 (CFTC) 在内的联邦监管机构正在增加资源以帮助监管数字资产市场中的欺诈行为。

除了欺诈或操纵事件之外,CFTC 目前不监管涉及不依赖保证金、杠杆或融资的数字资产的现货或现金市场交易,也不监管从事此类交易的市场参与者。然而,现任 CFTC 主席 Rostin Behnam 正在寻求扩大该机构的职权范围。

Behnam在证词中极力主张允许 CFTC 监管现货数字资产交易,Behnam表示,CFTC 处于有利地位,在监管现金数字资产商品市场方面发挥着越来越重要的作用。从根本上说,CFTC 是一个市场监管机构,旨在确保市场完整性和活力,旨在支持金融稳定,同时通过基于原则的个人客户保护监督交易所、票据交换所、数据存储库和市场参与者。这种灵活的方法使 CFTC 在国会授权下,与衍生品市场一起发展,从其历史根源于监督农业市场发展到现在监督从能源和“贵金属到金融指数和掉期。我们现在准备在数字资产商品市场上做同样的事情。(路透社)[2022/6/22 4:43:59]

图7Router01合约的swapExactTokensForTokens函数但是,由于cheapSwap函数缺少了K值检验,如果攻击者部署恶意代币合约,在Router合约调用safeTransferFrom函数时,回调正常的pair合约进行同种兑换,由于,回调后的兑换使用的amounts仍是未更新之前的数据,已不符合改变账本状态之后的校验,那么攻击会导致以错误的价格兑换出目标代币,以此获利。

图8合约进行k值校验的Swap函数该事件的具体攻击步骤如下:1.在准备阶段攻击者部署了AAA代币合约,并使用闪电贷借来1000WBNB,兑换65140个项目方的IF代币。2.使用其中一半的IF代币(32570个)与攻击者自己部署的AAA代币构建IF-AAA交易池。3.执行AAA-IF-BUSD路径的代币兑换,且当Router合约调用AAA代币合约的transferFrom函数时会执行攻击者的恶意代码,重入至IF-BUSD的pair合约,并将另一半IF代币正常兑换出221897个BUSD。4.回归到AAA-IF-BUSD路径的兑换,将之前计算的amounts值传入_Swap函数中执行这笔兑换,用一半的IF又兑换了2521897个BUSBD。5.归还闪电贷,完成攻击。

图9事件流程图针对此类安全问题,成都链安建议:在关键的兑换函数中必须做k值校验,不要为了节省gas和代码量就将K值校验和安全验证依赖外部验证,做到自身功能完善。Part.3

-DecentralizedExchange通缩代币未设置pair为分红例外通缩代币在交易时会产生额外的分红与手续费。如果交易合约中包含了此类代币,且没有进行特殊处理,那么,就可能导致交易对合约记录的代币储量与实际的代币可用余额不一致。以XSquid事件为例,XSquid是一种通缩代币,未将其与WHT代币组成的pair合约地址添加奖励例外列表,造成了pair合约除了正常代币兑换和流动性存储外,还存有多余的XSquid分红奖励代币。因此,攻击者就可以调用Swap函数将pair合约多余的XSquid代币转换为WHT提取,或者通过skim函数将多余的XSquid代币直接提取。

图10XSquid交易对合约未添加奖励例外

图11Swap函数可以兑换多余的WHT代币

图12skim函数可以提取大于reserve的部分针对此类安全问题,成都链安建议:DEX在添加通缩分红型代币时多注意手续费以及分红的处理情况。在创建通缩分红型代币交易对时,可以添加奖励例外来避免此类代币的分红问题。此外,以下两类不属于DEX本身的安全问题,但是被项目方借助了DEX的特性实施,所以将其写在文章末尾。PART.1交易池这类问题主要是指项目方在自己发行的代币里留有后门,创建与主流代币的交易池,诱使投资者使用手里存在价值的代币买入项目方代币,并且不断拉盘对投资者进行投资。以下面的TRTC项目方为例,项目方创建了ETH-TRTC的交易池。但是在TRTC的代币合约对transferFrom函数做了相关限制,要求代币的转出方为owner(管理员)或者为Uniswap。因此对于投资者,仅可以通过Uniswap买入TRTC代币,而不能卖出TRTC代币。最后由项目方把投资者投入的ETH提走跑路,给投资者带来了巨大的损失。

图13TRTC合约的transfer函数

图14TRTC合约的ensure修饰

图15TRTC合约的transferFrom函数PART.2项目方RugPullRugPull是指项目方卷走投资者资金跑路的行为,目前已成为DeFi生态系统的最大局类型,项目方刻意制造代币价格暴涨的假象、许诺为提供流动性的投资者提供高回报等方式来大量聚集资金,一旦时机成熟就移除池子里的流动性或将代币卷走。这样的例子在DeFi屡见不鲜,AnubisDAO、MeerkatFinance、TurtleDEX、Squidtoken鱿鱼币等都是在卷款跑路之后,注销网站和社交媒体销声匿迹,导致投资者承担了巨大的损失。写在最后

成都链安建议项目方使用锁仓和多重签名来控制代币流动性,避免出现砸盘跑路的情况。投资者不要被天上掉馅饼的事情冲昏头脑,防范虚假宣传。

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

地球链

FilNFT:每周编辑精选 Weekly Editors' Picks(0219-0225)

「每周编辑精选」是Odaily星球日报的一档“功能性”栏目。星球日报在每周覆盖大量即时资讯的基础上,也会发布许多优质的深度分析内容,但它们也许会藏在信息流和热点新闻中,与你擦肩而过.

[0:0ms0-0:786ms