深入解讀:FTX 交易所免手續費漏洞致使被薅 20W 刀 XEN 羊毛案

2022-10-18 20:10:00

從技術出發深入分析此漏洞,用樣例代碼復現攻擊原理

作者:十四君

封面:Photo by Markus Spiske on Unsplash

被朋友 Q 到近期火熱的羊毛事件,來分析本次利用 FTX 交易所免手續費提幣的漏洞,結合智能合約回調發起的攻擊,截止目前,不僅是始作俑者黑客獲利超 10W 刀,更有 15 名同樣思路的攻擊者部署合約發起攻擊。

由於 FTX 已經通過人工審計針對攻擊者進行懲罰,該漏洞處於風險可控階段,所以本文處於科普目的系統的分析攻擊的前因後果與鏈上數據表現,總結對 web3 發展的啓發。

背景

XEN 是什么?

是近期大火的一個 XEN 幣,到 10-15 為止已有超過 120W 筆交易,其實筆者對這類缺乏長期價值對 Web 毫無建設性意義的項目一直沒什么興趣,因為他的機制就是只要發起的交易消耗了多少的 GAS,就可以鑄造出一定數量的 XEN 幣,而衆所周知 Etherscan 有針對 gas 消耗的排行榜

可以看到真正出色的項目往往由於服務用戶多交易量大,所以 gas 消耗高,仿佛成了另一種的應用商店熱門榜單,而 XEN 一舉通過 “衝票 “成了冠絕以太坊整個生態的 Top1,且等於其他好項目的總和。

本文涉及較多鏈上數據分析可拓展閱讀:etherscan

受害方 FTX 交易所

本次被攻擊的也正是其免費提幣的優惠活動,在平臺有質押且有一定交易記錄後即可發起免費提幣,而提幣會受制於之前交易量(因此本文僅出於科普分析攻擊手法,請勿模仿,易於被 FTX 官方封號沒收質押資產)

鏈上數分結果

其實 mirror 上爆出的還不是最大的攻擊者,而此攻擊手法最早出現在 10-10 號,截止 10-15 號,合計類似邏輯的攻擊地址有 38 個,合計 1.45W 筆攻擊(無法判斷地址背後是否為相同攻擊者)。

計算依據:FTX 熱錢包單筆轉移 gas 消耗大於 5W,且 to 地址是合約地址的交易。

下圖為其中 top10 的攻擊者,其交易數佔總攻擊數的 80%,致使 FTX 手續費損失 86 個 ETH

筆者通過對其交易的 gas 消耗總值核算後,得出 FTX 本次損失總值為:108.19 個 ETh

合計鑄造出 XEN 約 24 億個。按 14 號日常價格估算的話,則黑客總收益在 24W 美金以上

詳細數據可< 十四君> 公衆號後臺輸入”FTX 與 XEN” 獲得

黑客攻擊流程

核心原理

智能合約 fallback/receive 可任意執行邏輯。

何一個合約都有默認的 fallback 函數,典型的功能就是讓合約可以接收以太幣並對其做出反應,這也是代幣型合約用來拒絕轉账、發出事件或轉發以太幣的典型模式。後來更多場景是應用在代理升級模式(合約部署鏈上本身不可更改,但可以修改指向新的合約,從而實現一定程度上的升級)

總之就是,一筆指向合約地址的交易,如果沒有匹配到對應執行的函數,就必然會執行 fallback 函數,而 fallback 可以將輸入參數指向另一個合約地址,從而執行對應的邏輯。

參考:https://blog.soliditylang.org/2020/03/26/fallback-receive-split/

攻擊流程

其實看完手法核心,已經很明顯了

  1. 黑客先部署了一個攻擊合約 0xCba9b1
  2. 然後利用 FTX 的交易免費提幣功能
  3. 讓 FTX 的熱錢包 0xc098b2,發起了一筆指向攻擊合約的提幣
  4. 導致交易觸發指向 XEN 合約的 Mint 函數調用
  5. 由於 XEN 合約可以設置 Mint 出代幣的收益方,從而將代幣轉入黑客地址

攻擊手法還原

