Meme 幣 NORMIE 遭遇攻擊, 價格暴跌 99%
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)撰寫。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。