二級標題
二級標題
Filecoin「雙花」始末
據Filfox 和FileStar 的Filecoin 礦工反饋,週三幣安遭遇了價值數百萬美元的FIL雙花充值攻擊。
起因為有一筆61,000 FIL(約合460萬美元)的交易所入賬花費了太長時間,於是Filfox 和FileStar 礦工為了加速而發起了一筆RBF 交易。而該筆RBF 交易導致幣安賬戶兩次入金,最終入賬120,000 FIL。事後,Filfox和FileStar開發者回應稱,Filecoin 的RPC 代碼裡存在“嚴重的漏洞”。該漏洞導致幣安在看到兩筆有衝突的交易後,選擇了同時入賬。
二級標題
二級標題
技術細節复盤
交易所和中心化錢包等中心化託管機構會依據鏈上的轉賬行為給用戶入賬,因此如何高效、準確、及時的解析鏈上的轉賬行為是非常關鍵的,常見的做法是先獲取某個區塊內的所有交易ID,然後基於交易ID獲取對應的交易內容和交易執行結果。
Filecoin lotus 節點提供了多個API用於鏈上交易的獲取,例如ChainGetBlockMessages 可以獲取指定區塊內的所有交易內容,StateGetReceipt 可以獲取指定交易ID對應的執行結果,此次被攻擊的交易所就是採用這兩個API 來進行鏈上轉賬行為的解析,並基於此為用戶入賬。
不過他們沒有註意到,StateGetReceipt 接口有個比較不符合常規邏輯思維的設計,就是在獲取指定交易ID的執行結果時,如果這筆交易已經被RBF(replace by fee),則會返回最終RBF 成功的那筆交易的執行結果,並且在返回值裡沒有任何的提示表明這筆是RBF 後的交易的執行結果。
假設攻擊者首先發送了TX1,對應的交易ID 為TXID1,隨後攻擊者對TX1 進行了RBF,生成TX2,對應的交易ID 為TXID2,最終TX2 上鍊成功。此時通過StateGetReceipt 對TXID1 和TXID2 分別查詢,都能得到執行正確的結果。
攻擊行為發生後,Filecoin 官方開發人員對API 進行了補充說明,明確了StateGetReceipt 的返回邏輯,並將在v1 版本後廢棄此API
https://github.com/filecoin-project/lotus/pull/5838/files
Cobo Custody 技術團隊在對接Filecoin 的過程中已經發現了上述問題,因此沒有採用ChainGetBlockMessages 和StateGetReceipt 來獲取鏈上的轉賬行為,而是採用ChainGetParentMessages 和ChainGetParentReceipts 來獲取已經成功上鍊的交易,從而從根本上避免了被雙花充值的風險,因此未受此次雙花充值攻擊的影響。
在使用ChainGetParentMessages 和ChainGetParentReceipts 的過程中,Cobo Custody 技術團隊發現lotus 節點的一些返回值也並不是很符合常規邏輯思維,例如對於空塊的處理是有一些問題的。 Cobo Custody 技術團隊對此做了妥善的安全處理,在此也提示其他中心化託管機構需要仔細檢查相關的對接代碼,避免其他的雙花充值攻擊行為。
雙花(Double-spending)即使用上一次交易的代幣,再次進行交易,進而導致產生虛假交易。
2018 年比特幣黃金(BTG) 就曾受到一名礦工的惡意攻擊,該礦工臨時控制了BTG 區塊鏈,在向交易所充值後迅速提幣,再逆轉區塊,成功實施雙花攻擊。此次攻擊者竊取超過388200 個BTG,價值高達1860 萬美元,也是區塊鏈史上最著名的雙花攻擊之一。


