鏈上新局中局,Rug槓桿大規模解密的Web3安全預警


CertiK安全專家發現一種「退出騙局」方法,透過地毯拉力引發關注。經過調查,發現多起事件指向同一團夥,涉及超過200個Token退出騙局,可能涉及大規模自動化的駭客團隊。攻擊者創建ERC20代幣和Uniswap V2流動性礦池,並在新代幣交易次數後將流動性礦池中的WETH抽空。攻擊者設計了局中局,迷惑掃描用戶。攻擊者利用代幣後門生成ETH。繼續分析發現大規模自動化退出騙局收割機,針對鏈上打新機器人。專案方需加強代幣安全機制,並警惕攻擊者的反防騙手段。

最近,CertiK安全專家團隊仔細檢測出多種相同的「退出騙局」方法,以我們俗稱的地毯拉力。

在我們進行深入挖礦後發現,多起相同手法的事件都指向同一個團夥,最終關聯到超過200個Token退出騙局。這讓我們可能發現一個大規模自動化的,透過「退出騙局」的方式進行資產收割的駭客團隊。

在這些退出騙局中,攻擊者會創建一個新的ERC20 代幣,並用時預先創建的代幣加上一定數量的WETH 創建一個Uniswap V2 的流動性礦池。

當鏈上打新的機器人或使用者在該流動性礦池購買一定次數的新代幣後,攻擊者底座透過憑空產生的代幣,將流動性礦池中的WETH全部鍛鍊。

由於攻擊者在憑空獲取的代幣中沒有體現在總供應量(totalSupply),也沒有觸發轉移事件,在etherscan上是看不到的,因此難以開採。

攻擊者不僅考慮了認知性,還設計了一個局中局,用於麻痺擁有初級技術能力,會看其他掃描的用戶,用一個小問題來掩蓋他們真正的目的…

深入騙局

我們以其中一個案例為例,詳細解說一下該退出騙局的細節。

被我們偵測到的實際上是攻擊者用巨量代幣(偷偷造幣的)消耗乾流動性礦池並盈利的交易,在該交易中,項目方總共用了416,483,104,164,831(約416 萬億)個MUMI 兌換生長了約9.736個WETH,消耗了礦池子的流動性。

然而該交易只是整個騙局的最後一環,我們要了解整個騙局,就需要繼續往前追溯。

部署代幣

3月6日上午7點52分(UTC時間,下方同),攻擊者地址(0x8AF8)Rug Pull部署了名為MUMI(全名為MultiMixer AI)的ERC20代幣(地址為0x4894),並預挖了420,690,000(約4.2億)個代幣且全部分配給合約部署者。

預挖代幣數量與合約原始碼相對應。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

增加流動性

8點整(代幣創建8分鐘後),攻擊者地址(0x8AF8)開始增加流動性。

攻擊者地址(0x8AF8)調用代幣合約中的openTrading函數,透過uniswap v2工廠創建MUMI-WETH流動性礦池,將預挖的所有代幣和3個ETH添加到流動性礦池中,最終獲得約1.036個LP代幣。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

從交易細節可以看出,究竟用於添加流動性的420,690,000(約4.2億)個代幣中,有63,103,500(約6300萬)約個代幣又被發送回代幣合約(地址0x4894),透過查看合約發現,代幣合約原始碼會為每筆轉帳收取一定的手續費,而收取手續費的地址正是代幣合約本身(具體實現在「_transfer函數中」)。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

奇怪的是,合約中已經設定了稅收地址0x7ffb(相當於一周手續費的地址),最後一筆手續費卻被發到了代幣本身合約。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

因此最終被添加到流動性礦池的MUMI代幣數量為扣完稅的357,586,500(約3.5億),而不是420,690,000(約4.3億)。

鎖定流動性

8點1分(流動性礦池創建1分鐘後),攻擊者地址(0x8AF8)透過添加流動性鎖定獲得全部1.036個LP代幣。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

LP被鎖定後,理論上攻擊者地址(0x8AF8)擁有的所有的MUMI代幣則被鎖定在流動性礦池內(除開作為手續費的那部分),因此攻擊者地址(0x8AF8)也無法通過移除流動性進行地毯拉動的能力。

為了讓用戶放心購買新發行的代幣,很多專案方都將LP進行鎖定,意思是專案方在說:“我不會跑路的,大家放心買吧”,然而事實真的是這樣嗎?顯然不是,這個案例就是如此,讓我們繼續分析。

地毯拉力

8點10分,出現了新的攻擊者地址②(0x9DF4),Ta部署了代幣合約中的稅收地址0x7ffb。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

這裡有三個值得一提的點:

1.提高配置園區地址的地址和配置代幣的地址不同,這可能說明項目方在減少各個操作與地址之間的關聯性、行為溯源的關聯性

2.園區地址的競爭不隱藏,園區地址中可能有未引入的營運

