8月22日下午,Fomo3D 遊戲第一輪正式結束,最終大獎由地址 0xa169 獲得,獎金額高達價值
不少人輕易得出結論:獲獎者平平無奇。
幾小時後,安比(SECBIT)實驗室首次宣佈發現Fomo3D大獎獲得者採取一些“特殊攻擊技巧”,使得遊戲臨近結束時,礦工打包入區塊內的交易數量驟減(涉及連續多個區塊),從而起到加速遊戲結束和提高勝率的作用。此前,安比實驗室也在 Last Winner 上輪遊戲結束時捕獲到多個十分類似的異常區塊和交易。
一組連續的異常區塊和交易:交易數少、手續費高
如上圖所示,高度為 6191896 的區塊中打包了 Fomo3D 遊戲中獎者最後購買 key 的交易,該區塊共包含 92 筆交易,交易數量正常。
而在該區塊後的連續 11 個區塊(6191898~6191908),每個區塊包含交易數量都驟降,最少的一個區塊(6191906)僅包含了 3 筆交易,十分異常。
細究之下發現(如下圖),高度為 6191906 的
該神秘合約(0x18e1)的創建者恰恰是中獎者(0xa169)!
通過向 F2POOL 負責人確認,安比實驗室獲悉,礦池挑選交易進入區塊的策略為手續費(TxFee)高的優先。
這也解釋了為何上述提及的連續 11 個區塊,都僅打包了很少量的交易,卻能獲得超出正常區塊的手續費。這些區塊分別由 SparkPool、Nanopool、Ethermine、BitClubPool、MiningPoolHub 等礦池打包,顯然挑選高手續費交易優先打包,是符合礦池利益的策略,是行業通行的方案。
“神秘合約”究竟“動了哪些手腳”?
安比(SECBIT)實驗室觀察到,這些異常區塊內發往神秘合約(攻擊合約)的異常交易,最終狀態均為失敗。
如上圖所示,交易最終狀態為失敗,並且 Etherscan 有 Bad instruction 錯誤提示,最終導致耗光 Gas Limit (4200000),約為正常區塊 Gas Limit 的一半,因此打包該交易的礦池也收到了高額手續費。
「Gas Limit說明」
以太坊區塊 Gas Limit 這一概念,代表單個區塊中最多允許的 Gas 總量上限,以此來決定單個區塊中具體打包多少筆交易。區塊 Gas Limit 由礦工間通過一定策略協商設定,目前區塊常見值約為 8000000。
以太坊上每筆交易也包含一個 Gas Limit 概念,由交易發起者自行設定,代表該筆交易可最多消耗的 Gas 上限,實際 Gas 消耗以交易具體執行消耗為準。一個區塊中所有交易花費的 Gas 不能超過區塊的 Gas Limit。
我們知道,以太坊智能合約還存在一個指令 assert(),用於斷言。當 assert 的結果不滿足條件時,則會耗光交易的 Gas。 Etherscan 針對這種情況的交易通常提示 Bad instruction,實際則為 EVM 執行過程中遇到了一個未定義的操作符 0xfe [4]。
獲獎者(黑客)就是利用這個特性,實現少量交易就能佔用整個區塊的 Gas Limit。
黑客更犀利的操作
進一步,安比(SECBIT)實驗室發現神秘合約會調用 Fomo3D 遊戲的 getCurrentRoundInfo() 接口,用於獲取當前輪次比賽信息,如剩餘時間、最後一位購買者的信息(最有可能獲獎者)等獎池詳盡信息(如下圖)。
“神秘合約”並未公開源碼,安比(SECBIT)實驗室結合逆向結果推測:獲獎者(黑客)通過神秘合約,在合約內調用該接口查詢遊戲信息,重點關注剩餘時間和最後一位購買者地址。當遊戲剩餘時間達到一個閾值,如果最後一個購買者是自己,則通過 assert() 讓整個交易失敗,並耗光所有 Gas;當剩餘時間很長或最後一個購買者不是自己時,則不做任何操作,僅消耗很少的 Gas。
獲獎者(黑客)就是利用這種方法,發起大量類似的可變神秘交易:在自己極有可能成為中獎者時,利用這些高額手續費的神秘交易,吸引礦池優先打包,佔滿後續區塊,從而使其他玩家購買 key 的交易無法被正常打包,最終加速遊戲結束,並極大地提高自己的中獎概率。
其他技巧和重要細節
幸運的 F2POOL 礦池
值得補充的一點的是,兩款遊戲(Fomo3D、Last Winner)中獎交易最終均由 F2POOL 礦池打包出塊,並且中獎者的上一筆參與遊戲的交易,也均由 F2POOL 打包。
安比(SECBIT)實驗室與 F2POOL 礦池負責人仔細討論過相關細節後,皆初步認為這是巧合。F2POOL 礦池幸運地見證了兩款熱門智能合約遊戲兩筆鉅額中獎交易的誕生。
智能合約遊戲前路何方
此前,才剛剛爆出Last Winner 及其他 Fomo3D 山寨遊戲中,黑客利用原版 Fomo3D 遊戲中的空投漏洞攫取大量獎勵,以及 Fomo3D Quick 版本存在的問題。安比實驗室表示,各類智能合約遊戲的未來十分堪憂。
作為 2018 年最火爆的智能合約遊戲,Fomo3D推出之始,不少人驚呼,這是真正公平的去中心化遊戲。不可否認的是,該遊戲在玩法和技術上做了很多創新,是智能合約遊戲歷史上重要的一步,Fomo3D 的開發團隊,有著過人的技術水平和強烈的去中心化情懷。
但回到現實,依舊有不少黑客發現並利用了Fomo3D及其他山寨遊戲的各類漏洞和缺陷,伺機攫取了大量利潤,也損害了普通玩家的大量利益。
技術的侷限性、人性的貪婪、信息的不對稱,都制約著一款真正安全、公平、透明的去中心化遊戲的誕生。在 Fomo3D 出現之後,各類山寨遊戲紛紛湧現,卻無一能在技術和創新上走得更遠,整個圈子氛圍都變得浮躁而嘈雜。
區塊鏈世界迫切希望看到下一款安全、公平、優秀、有趣的智能合約遊戲的誕生,而安全,似乎已然成為當務之急。