Meme 币 NORMIE 遭遇攻击, 价格暴跌 99%

时间:2024-09-22 编辑: 浏览:(132)

2024 年 5 月 26 日,Base 生态 Meme 币 NORMIE 遭到闪电贷攻击,NORMIE 币的价格下跌 99%。有用户曾花费 116 万美元买入 1123 万枚 NORMIE 代币,目前价值不到 150 美元,损失惨重。攻击发生后,NORMIE 项目方称部署者钱包的 ETH 余额将全部用于对此次事件进行补偿和修复,NORMIE 项目方随后也推出了 V2 版本的 NORMIE,并提醒 NORMIE 代币持有者进行迁移。

(https://twitter.com/crown_premium_P/status/1795354390066590160)

攻击简述

NORMIE 代币是 Base 生态的一个 Meme 币,其在 ERC20 标准的基础上,增加了税费的功能。

本次攻击的本质在于 NORMIE 代码的「 _transfer 」函数存在漏洞,使得 NORMIE 代币可以大量增发到 NORMIE 代币地址上,而增发的部分 NORMIE 代币会直接到交易池中换成 ETH 发送到项目方的地址,这会导致交易池中的 NORMIE 价格下跌,攻击者再利用闪电贷进行套利,赚取收益。

该漏洞具体来说,即当转移 NORMIE 代币时,如果转账金额等于「 teamWalletAddress 」持有的 NORMIE 代币数量,那么接收者就可以被加到「 premarket_user 」名单里面,而在「 premarket_user 」名单里的接收者在接收到 NORMIE 代币时,就会触发给 NORMIE 代币地址增发 NORMIE 代币的操作,当 NORMIE 代币地址持有的 NORMIE 代币数量达到一定的额度时,其持有的部分 NORMIE 代币会被拿到交易池中去换成 ETH 发送到项目方地址上,从而导致交易池中 NORMIE 代币价格下跌。

攻击中涉及的关键地址

本次攻击涉及多笔交易,此处仅以下述这笔交易为例进行分析:

https://basescan.org/tx/0xa618933a0e0ffd0b9f4f0835cc94e523d0941032821692c01aa96cd6f80fc3fd

攻击 EOA:

0xf7f3a556ac21d081f6dba961b6a84e52e37a717d

攻击者 1(合约):

0xef0ba56da26b4ddfef0959c1d0fc7a73a908befc

攻击者 2(合约):

0x5ff34545ea227bca3826b11d6c1599095b39d9b8

NORMIE 代币(漏洞合约):

0x7F12d13B34F5F4f0a9449c16Bcd42f0da47AF200

Sushi: Router v2:

0x6bded42c6da8fbf0d2ba55b2fa120c5e0c8d7891

WETH(Wrapped Ether):

0x4200000000000000000000000000000000000006

SLP(Sushi 中 WETH 和 NORMIE 的池子,采用 Uniswap V2 协议):

0x24605e0bb933f6ec96e6bbbcea0be8cc880f6e6f

Normie Deployer:

0xd8056b0f8aa2126a8db6f0b3109fe9127617beb2

另一个 WETH 和 NORMIE 的池子(后文简称池子 0x67ab,采用 Uniswap V3 协议):

0x67ab0e84c7f9e399a67037f94a08e5c664dc1c66

攻击流程分析

攻击准备

攻击准备阶段,攻击者从 Sushi 去中心化交易所的 SLP 池子中,用「 2 」个 ETH 换出了约「 171,955 」个 NORMIE 代币,用于后续攻击。

攻击实施

攻击实施阶段,攻击者首先将自己加入「 premarket_user 」名单里(该名单里面本来只有项目开发者的地址),然后再利用 NORMIE 代币的「 _transfer 」函数的漏洞,给 NORMIE 代币地址上增发大量的 NORMIE 代币,这些代币的一部分会被拿到 SLP 池子中换取 ETH,换取的 ETH 转移给了项目方地址,从而导致 SLP 池子中 NORMIE 代币的价格被大幅拉低。攻击者利用闪电贷,在价格下跌前后买卖 NORMIE 代币,赚取利差。

具体步骤如下:

1、攻击者将自己的地址加入「 premarket_user 」名单。攻击者观测到 Normie Deployer 持有「 5,000,000 」个 NORMIE 代币。于是攻击者从 SLP 中闪电贷出「 5,000,000 」个 NORMIE 代币,此时 NORMIE 代币的「 _transfer 」函数被调用,SLP 将「 5,000,000 」个 NORMIE 代币转给攻击者。从 _transfer 函数可以看出,在转账结束后,「 _get_premarket_user 」函数会被调用,在该函数中,攻击者之前并不在「 premarket_user 」名单里面,然而由于攻击者刻意指定了转移的 NORMIE 代币数量为「 5,000,000 」个,该数量正好与「 teamWalletAddress 」(Normie Deployer)持有的 NORMIE 代币数量一致,因此攻击者的地址成功加入到「 premarket_user 」名单里。攻击者给 SLP 还了「 5,020,000 」个 NORMIE 代币,还清了闪电贷。

2、攻击者利用「 _transfer 」函数的漏洞,给 NORMIE 代币地址上增发大量的 NORMIE 代币,这些代币的一部分会被拿到 SLP 池子中换取 ETH,换取的 ETH 转移给了项目方地址,从而导致 SLP 池子中 NORMIE 代币的价格被大幅拉低。

攻击者从池子 0x67ab 中进行闪电贷,将该池子持有的所有 NORMIE 代币(大约「 11,333,141 」个)借出来,于是池子将 NORMIE 代币转移给攻击者,此时又进入到了 NORMIE 代币的「 _transfer 」函数中,从该函数中可以看到,由于此时的「 recipient 」(攻击者)在「 premarket_user 」名单中但不在「 isExcludedFromFee 」名单中,并且本次转账的发起者是 market pair,条件判断通过,NORMIE 代币地址上会增发「 amount 」数量的 NORMIE 代币。

闪电贷触发了攻击者的回调函数,在回调函数里,攻击者在操纵 SLP 池子价格之前,利用借到的部分 NORMIE 代币(「 9,066,513 」个)去 SLP 池子中换出了约「 65 」个 ETH。此时攻击者还剩约「 2,266,628 」个 NORMIE 代币。

攻击者拉低 SLP 池子中 NORMIE 代币相对价格。攻击者将剩下的 NORMIE 代币发送给 SLP 池子,然后再调用 SLP 池子的「 skim 」函数(该函数会强制使池子真正持有的代币数量与 reserve 变量记录的代币数量一致,将多余的代币转移到指定的地址上)将 NORMIE 代币取回来,由于「 skim 」函数会触发给攻击者转 NORMIE 代币的操作,因此 NORMIE 代币地址上又会增发约「 2,266,628 」个 NORMIE 代币。攻击者重复执行给 SLP 池子发送 NORMIE 代币,然后利用「 skim 」函数提取出 NORMIE 代币的操作(共执行了 100 次),每当 NORMIE 代币地址上持有的 NORMIE 代币数量超过了某个额度,则会调用 NORMIE 的「 swapAndLiquify 」函数,在 SLP 池子中,将 NORMIE 代币地址上的部分 NORMIE 代币换成 ETH 发送给项目方,因此 SLP 池子中的 NORMIE 代币数量增多,NORMIE 代币的价格被大幅拉低。

攻击者随即使用「 0.5 」个 ETH 从 SLP 池子中换取了「 11,040,494 」个 NORMIE 代币,还掉了从池子 0x67ab 借的闪电贷。在 SLP 池子价格被操纵之前,攻击者使用「 9,066,513 」个 NORMIE 代币换取了「 65 」个 ETH,而现在,只需要 0.5 个 ETH,就可以换取「 11,040,494 」个 NORMIE 代币,可见 NORMIE 价格大幅降低了。

收割赃款

攻击者在攻击实施阶段已经获利约「 65 」个 ETH,此时攻击者手上还剩约「 1,973,981 」个 NORMIE 代币。攻击者在池子 0x67ab 和 SLP 中,将这些 NORMIE 代币换成了 ETH,共换得了约 12 个 ETH。去掉攻击者最开始投入的「 2 」个 ETH,最终攻击者获利约「 75 」个 ETH。

攻击后续

攻击发生后,NORMIE 项目方与攻击者进行了谈判,最终攻击者同意归还 90% 被盗取的 ETH,保留 10% 的 ETH 作为漏洞赏金。

安全建议

近段时间 Meme 币在区块链领域掀起了热潮,许多开发者在开发合约的时候会借鉴链上已有的合约,从 ZAN 的 AI Scan 工具可以看到,本次分析的漏洞合约 NORMIE 跟以太坊上一个叫做 HattoriHanzo 的合约相似度高达 96%,由此我们推断 NORMIE 借鉴了 HattoriHanzo 合约的实现,通过相似度详情展示,我们看到两者的不同之处主要在于 NORMIE 增加了给 NORMIE 代币地址增发 NORMIE 代币的代码,这段代码意欲何为,难道是项目方为了 Rug Pull 而留的后门?

图片来源:https://zan.top/review/reports/public/62ce396d-e6f8-4e68-a922-2242c5a622b3

通过本次攻击事件,我们建议用户们在持有新兴代币前,使用 ZAN 的 AI Scan (https://zan.top/home/contract-review?chInfo=ch_WZ)工具对代币进行扫描,避免持有漏洞代币,遭遇巨额损失。

本文由 ZAN Team(X 账号@zan_team) 的 Cara(X 账号@Cara6289)撰写。

推荐
最新 更多 >
  • 1 Ethereum

    Fabian Vogelsteller。资料来源:视频截图,DoinGud / YouTubeLUKSO 项目背后的远见者 Fabian Vogelsteller 旨在通过“构建以 NFT 为中心的综合工具集、生态系统和市场,基于… >这不仅简化了开发人员的工作,还确保了任何新铸造的 ERC-20 代币的可预测性。Vogelsteller 于 2018 年离开以太坊基金会,专注于他的新