3. 稅收契約比代幣契約晚間部署,而代幣契約中的稅收地址已被寫死,這意味著項目方可以預知稅收契約的地址,由於CREATE指令在確定創建者地址和隨機數的情況下,合約地址確定了,那麼專案方就提前使用創建者地址模擬計算產生合約地址

事實上有一個退出騙局都是透過地址進行的,且稅收地址的配置模式特徵符合上述的1、2點。

11點(代幣創建3小時後),攻擊者地址②(0x9DF4)進行了Rug Pull。他透過調用上午的股票(0x77fb)的「swapExactETHForTokens」方法,用股票地址中的416,483,104,164,831(約416萬億)每個MUMI 代幣兌換了約9.736 個ETH,並消耗了礦池子中的流動性。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

由於稅收合約(0x77fb)不開源,我們數十個碼進行反編譯,反編譯結果如下:

https://app.dedaub.com/decompile?md5=01e2888c7691219bb7ea8c6b6befe11c

查看完整的缺口合約(0x77fb)的「swapExactETHForTokens」方法反編譯程式碼後,我們發現實際上該函數實現的主要功能是透過uniswapV2路由器將數量為「xt」(呼叫者指定)的缺口合約(0x77fb)擁有的MUMI 代幣兌換成ETH,美洲黑人地址中聲明的“_manualSwap”地址。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

_manualSwap位址外部的儲存位址為0x0,以json-rpc的getStorageAt指令查詢後發現_manualSwap對應的位址稅合約(0x77fb)的部署者:攻擊者②(0x9DF4)。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

此筆Rug Pull交易的輸入參數xt為420,690,000,000,000,000,000,000,對應420,690,000,000,000(約420兆)個MUMI代幣(MUMI代幣的小數為9)。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

也就是說,最終專案方用420,690,000,000,000(約420兆礦池)個MUMI將流動性中的WETH消費幹,完成整個退出騙局。

然而這裡有一個至關重要的問題,那就是稅收(0x77fb)哪來了這麼多MUMI代幣?

