宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > Pol币 > 正文

DeFi浪潮下的“狠角色”DEX,够安全吗?

作者:

时间:1900/1/1 0:00:00

如今,随着人们对DeFi的兴趣日益浓厚,DEX风靡一时。它们解决了常见的CEX问题,那我们也会问,DEX够安全吗?

在上一篇说明了代币本身的安全问题后|DEFI安全问题之基础篇),现在来聊聊DEX在兑换代币时可能产生的安全问题。目前DEX主要面临的安全问题大致可分成两类:

DEX项目本身存在的安全问题。

作为第三方协议,与其他DEFI项目交互时产生的安全问题。

本文将对第一类安全问题进行介绍。

Part.1

-DecentralizedExchange

重入漏洞

重入漏洞在上一篇我们也提到过,它属于需要防范的经典漏洞。与普通代币的重入相比,Uniswap的重入漏洞的主要表现形式为:攻击者在一笔兑换交易中利用Uniswap未及时更新价格前发起二次兑换,由于此时Uniswap未更新价格,使得二次兑换可兑出的代币数量比正常兑换的多。此外,在Uniswap的重入攻击中,攻击者利用单笔交易可能只能获得微小的收益,因此攻击者往往倾向于使用闪电贷或者循环套利扩大战果。

投资管理集团Lendary Asia Capital推出加密另类债务基金:10月31日消息,投资管理集团Lendary Asia Capital推出加密另类债务基金(Crypto Alternative Debt Fund)。

该基金专注于整个数字资产领域的收益机会。此外,该基金积极管理多种信贷策略,包括向数字资产银行、中心化交易所和数字资产领域的对冲基金提供短期信贷和流动性。(PRNewswire)[2022/10/31 12:00:47]

以imBTC攻击事件为例,该事件是由于UniswapV1在调用ERC777系列代币时,未充分考虑合约回调的情况。

具体表现为:攻击者使用imBTC代币兑换ETH时,合约先通过self.getInputPrice函数计算正确的ETH数额并将ETH发送到目标地址,然后调用self.token.transferFrom函数时,会调用imBTC合约的_callTokensToSend函数,而_callTokensToSend函数会调用用户指定存储imBTC代币的合约。因此,如果攻击者部署存储合约,并改写其中TokensToSend函数,那么当兑换代币时,pair(两种代币组成的交易对)合约调用攻击者部署的存储合约,就可以回调pair进行二次兑换,而二次兑换时pair合约账本还未更新,使得计算的ETH数额比正常兑换要多,以此来获利。

金·卡戴珊推广加密货币EMAX,24小时跌幅达81.86%:10月9日消息,据coinmarketcap数据显示,金·卡戴珊(Kim Kardashian)曾推广的代币Ethereum Max(EMAX),24小时跌幅达81.86%。

此前报道,美国证券交易委员会(SEC)宣布起诉金·卡戴珊在社交媒体上兜售EthereumMax加密证券,但没有披露她因此获得的推广费用的详细情况。

金·卡戴珊表示,同意达成和解并支付126万美元(其中包括26万美元的广告费与100万美元的罚款),并将积极配合SEC正在进行的调查。[2022/10/9 12:50:40]

图1Uniswap的tokenToEthInput函数

图2imBTC的transferFrom函数

图3imBTC的__callTokensToSend函数

详细攻击流程如下:

图4ETH-imBTC事件流程图

那么,为什么在第二次调用tokenToEthSwapInput函数兑换代币时,发送的ETH会比正常兑换要多呢?我们可以用公式来还原可兑换代币数量的代码逻辑:

彭博社:华尔街银行正积极招募被不景气加密公司解雇的技术人员:9月16日消息,据彭博社报道,多位此前被 Coinbase 解雇的技术人员收到多份华尔街银行发出的邀请。此外,被 Bitpanda 和 BlockFi 裁撤的技术人员也收到类似的邀请。

报道指出,花旗集团、高盛集团和摩根大通正在积极寻找具有区块链经验的员工,特别是支撑加密技术发展的技术人员,持续受到招聘企业的关注。[2022/9/16 7:01:48]

首先,正常兑换下,getInputPrice函数计算可兑换的ETH数量为:

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

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

