
編者按:本文來自安比(SECBIT)實驗室,作者:安比實驗室,經授權發布。
北京時間9 月24 日深夜11 點32 分,Fomo3D 第二輪最終大獎由地址0x18a0 獲得,獎金為3,264.668 Ether。安比(SECBIT)實驗室分析發現,此輪遊戲獲獎技巧與第一輪如出一轍,均為黑客“阻塞交易”攻擊。
與此前第一輪遊戲相比,這輪遊戲持續33 天,無論是從入場資金、持續時長,亦或是最終大獎獎金額來說,相比上輪均大幅縮水。
回首兩月之前,Fomo3D第一輪遊戲入場資金一度超過40,000 Ether,第一輪遊戲最終大獎獎金額超過10,000 Ether,遊戲參與者眾多,類似的資金盤遊戲也如雨後春筍般相繼冒出,一時間好不熱鬧。
然而,自9 月以來,隨著市場整體的大蕭條,類Fomo3D 遊戲也幾近沒落。以Fomo3D 和Last Winner 為代表的幾款較活躍的遊戲,熱度明顯下降。而大部分的同類合約由於無人開啟下輪遊戲,都處在擱置狀態。
因而到如今,Fomo 3D第二輪大獎已經開出,黑客獲獎幾無懸念,遊戲的熱度已不可同日而語。
安比(SECBIT)實驗室針對這一變化展開分析,分析結果表明,不久前連續揭露的遊戲空投機制漏洞[1]和“阻塞交易”攻擊事件[2],儘管在短時間內將該類遊戲的關注度推上了新的高度,但本質上也是導致遊戲沒落的主要原因。
繁華vs 涼涼?
曾經多火爆,如今就多冷清
圖片描述
圖片描述
圖一:Fomo3D 玩家參與度與入場資金狀況
圖片描述
圖片描述
圖二:Last Winner 玩家參與度與入場資金狀況
類似地,上圖展示了「Last Winner 玩家參與度與入場資金狀況」。 Last Winner 針對Fomo3D 遊戲做了部分修改,降低了遊戲時間上限,因此每輪結束得更快。第一輪高峰出現在8 月8 日,此後有多個局部波峰,代表著不同輪次的開啟,但顯然調用次數和入場資金一輪不如一輪。
圖片描述
圖片描述
圖片描述
圖片描述
圖四:Last Winner 合約Ether 餘額變化狀況
最終大獎
8 月17 日,安比(SECBIT)實驗室與Anchain.ai團隊聯合揭露了黑客團隊BAPT-LW20 利用空投機制漏洞,攫取大量獎金的攻擊事件。同一天,Last Winner 遊戲第一輪結束,最終大獎的獲得者也是BAPT-LW20 團隊。據統計,該黑客團隊從Last Winner 首輪遊戲中獲利累計達12,948 Ether。
在Last Winner 已完成的前9 輪遊戲中,黑客團夥持有的賬戶0x5167 共奪得4 次最終大獎。
反思
反思
反思
圖片描述
圖片描述
圖五:Fomo3D 遊戲合約被攻擊狀況
圖片描述
圖片描述
圖六:Last Winner 遊戲合約被攻擊狀況
上圖是「Last Winner 遊戲合約被攻擊狀況」,與Fomo3D 類似,黑客攻擊規模在遊戲熱度高時十分巨大。
“阻塞交易”攻擊
Fomo3D 遊戲巧妙地設計了一個環節,最後一個參與遊戲的人將獲得獎池中一半的Ether 做為獎勵。開發者想通過此設計保持大量的玩家陸續進場,任何人都有可能成為那個“幸運兒”。但是在黑客利用“阻塞交易”攻擊[5]來加快遊戲結束成為受益人後,這個吸引玩家的設計被打破了。因此後進場的普通玩家只能成為被割的韭菜,自然很難再吸引玩家參與。
“空投漏洞”攻擊
除了最後的大獎,遊戲中還設計了空投獎勵機制,玩家有一定的概率獲得空投獎勵,這也是吸引玩家參與的一個重要原因。但是由於空投機制存在隨機數漏洞,黑客可以通過一定的技巧持續高概率地拿走獎勵,而普通玩家幾乎不可能成功。這樣空投獎勵的公平性也同樣受到了挑戰。
對策與展望
dApp 還有很長的路要走
這樣一類紅極一時的爆款遊戲,必定會成為dApp 遊戲發展史上的一個重要里程碑。但是過快的蕭條速度也給我們帶來了很多的反思。對於類Fomo3D 遊戲,甚至是所有的dApp 遊戲,還有很長的路要走。要及時從黑客攻擊的案例中吸取教訓,並做好防禦措施。
“空投漏洞”攻擊是類Fomo3D 遊戲遭受攻擊次數最多的一個破綻。黑客可低成本持續地攫取獎池中的資金。
一方面,Fomo3D 遊戲的空投機制利用隨機數來控制中獎概率,但是由於隨機數的來源都是區塊或者交易中特定的一些公開參數,如交易發起者地址、區塊時間戳、區塊難度等,所有以太坊智能合約都可以很容易的預測隨機數[6]。因此在涉及到隨機數的場景下,安比(SECBIT)實驗室建議開發者應尤為慎重,或通過一定的手段來增加隨機源的預測難度。如開發者可通過使用多次提交再披露、或延遲若干個區塊開獎的方法來規避隨機數被預測的風險。
另一方面,為了防止合約自動化攻擊,Fomo3D 遊戲合約對調用者是普通賬戶還是合約賬戶做了檢測,但由於檢測方式存在漏洞,黑客可以利用一些技巧繞開檢測。因此項目方在對參與dApp 遊戲的玩家的身份做檢測的時候,也應採用更加可靠的方式。例如,通過判斷該筆交易最初的發起者(tx.origin)與當前合約的調用者(msg.sender)是否為同一地址。
前文提到的“阻塞交易”攻擊,也是類Fomo3D 遊戲面臨的另一重大挑戰。
黑客通過高額手續費吸引礦工優先打包,並利用合約自動判斷遊戲進行狀態,以之作為是否採取攻擊的依據。黑客最終能夠以較低成本堵塞區塊,每個區塊中僅打包很少的交易(降低他人交易被打包的可能性),使得遊戲快速結束,並提高自己獲得最終大獎的概率。
其實這一問題不止會威脅類Fomo3D 遊戲。所有類似機制,即需要玩家搶在某個時間範圍內完成某種競爭操作的智能合約,都會受此威脅。要杜絕這一問題,安比(SECBIT)實驗室建議遊戲開發者,從遊戲機制入手,切斷遊戲最終勝利(獲得某個巨額大獎)和倒計時結束(最後一個交易被打包)之間的必然聯繫,從而使黑客的攻擊獲利概率和攻擊意願都降到最低。
類Fomo3D 遊戲中黑客利用了以太坊共識協議的特點,找到遊戲機制的漏洞進而發起攻擊。這也提醒我們,dApp 應用中的機制設計是一項極其複雜的工程,除了技術本身,還涉及到平台外部環境,博弈論等方面問題,這也是容易被黑客攻擊的環節。因此,dApp 項目在機制設計過程中應尤為慎重。
參考文獻
參考文獻
參考文獻
[1] Pwning Fomo3D Revealed: Iterative, Pre-Calculated Contract Creation For Airdrop Prizes!,
https://peckshield.com/2018/07/24/fomo3d/
[2] 智能合約史上最大規模攻擊手法曝光,盤點黑客團夥作案細節
https://zhuanlan.zhihu.com/p/42318584
[3] Fomo3D 千萬大獎獲得者“特殊攻擊技巧”最全揭露
https://zhuanlan.zhihu.com/p/42742004
[4] Péter Szilágyi 提出的空投漏洞利用POC,
https://www.reddit.com/r/ethereum/comments/916xni/how_to_pwn_fomo3d_a_beginners_guide/, 2018/07/23
[5] 區塊律動:8萬筆交易「封死」以太坊網絡,只為搶奪Fomo3D大獎?
https://mp.weixin.qq.com/s/5nrgj8sIZ0SlXebG5sWVPw
[6] Predicting Random Numbers in Ethereum Smart Contracts
https://blog.positive.com/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620