其實任意 fallback 非常好觸發,咱們通過現場手搓實現下,當然並不是 MintXen,而是臨時隨意的一個 20token 來示意。

下文便是最簡單的一個 ERC20 代幣了,任何人均可執行 mint 函數,雷同於 XEN 了

對於 ERC20/721 實現原理可拓展閱讀:xx

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract token20 is ERC20 {    constructor() ERC20("Gold", "GLD") {}    function mint(address to,uint256 amount) public {        _mint(to,amount);    }}

而攻擊合約也很簡單,設置寫死要調用 Mint 的 XEN 合約地址以及黑客收益的地址。

interface IERC20 {function mint(address to,uint256 amout) external ;}contract attack{    address ERC20Addr = 0xd9145CCE52D386f254917e481eB44e9943F39138;    address myAddr = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;    receive() external payable {        IERC20(ERC20Addr).mint(myAddr,1e18);        selfdestruct(payable(myAddr));    }}

可以看到實驗中,對此攻擊合約發起的任意一筆交易,即會觸發了 receive,且 myAddr 的 GLD 余額增加 1e18 個,當然並不能拿着這個代碼就去復現黑客的實現了,因為要鑄造更多的 GEX 還得增加工廠合約部署的邏輯,即能提高 gas 消耗也吻合 XEG 的 mint 管理。

總結-從攻擊事件看” 元交易 “的發展

其實如果不是黑客本身知道 FTX 有免費提幣優惠,且其提幣的交易的 gasLimit 設置為固定值 50W,則很難發起這樣的攻擊,因為依據以太坊黃皮書,普通轉账也僅僅需要 2.1W 的 gas 即可。

黑暗森林的 web 裏知其雄守其雌,這樣的攻擊從歷史進程來看,其實更有警示性意義

筆者想談談元交易的發展

元交易是來自於 Christian Lundkvist 教授在 2015 年的一個設想

如今上手 Dapp 實在是太麻煩了,以太坊生態若想普及,就應該允許新用戶直接使用其功能,而不是先安排幾座大山讓用戶翻山越嶺。這意味着需要為新來的用戶墊付 Gas 費用。當前的以太坊協議並沒有提供原生方法來實現這一點。然而,得益於公/私密鑰對,用戶可以通過對元交易 進行籤名並證明所有權。

相信未來元交易終會成為應用主流,本次的 FTX 代付 gas 執行免費提幣轉账還只是元交易的某種小小(僞)實現,但只有安全+無感才能迎接全民低成本上鏈時代的到來(而非低代幣 gas 價格),為此安全與風控都需要特別注意,這也是筆者分析安全案件的初衷。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

特朗普交易還能持續多久?

共和黨人唐納德-特朗普在大選中獲勝,迅速推高了美國股市、美元和比特幣,重塑了他准備在 1 月份重返...

杜牧白
2 1小時前

美國“大空頭”深度布局中國股市 但謹慎對衝

著名對衝基金經理邁克爾·伯裏(Michael Burry)近期動作頻出。 作為在2008年成功預測...

流動的沙
2 1小時前

特朗普悖論:貿易战預期刺激中國商品出口

美國當選總統特朗普曾表示,他一上任就會對中國舉起經濟大棒,預計從2025年2月起,中國商品可能會面...

流動的沙
2 1小時前

特朗普可能將全球氣候領導權拱手讓給中國

1、隨着共和黨眼看就要大獲全勝,美國可能最快在 2025 年初宣布退出《巴黎協定》,並在 2026...

杜牧白
3 1小時前

鮑威爾放鷹 指數走低 特斯拉跌超5% 貴金屬重挫

周四美股走低,道指跌逾200點。大選漲勢逐漸減弱,市場消化美聯儲主席鮑威爾的講話並評估最新的通脹數...

幣海獨步者
5 9小時前

比特幣儲備計劃來了?特朗普盟友提議賣黃金儲備 購买100萬枚BTC

唐納德-特朗普(Donald Trump)在參議院的一位盟友提出了一項計劃,在不增加政府赤字的情況...

杜牧白
6 9小時前