從前面的內容我們了解到,MUMI代幣在部署時的代幣合約時的總供應量為420,690,000(約4.2億),而在退出騙局結束後,我們在MUMI代幣合約中查詢到的總供應量數量仍是420,690,000(下面顯示為420,690,000,000,000,000,需要減少小數對應的0,小數為9),黑洞合約(0x77fb)中的遠超總供應量的代幣(420,690,000,690,000的一樣,要知道,如所提的,0x77fb 作為稅收地址甚至沒有被用於接收MUMI 代幣轉賬過程中產生的手續費,稅收被代幣合約接收了。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

手法揭秘

合約哪一代幣

為了探討它的合約(0x7ffb)的代幣來源,我們查看了ERC20的轉帳事件歷史。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

結果發現在關於0x77fb 的任何一周事件的全部6 筆中,只有從稅收合約(0x7ffb)轉出的事件,而沒有MUMI 代幣轉入的事件,乍一看,稅收合約(0x7ffb)的代幣還真是憑空出現的。

因此,達拉斯合約(0x7ffb)地址中憑藉空出現的巨額MUMI代幣有兩個特點:

1.沒有對MUMI合約的總供應量產生影響

2.代幣的增加沒有觸發轉帳事件

現在想法就很明確了,即MUMI代幣合約中一定存在後門,這個後門直接對餘額指標進行,且在修改修改balabce的同時不對應totalSupply,也不觸發轉帳事件。

也就是說,這是一個不標準的、或者說是惡意的ERC20 代幣實現,用戶無法從總供應量的變化和事件中採集到專案方以偷偷的薄荷代幣。

接下來就是驗證上面的想法,我們直接在MUMI代幣合約原始碼中搜尋關鍵字「balance」。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

結果我們發現合約有一個私有類型的「swapTokensForEth」函數,確定參數為uint256類型的tokenAmount,在該函數的第5行,項目方直接將_taxWallet,透過稅收合約(0x7ffb)的MUMI餘額修改為tokenAmount * 10**_decimals,均勻tokenAmount的1,000,000,000(約10億)倍,然後再從流動性礦池中將tokenAmount數量的MUMI兌換為ETH併代幣合約(0x4894)中。

重新連接搜尋關鍵字“swapTokenForEth”。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

「swapTokenForEth」函數在「_transfer」函數中被調用,再細看調用條件,會發現:

1.當路由器的接收位址為MUMI-WETH流動性礦池位址。

2.當有其他地址在流動性礦池中購買MUMI代幣的數量超過_preventSwapBefore(5次)時,“swapTokenForEth”函數將被調用

3.確定的代幣金額為代幣地址所擁有的MUMI代幣餘額和_maxTaxSwap之間的較小值

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

也就是說,當合約偵測到用戶在礦池子中用WETH兌換成MUMI代幣超過5次後,將為矽谷地址偷造巨量代幣,將一部分代幣兌換成ETH存放在代幣合約中。

一方面,專案方表面上進行收稅並定期自動換成少量ETH存入代幣合約,這是給用戶看的,讓大家認為這就是專案方的利潤來源。

另一方面,專案方真正在做的,是用戶交易次數達到5次後,直接修改帳戶餘額,把流動性礦池全部抽乾。

如何獲利

執行完成「swapTokenForEth」函數後,「_transfer」函數也會執行sendETHToFee將代幣地址中收稅獲得的ETH傳送到稅務合約(0x77fb)。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

合約合約(0x77fb)中的ETH可以被其合約內實現的「救援」函數取出。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

現在再回看整個退出騙局中最後一筆營收交易的兌換記錄。

獲利交易中共進行了兩次兌換,第一次是4,164,831(約416萬)個MUMI代幣換0.349個ETH,第二次是416,483,100,000,000(約416兆)個MUMI代幣換9.368個ETH。第二次兌換即為稅收合約(0x7ffb)中「swapExactETHForTokens」函數內發起的兌換,當時數量與輸入參數代表的420,690,000,000,000(約420萬億)個代幣不符,是因為有部分代幣作為雅典娜給了代幣合約(0x4894),如下圖所示:

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

而第一次兌換的,在第二次兌換過程中,當代幣從稅收合約(0x7ffb)發送到路由器合約時,由滿足代幣合約內的後門函數觸發條件,導致觸發「swapTokensForEth」函數所發起的轉換,並不是關鍵操作。

後面的大鐮刀

從上文可以看出,MUMI代幣從部署,到創建流動性礦池,再到地毯拉動,整個退出騙局週期才約3個小時,但卻低於約6.5ETH的成本(3 ETH用於添加流動性,3 ETH用於從流動性礦池中兌換MUMI以作傳導,不到0.5 ETH用於配置合約和發起交易)獲得了9.7個ETH,利潤超過50%。

攻擊者用ETH換MUMI的交易有5筆,前文並沒有提及,交易資訊如下:

https://etherscan.io/tx/0x62a59ba219e9b2b6ac14a1c35cb99a5683538379235a68b3a607182d7c814817 https://etherscan.io/tx/0209676856a 4b1e94fb10898fa597e https://etherscan.io/tx/0xc0a048e993409d0d68450db6ff3fdc1f13474314c49b734bac3f1b3e0dc1f13474314c49b734bac3f1b3e0f39525702072502020 月92140c46a7f7da89b8d125cabc14dc54e7306 https://etherscan. io/tx/0x9ee3928dc782e54eb99f907fcdddc9fe6232b969a080bc79caa53ca143736f75

透過分析在流動性中進行操作的eoa地址後發現,相當一部分的地址為鏈上的“打新機器人”,結合整個騙局快進快出的特點,我們有理由認為,這整個騙局針對的對象正是鏈上十分活躍的各種打新機器人、打新腳本。

因此,無論是代幣表面不一定需要複雜的合約設計、合約部署、流動性鎖定流程,或是中途騙取攻擊者相關地址主動用ETH換取MUMI代幣的懷疑行為,都可以理解為攻擊者為了嘗試嘗試過去鏈上流行打新機器人的反詐騙程式並進行偽裝。

我們透過追蹤資金流向後發現,攻擊所獲得的收益最終全部被攻擊地址②(0x9dF4)發送到了地址資金沉澱地址(0xDF1a)。

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

而實際上我們最近檢測到的多起退出騙局最初的資金來源以及最後的資金去向都指向這個地址,因此我們對這個地址的交易進行了大致的分析和統計。

最終發現,該地址在大約2個月前開始活躍,到今天的業績已經發起了超過7,000筆交易,並且該地址已經和超過200個代幣進行過交易。

我們對其中的約40個代幣交易記錄進行分析,然後發現我們查看幾乎所有代幣對應的流動性礦池中,最終都會有轉賬輸入數量遠大於代幣總供應量的兌換交易將流動性礦池ETH處於老年期,整個退出騙局的週期都開始。

其中部分代幣(名煙中華)的配置交易如下:

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

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

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

Web3安全預警丨鏈上打新局中局,大規模Rug槓桿解密

因此我們可以認定,該地址其實就是一個大規模的自動化「退出騙局」收割機,收割的物件就是鏈上的打新機器人。

該地址現在處於活動狀態。

寫在最後

如果一個代幣在造幣時不對應總供應,也不觸發轉讓事件,我們很難採集項目方是否有在偷偷造幣的代幣,這也將增強“代幣是否安全”,從而完全依賴於項目方是否自覺」的目的地。

因此,我們可能需要考慮改進現有的代幣機製或引入一種有效的代幣總體檢測方案,來保障代幣數量變更的公開透明,現在憑藉事件來捕獲代幣狀態變更是不夠的。

而我們需要警惕的是,但現在大家的防騙意識在提高,攻擊者的反防騙手段確實在提高,這是一個永不停歇的博弈,儘管如此,我們需要保持不斷的學習和思考,才能做到這樣的博弈中保整體。

資訊來源:0x資訊編譯自網際網路。版權歸作者CertiK所有,未經許可,不得轉載

Total
0
Shares
Related Posts