圖片來源:視覺中國 Fomo3D過去的一周內賺足了噱頭,一場光明正大的“龐氏”游戲瘋狂吸金,在鏈得得此前的報道中提到“Fomo3D的開發者,是對生態有深刻理解的現實主義者。Fomo3D鼓勵黑客去黑掉智能合約,來證明以太坊有多脆弱。”Fomo3D核心成員Justo直指v神:“我已經發現了可以毀滅以太坊虛擬機(EVM)的‘核武器漏洞’。”詳情請見《【鏈得得獨家】龐氏游戲”Fomo3D的真實意圖:黑掉脆弱以太坊》。 開發者雖然狂妄,但是卻被看作是足夠聰明的人。不過,以太坊基金會的核心成員peter szilagyi在twitter上表示,Fomo3D的空投機制要被智能合約自身存在的漏洞戲弄了。 來源:peter szilagyi的twitter
但是由于智能合約本身的漏洞,羊毛黨可以準確捕捉到這個“隨機數”,從而在投入很小的前提下獲得將近100%的空投。PeckShield研發總監吳家志告訴鏈得得作者,這是一個成功薅羊毛的案例。世界上是做不到完全隨機的,通常是利用時間當作種子計算出一個相對隨機數,但是在區塊鏈中可以預測到這個“相對隨機數”。 吳家志說:“每一個智能合約的運作必然發生在某一個塊中,塊的時間可以運算出,加上FoMo3D計算種子里使用的錢包地址,可以被偽造成可預測的合約地址,所以可以把小概率事件變得很大。” Fomo3D在合約的最初設定中把“投注者的錢包地址”放到監測名單,他們知道地址可以生成很多,但是攻擊者不可能用不同的地址去測試、押注空投的獎池,這是一個成本非常大的事情。而這個事件中最核心就是Fomo3D在判斷錢包地址中存在的差錯,這也是Peter關注到的地方。 Peter作為跟隨V神多年的以太坊核心成員,他十分了解以太坊的技術架構。攻擊者可以通過把錢包地址當作隨機計算的部分來避開Fomo3D的判斷。吳家志告訴鏈得得作者,設計Fomo3D的人沒有想到,在其合約的airdrop函數中,產生隨機數的種子是通過當前塊信息(例如,第1416行的timestamp、第1417行的difficulty等)和msg.sender一起計算出來的(隨機變得不隨機),攻擊者可以在攻擊airdrop函數之前在合約中預先計算出結果(必然會開獎)。 如果能夠得到一個針對當前airDropTracker_的可用種子,攻擊者總是可以使airdrop函數返回true(第1424行),從而在正確時間點實施“薅羊毛”行動。(合約地址可以不停嘗試新的合約地址,試到可以時便可進行精準投注,這樣就會確保一定能得到空投,其隨機性就遭到抑制,所以就會變得很像挖礦)。如下圖: Fomo 3D的airdrop函數 PeckShield研究人員觀察到,攻擊者通過利用Fomo3D的空投機制在兩天時間內薅了近60個ETH。這種獲利能力,可以比擬1000臺以上GPU顯卡礦機的挖礦能力。最關鍵的是這個行為沒法制止,如果有好的編程能力,這是一個比挖礦還容易的“賺錢”方式。 事實上,在Fomo3D推出之后,市面上頓時出現大量的以FOMO Short、FOMO Lightning和RatScam等為代表復制版Fomo3D。他們也僅是對Fomo3D的合約進行了復制,所以都會存在這樣的問題。 攻擊者發起的事務 但這種漏洞既然存在,為什么無法停下來?PeckShield吳家志告訴鏈得得作者,基于智能合約的游戲一旦運轉起來就無法更改,除非有一天沒人繼續玩了,游戲會按照合約設定停下來。不過,Fomo3D游戲現在炙手火熱,很多玩家投注不少在其中,且獎勵池金額不斷刷新,在巨額獎勵誘惑下,每個人都在爭搶做最后一名投注者,所以暫時還看不到停下來的可能。 【本文原發布于鏈得得,授權鈦媒體App發布,作者:成裘】 |