您的位置: > 欧 易 OKX 区块链新闻> 正文

打印本文             

By:九九@慢雾安全团队

2021 年 11 ⽉ 30 ⽇,据慢雾区消息,DeFi 平台 MonoX Finance 遭遇攻击,本次攻击中约合 1820 万美元的 WETH 和 1050 万美元的 MATIC 被盗,其他被盗 Token 包括 WBTC、LINK、GHST、DUCK、MIM 和 IMX,损失共计约 3100 万美元。慢雾安全团队第⼀时间介⼊分析,并将简要分析结果分享如下。

攻击核心

本次攻击的核⼼在于利⽤ swap 合约中没有对池中传⼊和传出代币是否相同作检查,以此利⽤价格更新机制的缺陷,使得攻击者传⼊和传出代币相同时,价格被二次计算并覆盖,导致代币价格不断被推⾼,并以此代币换出池中的其他代币来获利。

相关信息

MonoX 是⼀种新的 DeFi 协议,使⽤单⼀代币设计⽤于流动性池。这是通过将存⼊的代币与 vCASH 稳定币组合成⼀个虚拟交易对来实现的。其中的单⼀代币流动性池的第⼀个应⽤是⾃动做市商系统 - Monoswap,它在 2021 年 10 ⽉时推出。

攻击者地址 1:

0xecbe385f78041895c311070f344b55bfaa953258

攻击者地址 2:

0x8f6a86f3ab015f4d03ddb13abb02710e6d7ab31b

攻击合约 1:

0xf079d7911c13369e7fd85607970036d2883afcfd

攻击合约 2:

0x119914de3ae03256fd58b66cd6b8c6a12c70cfb2

攻击交易 1:

https://etherscan.io/tx/0x9f14d093a2349de08f02fc0fb018dadb449351d0cdb7d0738ff69cc6fef5f299

攻击交易 2:

https://polygonscan.com/tx/0x5a03b9c03eedcb9ec6e70c6841eaa4976a732d050a6218969e39483bb3004d5d

攻击细节

1、首先攻击者调用 Monoswap.swapExactTokenForToken:0.1 个 WETH 换出 79.986094311542621010 个 MONO。

2、接着攻击者利用漏洞移除池子中其他用户的流动性,并为添加攻击合约的流动性以此来获取最大的利益。

这里移除流动性处的漏洞在 Monoswap.sol 中的 471-510 行,移除池中流动性时通过 removeLiquidity 函数调用 _removeLiquidityHelper 函数,而这两个函数都未做调用者和传入的 to 参数的身份验证,所以可直接移除任意用户在池中的流动性。

分析

  • 移除 0x7b9aa6 的流动性,把 1670.7572297649224 个 MONO 和 6.862171986812230290 个 vCASH 转出给 0x7b9aa6;
  • 移除 cowrie.eth 的流动性,把 152.9745213857155 个 MONO 和 0.628300423692773565 个 vCASH 转出给 cowrie.eth;
  • 移除 0xab5167 的流动性,把 99940.7413658327 个 MONO 和 410.478879590637971405 个 vCASH 转出给 0xab5167;

为攻击合约 1 在 MONO 代币流动池创建流动性。

分析

3、紧接着攻击者调⽤ 55 次 Monoswap.swapExactTokenForToken 以此来不断堆⾼ MONO 的价格。

分析

这里攻击的核心是在 Monoswap.sol 中的 swapExactTokenForToken 函数,攻击者传入 MONO 代币使得 tokenIn 和 tokenOut 是相同的代币。

分析

跟到 swapIn 函数中:

分析

可以发现在 swapIn 函数中,调用了函数 getAmountOut 来计算价格。接着跟到 getAmountOut 函数中发现是利用了 _getNewPrice 函数来计算 tokenInPrice 和 tokenOutPrice。

分析

分析

跟到 _getNewprice 函数中,发现当计算 tokenInPrice 时候传入的 txType 参数为 TxType.SELL,此时:

分析

分析

当计算 tokenOutPrice 时候传入的 txType 参数为 TxType.BUY,此时:

分析

如果传入和传出为同一种代币时,价格计算式中的四个变量都相同,所以很容易得出 tokenOutPrice 会比 tokenInPrice 要大。

由于 tokenIn 和 tokenOut 是同一个 token,swapIn 函数在计算完价格后会再次调用 _updateTokenInfo 函数,使得 tokenOutPrice 的更新会覆盖 tokenInPrice 的更新,所以导致这个 token 的价格上涨。

分析

分析

4、最后攻击者调用 swapTokenForExactToken 函数用 MONO 来换出池子中的其他代币。

分析

swapTokenForExactToken 函数中调用了 swapOut 函数,而 swapOut 函数中计算价格是调用的 getAmountIn 函数。

分析

在该函数中由于 tokenInPoolPrice 是取的 MONO 代币在池中的价格,而此价格在之前已被推高,导致 tokenInPrice 变大,计算最后的 amountIn 变小,用更少的 MONO 换出了原来相同数量的 WETH、WBTC、MONO、USDC、USDT、 DUCK、MIM、IMX 等池子中的代币。

分析

5、攻击者最终把攻击获利转入地址

0x8f6a86f3ab015f4d03ddb13abb02710e6d7ab31b。

以上为以太坊主链上的攻击分析,此外,攻击者除了在以太坊主链上进行攻击外,还在 Polygon 上进行了同样的攻击,攻击手法与以太坊主链上相同,此处不做过多重复的分析。