由此可知,在重入后第二次兑换中只有ETH的储备量减少,而imBTC储备量未增加。这样在分母不增加的情况下,导致了等量的imBTC可以兑换更多的ETH。

针对此类安全问题,成都链安建议:

当合约涉及到资产转移时,使用“检查-生效-交互”模式来处理逻辑,对关键的业务操作可以使用OpenZeppelin官方的ReentrancyGuard进行修饰。

江苏省运会数字藏品将于6月9日在星舟艺术平台发行:据官方消息,泰州将于2022年8月承办第二十届江苏省运会,为了让更多人分享传承省运精神,省运主题系列数字藏品将于6月9日18:00在星舟艺术平台限量发行,这也是系江苏省运会历史首次发行数字类文创产品。此次以数字艺术为载体,将体育精神通过数字藏品这一载体在人群中不断流传、分享。为体育产业及体育精神的发展传承提供更多的可能性。[2022/6/8 4:10:27]

Part.2

-DecentralizedExchange

swap函数未对K值进行校验

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

图5Uniswap的价格波动

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

Wemade对多链GameFi基础设施Froyo Games进行了战略投资:5月31日消息,韩国游戏巨头WeMade对多链GameFi基础设施Froyo Games进行了战略投资,以此加速Wemix生态系统的扩展。虽然Wemade称投资金额巨大,但并未透露细节。

通过此次战略投资,WeMade计划与Froyo Games签署合作伙伴关系,在Wemix的基础上扩展代币经济学,扩大市场份额,并扩展更多内容。

此前去年12月,Froyo Games完成了由Animoca Brands领投的160万美元战略轮融资。[2022/5/31 3:52:56]

图6合约未检查k值的cheapSwap函数

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

图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

项目方RugPull

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

写在最后

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

标签:SWAPETHTRADEXLoopSwapETH代表什么STRAX价格Invest Like Stakeborg Index

Pol币热门资讯
PUMA换装NFT,锁定「Z世代」流量

国际运动品牌PUMA正在NFT的浪潮中找寻新的自我。3月2日,PUMA推特换下了经典的美洲狮飞跃头像,取而代之的是CoolCats系列NFT形象。就在几天前,它还将官推名称更改为ENS域名「PUMA.eth」.

1900/1/1 0:00:00
红杉印度领投,读懂一键借贷和做空协议Beta Finance

原标题|三分钟读懂BetaFinance本文首发时间为2021年8月17日 撰文:一棵杨树 2021年11月1日,BetaFinance获得575万美元融资,由红杉资本印度领投,ParaFiCapital.

1900/1/1 0:00:00
加密货币可能会绕过拜登总统对俄罗斯银行和精英的“毁灭性”制裁

美国总统乔·拜登为回应俄罗斯对乌克兰的攻击而宣布的制裁,并不包括切断该国在SWIFT系统上的支付或加密货币转移。拜登周四在白宫发表声明说,美国及其盟友和合作伙伴将实施制裁,目的是让俄罗斯因“普京选择对乌克兰开战”付出“毁灭性的代价”.

1900/1/1 0:00:00
一文了解波卡中的NFT都有哪些创新?

“波卡知识图谱”是我们针对波卡从零到一的入门级文章,我们尝试从波卡最基础的部分讲起,为大家提供全方位了解波卡的内容,当然这是一项巨大的工程,也充满了挑战,然而我们希望通过这样的努力让大家能够正确认知波卡.

1900/1/1 0:00:00
观点:Anchor 难以持续壮大,如何改善token经济学?

原标题:《观点:不断注入的资金储备只会使AnchorProtocol「太大而无法成长」》撰文:LucaProsperi 编译:Yangz 「我的工作不是要相信或不相信.

1900/1/1 0:00:00
以卢布计价的比特币交易量激增至9个月高点

点击上方“蓝色字”可关注我们!暴走时评:由于西方对俄罗斯的制裁引发了人们对卢布的抛售,俄罗斯卢布兑比特币的交易量激增到了九个月的高点。巴黎加密货币研究机构Kaiko表示,周四,以卢布计价的比特币交易量激增至近15亿卢布.

1900/1/1 0:00:00