Fomo3D 2000萬大獎獲得者「特殊獲獎技巧」揭露

Fomo3D 2000萬大獎獲得者“特殊獲獎技巧”揭露

全文共2419字 預計6分鐘閱讀完畢

哪有什麼簡單的“黑天鵝”,有的只是聰明還努力的黑客。

8月22日下午,Fomo3D 遊戲第一輪正式結束,最終大獎由地址 0xa169 獲得,獎金額高達價值2200萬元人民幣(10,469以太坊)的大獎。

不少人輕易得出結論:獲獎者平平無奇。

幾小時後,安比(SECBIT)實驗室首次宣佈斷定Fomo3D大獎獲得者採取了一些“特殊攻擊技巧”,使得遊戲臨近結束時,礦工打包入區塊內的交易數量驟減(涉及連續多個區塊),從而起到加速遊戲結束和提高勝率的作用。

此前,安比實驗室也曾在 Last Winner 上輪遊戲結束時捕獲到多個十分類似的異常區塊和交易。

一組連續的異常區塊和交易

交易數少、手續費高

Fomo3D 2000萬大獎獲得者“特殊獲獎技巧”揭露

如上圖所示,高度為 6191896 的區塊中打包了 Fomo3D 遊戲中獎者最後購買 key 的交易,該區塊共包含 92 筆交易,交易數量正常。

而在該區塊後的連續 11 個區塊(6191898~6191908),每個區塊包含交易數量都驟降,最少的一個區塊(6191906)僅包含了 3 筆交易,十分異常。

細究之下發現(如下圖),高度為 6191906 的“特殊”區塊僅包含 3 筆交易,且交易均發往同一合約(調用了同一個神秘合約0x18e1),而這3筆交易手續費之和超過 4 個以太幣。

Fomo3D 2000萬大獎獲得者“特殊獲獎技巧”揭露

該神秘合約(0x18e1)的創建者恰恰是中獎者(0xa169)!

通過向 F2POOL 負責人確認,安比實驗室獲悉,礦池挑選交易進入區塊的策略為手續費(TxFee)高的優先。

這也解釋了為何上述提及的連續 11 個區塊,都僅打包了很少量的交易,卻能獲得超出正常區塊的手續費。

這些區塊分別由 SparkPool、Nanopool、Ethermine、BitClubPool、MiningPoolHub 等礦池打包,顯然挑選高手續費交易優先打包,是符合礦池利益的策略,是行業通行的方案。

“神秘合約”究竟“動了哪些手腳”?

這些異常區塊內發往神秘合約(攻擊合約)的異常交易,最終狀態均為“失敗”。

如下圖所示,交易最終狀態為失敗,並且 Etherscan 有 Bad instruction 錯誤提示,最終導致耗光 Gas Limit (4200000),約為正常區塊 Gas Limit 的一半,因此打包該交易的礦池也收到了高額手續費。

Fomo3D 2000萬大獎獲得者“特殊獲獎技巧”揭露

「Gas Limit說明」

以太坊區塊 Gas Limit 這一概念,代表單個區塊中最多允許的 Gas 總量上限,以此來決定單個區塊中具體打包多少筆交易。區塊 Gas Limit 由礦工間通過一定策略協商設定,目前區塊常見值約為 8000000。

以太坊上每筆交易也包含一個 Gas Limit 概念,由交易發起者自行設定,代表該筆交易可最多消耗的 Gas 上限,實際 Gas 消耗以交易具體執行消耗為準。一個區塊中所有交易花費的 Gas 不能超過區塊的 Gas Limit。

由於以太坊智能合約還存在一個指令 assert(),用於斷言。當 assert 的結果不滿足條件時,則會耗光交易的 Gas。 Etherscan 針對這種情況的交易通常提示 Bad instruction(交易錯誤),實際則為 EVM 執行過程中遇到了一個未定義的操作符 0xfe。

獲獎者(黑客)就是利用這一特性,實現少量交易就能佔用整個區塊的 Gas Limit。

黑客更犀利的操作

此外,安比實驗室發現,神秘合約會調用 Fomo3D 遊戲的 getCurrentRoundInfo() 接口,用於獲取當前輪次比賽信息,如剩餘時間、最後一位購買者的信息(最有可能獲獎者)等獎池詳盡信息(如下圖)。

Fomo3D 2000萬大獎獲得者“特殊獲獎技巧”揭露

“神秘合約”並未公開源碼,安比(SECBIT)實驗室結合逆向結果推測:獲獎者(黑客)通過神秘合約,在合約內調用該接口查詢遊戲信息,重點關注剩餘時間和最後一位購買者地址。

當遊戲剩餘時間達到一個閾值,如果最後一個購買者是自己,則通過 assert() 讓整個交易失敗,並耗光所有 Gas;當剩餘時間很長或最後一個購買者不是自己時,則不做任何操作,僅消耗很少的 Gas。

