Four.meme黑客攻击事件分析与防范建议

2025-02-13 11:08:43
Four.meme 平台因设计缺陷导致的 memecoin 攻击事件,揭示了在经济模型和智能合约审计中需加强的安全性与风险管理。

微小发报道:

背景介绍

four.meme 是由 Binance Academy 孵化的,跟 pump.fun 差不多的 memecoin launchpad。最近我们发现,平台上的 memecoin snowboard( 链接 )遭遇了黑客攻击,损失大约 15,000 美金。攻击交易记录在这里:交易记录

攻击及事件分析

four.meme 的技术原理

four.meme 是一个基于 bnb smartchain 的 memecoin launchpad,类似的 launchpad 通常分为三个阶段:

  1. 阶段1:用户在平台上自定义名称、logo、描述以及社交账户(可选),创建 memecoin。

  2. 阶段2:其他用户可以在平台上买卖这个 memecoin。

  3. 阶段3:当该 memecoin 的市值达到一定标准(24 BNB),就可以迁移到 DEX(PancakeSwap)上。

接下来,我们来深入了解每个阶段的具体技术细节。

阶段1

用户在 launchpad 平台上,通过接口填写 memecoin 的详细信息。填写完毕后,支付手续费就可以完成链上合约的创建。需要注意的是,这个合约是由 launchpad 官方创建的,所以最终的 ERC-20 Token 的所有者也是 launchpad 官方合约。来看一下 four.meme 上创建的一个 memecoin 的例子:

首先,用户支付手续费,launchpad 官方合约就会完成 memecoin 的 ERC-20 Token 合约部署,并铸造 1,000,000,000 的初始资金(预计虚拟池总量为 30 BNB)。接着,我们会看到创建好的 Token 的所有者仍然是 launchpad 的智能合约。 这说明了,虽然用户在 launchpad 上创建了 memecoin,但链上 ERC-20 合约的 owner 可并非该用户。这样一来,就能有效防止用户随意 mint 等恶意操作。完成合约部署后,memecoin 进入了第二阶段,所有平台用户都可以进行买卖。

阶段2

在这一阶段,其他用户能通过平台进行交易,但买卖后的 token 不能直接通过 transfer 转给其他用户。咱们来看一下链上 ERC-20 Token 的源代码。

在 _beforeTokenTransfer 中,通过参数 _mode 对转账进行了限制。

此时,阶段2的 Token 的 _mode 被设定为1,即 MODE_TRANSFER_RESTRICTED,限制了转账给第三方的行为。这一操作旨在防止场外 OTC 对价格造成冲击。买卖时,four.meme 合约会先将 _mode 改为2,然后通过 transfer 给用户进行转账,完成后再把 _mode 设回1,限制其他用户的转账,以完成 memecoin 的购买。

阶段3

当 memecoin 的市值达到 24 BNB 时,Bonding Curve Process 就会达到 100%。此时,launchpad 官方会将剩下的 20% memecoin 和 24 BNB 迁移到 DEX PancakeSwap,标志着阶段3的完成。接下来就是 launchpad 官方将 memecoin 迁移到 PancakeSwap 的交易。

在这笔交易中,launchpad 官方首先将 memecoin 的 _mode 设置为 0,即 MODE_NORMAL,允许用户进行场外交易。接着,创建了 memecoin 和 WBNB 的交易对,最后将 23.5 BNB(其中 0.5 BNB 为手续费)和2亿 memecoin 的流动性添加到了该交易对中。添加流动性的价格计算为 sqrtPriceX96 = 27169599998237907265358521,而 sqrtPriceX96 的计算公式如下: 添加流动性时,memecoin 的价格是 0.0000001175 WBNB,这可以通过 23.5 WBNB 除以 2 亿个 memecoin 计算得出,换句话说,每个币在 DEX 上的价格都是一致的,都是 0.0000001175 WBNB。

攻击原理

了解 memecoin 在 four.meme 的整个生命周期之后,咱们来看看攻击的具体流程。首先,攻击者提前设立了一个初始化完成的 DEX 交易对,并将交易对的 sqrtPriceX96 设置为一个超乎寻常的数值——10000000000000000000000000000000000000000,这比正常值大了 368058418256012 倍。

当 memecoin 的 bond curve process 达到 100% 时,launchpad 会将这枚 memecoin 迁移到 DEX,过程中使用了 createAndInitializePoolIfNecessary 来创建交易对。由于这个交易对早已被攻击者创建并初始化,因此流动性是根据攻击者设定的价格添加的,导致 memecoin 的价格被无缘无故地抬高。

这时,launchpad 用 1 个 memecoin 和 23.5 WBNB 添加了流动性。随后,疑似攻击者又用 1600 个 memecoin 将交易对中的 23.4 WBNB 兑换完毕,攻击就此结束。

总结


此次漏洞的根源在于,Four.meme 的 bonding curve process 达到 100% 后,向 DEX 迁移时,使用了 createAndInitializePoolIfNecessary 创建 PancakeSwap 交易对,没有考虑到交易对已被提前创建的情况。错误地使用了攻击者事先创建并初始化的交易对,利用了攻击者设定的错误价格来添加流动性,最终导致 memecoin 的价格暴涨。攻击者再利用手中的 memecoin 将池子里的 WBNB 掏空。建议项目方在设计经济模型和代码逻辑时务必多方验证,合约上线前最好选择多个审计公司进行交叉审计。

Reminder: Develop a sound understanding of currency and investment, approach blockchain rationally, and stay aware of risks. Report any illegal activities to the authorities
温馨提醒,请广大读者树立正确的货币观念和投资理念,理性看待区块链,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。
  • English ·
  • 简体中文 ·
  • 繁體中文 ·