据慢雾 AML 统计,MonoX Finance 最终损失约 3400 万美元,包括约 2.1K 个 WETH、1.9M 个 WMATIC、36.1 个 WBTC、143.4K 个 MONO、8.2M 个 USDC、 9.1M 个 USDT、1.2K 个 LINK、3.1K 个 GHST、5.1M 个 DUCK、4.1K 个 MIM 以及 274.9 个 IMX。

总结

本次攻击是利用了 swap 合约里没有对池中传入和传出代币作检查,从而利用价格更新机制的问题,由于在 swap 合约中会对池中传入和传出的代币的价格调用同一个函数 _upTokenInfo 来进行更新,而当传入和传出的代币为同一种代币时,第二次调用 _upTokenInfo 函数时,通过价格计算后的更高的 tokenOutPrice 会覆盖掉价格更低的 tokenInPrice,以此来不断推高池中该代币的价格,最后可以换出池中其他的所有代币来获利离场。


a16z 合伙人:Web3 的新思维、新策略和新指标   

每个公司都面临着不同的“冷启动问题”:你如何从无到有?如何获取客户?如何创造网络效应——即当更多的人使用你的产品或服务时,你的产品或服务对客户而言变得更有价值——从而激励更多的用户到来?

简而言之,你如何“进入市场”并说服潜在客户在你的产品或服务上花费他们的金钱、时间和注意力?

Web2 是由大型中心化产品/服务定义的互联网时代,比如亚马逊、eBay、Facebook 和 Twitter,其中绝大多数的价值是由平台本身而不是用户产生。大多数 Web2 组织对于上述问题的回应是对销售和营销团队进行大量投资,这是传统的进入市场 (go-to-market, GTM) 策略的一部分,GTM 的重点是创造潜在客户、获取和留住客户。

但近年来,一种全新的组织建设模式出现了。这种新模式利用去中心化的技术,通过被称为代币 (Token) 的数字原语,将用户带入所有者的角色,而不是由企业控制——即由中心化的领导来制定有关产品或服务的所有决策,甚至在使用用户数据和免费的、用户生成的内容时也是如此。

这种被称为 Web3 的新模式,彻底改变了这些新型公司的 GTM (进入市场) 理念。虽然一些传统的用户获取框架仍然是相关的,但 Token 的引入和新的组织结构 (如去中心化自治组织(DAO))需要各种 GTM 策略。由于 Web3 对很多人来说还是个新事物,但在这一领域有巨大的发展空间,在这篇文章中,我将分享一些在这一背景下思考 GTM 的新框架,以及这个生态系统中可能存在的不同类型的组织。我还将提供一些技巧和战术,以帮助那些希望伴随 Web3 的不断发展,创建自己的 Web3 GTM 策略的构建者。

01. 全新 GTM 策略的催化剂:代币

用户获取漏斗的概念是 GTM 的核心,大多数企业都非常熟悉这个概念:从漏斗顶部的意识和潜在用户生成 (Awareness & Lead Generation),到漏斗底部的转化 (Conversion) 和留住用户 (Retention),如下图所示。因此,传统的 Web2 GTM 通过这个非常线性的用户获取视角来解决冷启动问题,包括定价、市场营销、合作伙伴、销售渠道映射和销售队伍优化等领域。成功的衡量标准包括网站点击率、每个客户为企业带来的收入等等。

Web3 改变了启动新网络的整个方法,因为 Token (代币) 为解决冷启动问题提供了一种替代传统方式的方法。核心开发团队可以使用 Token 来吸引早期用户,而不是在传统营销上花费资金来吸引和获取潜在用户,在网络效应还不明显或尚未开始时,这些用户可以因为他们的早期贡献而获得奖励。这些早期用户不仅是将更多的人带入该网络的传道者 (他们也希望通过自己的贡献获得回报),而且从本质上说,这使得 Web3 中的早期用户比 Web2 中的传统业务开发或销售人员带来更强大的影响力

比如借贷协议 Compound (披露,a16z 是该协议以及本文讨论的其他组织的投资方),该协议使用代币来激励早期的放贷人 (lenders) 和借款人 (borrowers),也即以 COMP 代币的形式为参与其「流动性挖矿」的用户提供额外的奖励,从而“引导流动性”。该协议的任何用户,无论是放贷人还是借款人,都会获得 COMP 代币奖励。该流动性挖矿计划于 2020 年启动后,Compound 协议中的总锁仓价值 (TVL) 从 1 亿美元跃升至 6 亿美元。值得注意的是,虽然代币奖励能够吸引用户,但这种方式本身并不足以让用户变得具有“粘性”,对此稍后再详细介绍。虽然传统公司确实通过股权激励员工,但它们很少在经济上长期激励客户。

总结一下:在 Web2 中,GTM (进入市场) 的主要利益相关者是客户,通常是通过销售和市场营销获得的;而在 Web3 中,某个组织的 GTM 利益相关者不仅包括他们的客户/用户,还包括他们的开发者、投资者和合伙人。因此,许多 Web3 公司发现社区比销售和市场营销角色更重要。

02. Web3 中的 GTM 矩阵

对于 Web3 组织而言,根据其组织结构 (中心化 vs 去中心化) 和经济激励 (没有 Token vs. 使用 Token),其 GTM (进入市场) 策略取决于该组织在下图矩阵中的位置:

a16z 合伙人:Web3 的新思维、新策略和新指标

撰文:Maggie Hsu,a16z 合伙人编辑:南风   ...

关于我们

支持iOS|android|windows等平台

  • 用户支持
  • 帮助中心
  • 服务条款
微信二维码
欧 易 (OKX) 数字货币交易平台 Powered by OKX
QR code