獲獎者(黑客)利用上述作案方法,發起大量類似的可變神秘交易:在自己極可能成為中獎者時,利用這些高額手續費的神秘交易,吸引礦池優先打包,佔滿後續區塊,從而使其他玩家購買 key 的交易無法被正常打包,最終加速遊戲結束,並極大地提高自己的中獎概率。

其他技巧和重要細節

1.獲獎者(黑客)創建過多個類似神秘合約(攻擊合約),且前後曾使用很多不同地址向神秘合約發起交易,以此分散大眾注意力,降低其“特殊技巧”被發現的可能性。

而每個攻擊合約皆有大量交易記錄。上文提到的最終導致黑客獲獎的攻擊合約(0x18e1)有多達 5,000 多筆交易,可見黑客暗地裡做過不少嘗試。

2.獲獎者(黑客)控制的地址批量調用神秘合約(攻擊合約)時,會給交易設置各種 Gas Limit,從 170,000 到 4,800,000 不等,這同樣是技巧之一。

3.Fomo3D 獲獎者(黑客)0xa169 最後一次購買 key 後(區塊 6191896),連續10餘個區塊,都無任何與購買 Fomo3D 遊戲 key 相關的交易,這才最終導致遊戲倒計時結束,獲得最終大獎。

4.遊戲結束前,大眾一直假想黑客可能會與大礦池聯合作弊,拒絕打包競爭者交易來獲得大獎,或者設想黑客可能發出大量垃圾交易使以太坊網絡擁堵而無法打包競爭者交易,從而獲利。

5.該輪遊戲獲獎者(黑客),並未聯合多家礦池作惡,反而巧妙利用了所有礦池優先挑選交易打包策略的共性。

6.獲獎者(黑客)部署的神秘合約(攻擊合約),簡直是智能合約作為攻擊武器的典範示例,精確制導,有的放矢。比起盲目使用自動腳本在臨近遊戲結束時調高 Gas Price 發起參與遊戲交易,黑客的攻擊手法顯然高明許多 。廣播至各礦池的攻擊交易,如導彈一般部署在內存池中,根據遊戲狀況,伺機而動。

7.獲獎者(黑客)創建的神秘合約,也正頻繁與其他一些 Fomo3D 山寨遊戲(如 Super Card)發生交易,企圖使用同樣的手法獲得鉅額大獎。

哪有什麼簡單的“黑天鵝”,有的只是聰明且努力的黑客。「冪律分佈」和「遊戲繆誤」不妨仔細瞭解一下 。

F2POOL 礦池的小幸運

打包見證2筆鉅額中獎交易

值得補充的一點的是,兩款遊戲(Fomo3D和Last Winner)中獎交易最終都是由 F2POOL 礦池打包出塊,並且中獎者的上一筆參與遊戲的交易,也均由 F2POOL 打包。據小蔥瞭解,F2POOL是以太坊算力排名第三的礦池,前兩名分別是Ethermine和SparkPool。

針對Fomo3D和Last Winner中獎者的幾個交易都打包在F2POOL礦池這一現象,安比(SECBIT)實驗室與 F2POOL 礦池負責人就相關細節進行了詳細討論,雙方得出的基本結論是巧合使然,F2POOL礦池只是湊巧幸運地見證了兩款熱門智能合約遊戲兩筆鉅額中獎交易的誕生。

智能合約遊戲前路何方

此前,“Last Winner遊戲“過不去”的黑客:智能合約史上最大規模攻擊事件回顧”一文,曝光Last Winner 及其他類Fomo3D 遊戲中,黑客利用原版 Fomo3D 遊戲中的空投漏洞攫取大量獎勵,此外還包括之前報道的Fomo3D Quick 版本存在著種種問題。

一系列的安全漏洞事件不斷在區塊鏈遊戲行業上演,智能合約遊戲的未來十分堪憂。

作為 2018 年最火爆的智能合約遊戲,Fomo3D推出之始,不少人驚呼,這是真正公平的去中心化遊戲。

不可否認的是,該遊戲在玩法和技術上做了很多創新,是智能合約遊戲歷史上重要的一步,Fomo3D 的開發團隊,有著過人的技術水平和較強的去中心化情懷。

但回到其發展現狀,依舊有不少黑客發現並利用了Fomo3D及其他山寨遊戲的各類漏洞和缺陷,伺機攫取了大量利潤,也損害了普通玩家的大量利益。

技術的侷限性、人性的貪婪、信息的不對稱,都制約著一款真正安全、公平、透明的去中心化遊戲的誕生。

在 Fomo3D 出現之後,各類山寨遊戲紛紛湧現,卻無一能在技術和創新上走得更遠,整個圈子氛圍都變得浮躁而嘈雜。

區塊鏈世界迫切希望看到下一款安全、公平、優秀、有趣的智能合約遊戲的誕生,而安全,似乎已然成為當務之急。


分享到:


相關文章: