作者:安比實驗室&AnChain.ai
安比實驗室創始人郭宇:2009年,中本聰創造了一個虛擬的去中心化新世界。這仿佛是一片流著奶和蜜糖的應許之地,人們歡呼雀躍,蜂擁而至。但與所有的生態系統一樣,新世界有生命,就有捕食者。有交易者,就有黑客。區塊鏈上的應用在進化,攻擊者也同樣,我們給大家展示的是區塊鏈世界不為人知的另一面,暗流涌動。意料之外,也在意料之中。
LastWinner游戲大火,導致以太坊異常擁堵,Gas費用暴漲。大量以太幣資金入場。
北京時間2018年8月10日凌晨1:38,加州時間9日上午10:38,安比實驗室收到合作伙伴美國硅谷AnChain.ai公司消息,基于AI的態勢感知系統發出預警信息,發現部分游戲合約出現大量交易并且存在異常的資金流動情況。安比實驗室的小伙伴趕緊根據最新線索,對相關合約和交易進行觀察、跟蹤、分析。
悄然上線:莫名火爆的LastWinner
LastWinner是一款基于以太坊智能合約的DApp游戲,于8月6日上線,這款游戲一經推出,就「異常」火爆。
這款游戲合約地址為0xDd9fd6b6F8f7ea932997992bbE67EabB3e316f3C。據Etherscan顯示,短短六天時間內,該游戲合約就已產生27萬余筆交易。甚至前段時間以太坊網絡大擁堵也與LastWinner游戲密切相關。8月8日和9日,在LastWinner和Fomo3D超大規模交易量的共同作用下,以太坊未確認交易數量創年內新高,平均Gas費用一度飆升至正常10倍以上。
該游戲第一輪獎池金額為1.6萬多個以太幣,而玩家總投資額更超過10萬以太幣,資金量巨大。目前游戲第一輪已結束,第二輪獎金池已迅速累積至7000多以太幣。
瘋狂的現象級游戲背后暗流涌動。
疑團重重:前期大量參與者的資金來歷不明
據知名媒體「區塊律動」報道,LastWinner由名為「蟻群傳播」的資金盤傳銷組織推廣運營,有著數量眾多的會員和極強的推廣拉下線能力。而據另一款火爆游戲Fomo3D開發團隊稱,LastWinner是仿Fomo3D游戲,其背后運營團隊準備了20萬ETH來進行自動刷量交易。因此,LastWinner游戲火爆的背后,可能是一場精心布局的傳銷游戲,初期利用機器人發起批量交易,偽造活躍假象,吸引新韭菜入場。
LastWinner游戲合約存在大量非正常交易,并且伴隨著大量合約的創建與自毀,與正常人類調用行為特征偏離很大,這引起了我們的高度警惕。
瘋狂推廣:只面向國人,合約源碼卻未公開
在各大論壇、媒體、以及微信群中,都可以見到LastWinner游戲的推廣文章,而這些文章有著類似的描述,并且都附上推廣邀請碼。但LastWinner英文相關資料非常少。
顯然,這是一款針對中國人的游戲,有著誘人的推廣獎勵,因此在網絡上廣為傳播。并且,這款游戲有適配安卓和iPhone手機的App,簡化了使用操作,降低了參與門檻。
但是,十分可疑的是,作為一款基于智能合約的區塊鏈游戲,LastWinner居然沒有公開合約源代碼!這是一個非常危險的信號。為何這樣一個游戲能這么火爆,吸引這么多人參加?
我們直覺上感到這款游戲到處透露著詭異的氣息。
安全性存疑:實則是Fomo3D山寨版
LastWinner官方宣傳語寫道:
LastWinner是首款完全去中心化的類Fomo3D游戲DApp,完全基于以太坊智能合約原生開發。只要下載安裝App就可參與游戲。
類Fomo3D游戲,且未公開源代碼,這不得不讓人產生懷疑。要知道,短短時間內原創開發一個好玩又安全的DApp游戲難度非常大。
安比實驗室迅速使用內部工具逆向分析了LastWinner的合約代碼。果不其然,這款游戲合約代碼函數名稱與Fomo3D高度相似,疑似直接拷貝了Fomo3D的源碼,但卻又新增了10余個可疑未知函數。
Ripple前開發者關系總監:目前正在開發XRP Ledger的智能合約:金色財經報道,Ripple的前開發者關系總監Matt Hamilton透露了一些關于XRP Ledger即將創新的細節。Hamilton特別表示,XRP Ledger很快將被采用,目前正在開發智能合約。[2022/12/22 22:01:49]
盡管Fomo3D在Etherscan公開了源代碼,但這并不代表它開源給任何人隨意使用。
安比實驗室之前報道過:在Fomo3D爆紅之后,各類山寨版Fomo3D層出不窮。之前這些山寨版游戲往往復制Fomo3D官網和合約源碼,并可疑地在一些地方進行修改。而LastWinner在此基礎上更進一步,推出移動客戶端,并瘋狂推廣,卻不公開智能合約源代碼。
智能合約游戲或DApp的亮點之一就是公開透明。LastWinner游戲則完全違背了這一點,動機十分可疑,參與該類游戲的風險極高!
當時嚴峻的形勢是:一方面有多個地址疑似瘋狂發起攻擊交易,另一方面項目方游戲合約未公開源碼,高度可疑卻吸引了巨量資金。我們感覺到態勢十分緊急,于是迅速開展分工合作。AnChain.ai中美團隊日夜交替分析和監控異常交易,收集證據,定位攻擊來源與攻擊規模。
安比實驗室的小伙伴們則兵分兩路,分別開展對不透明游戲合約和黑客攻擊手法的逆向分析。
前情回顧:類Fomo3D游戲空投機制存漏洞
Fomo3D游戲參與形式是用以太幣購買游戲道具,除了最后一個購買的人可以獲得巨額大獎外,平時參與者還有機會獲得「空投」獎勵。
這里有主獎池和副獎池的概念,最終的巨額大獎和空投獎勵分別從從主獎池和副獎池中獲取。
所有進入游戲的以太幣,有1%數量會進到副獎池。每一次購買道具都會有概率獲得空投。空投的概率從0%開始,每增加一筆不小于0.1ETH銷售訂單,空投概率會增加0.1%。同時空投獎金額與購買金額也掛鉤,如果購買0.1~1ETH,就有概率贏得25%副獎池獎金,購買更多則比例越大。
一進入游戲界面,就會看到鮮明提示,通知當前中獎概率和獎池金額。這一設計,原本是想增加游戲趣味性,并起到吸引資金入場、延長游戲時間的作用。但實際情況卻并非如此。
通過觀察LastWinner游戲合約以及部分地址的異常交易行為,我們心中有了初步答案。
讓我們把時間退回到20多天前,早在7月24日,安比實驗室和派盾科技分別同時預警:Fomo3D游戲的智能合約存在隨機數漏洞可被利用,Fomo3D及所有抄襲源碼的山寨合約均存在該安全漏洞。原本設計上隨機性較大的空投游戲可通過特殊手段操縱,大大提高中獎概率。
經安比實驗室字節碼智能掃描工具逆向分析,LastWinner游戲空投獎勵代碼與Fomo3D基本一致,相似度達91%,可能存在同樣漏洞。隨著游戲火爆進行,機敏的黑客肯定也聞風而動。
不能說的秘密:黑客制造秘密武器攫取高額收益
在區塊鏈態勢感知系統所展現出來的數據面前,我們不由地倒吸一口涼氣。
圖中的這些可疑地址,如同病一般緊緊纏繞在LastWinner合約四周,肆意吞噬著LastWinner內的資金。
我們觀察到,圖中緊靠LastWinner的這些地址,有著類似的行為模式。
如:
1、不停地往某合約地址上發起交易,同時附帶0.1個以太幣2、不少交易狀態為失敗3、成功的交易又會涉及大量“內部交易”4、「內部交易」調用邏輯十分復雜,并伴隨大量合約的創建和自毀
安比實驗室迅速得出初步結論:這些不明合約就是黑客用來攻擊LastWinner的秘密武器,黑客正是通過這些合約,持續吸走LastWinner游戲內的以太幣。
案發現場:大量類似交易,超高回報率
上面態勢感知圖中,占地面積最大的嫌疑地址引起了我們的注意:0xae58,于是從這個地址展開了追蹤。
8月9號當天,0xae58地址內以太幣余額就以超過300個,而當時他正在大量往地址0x5483上發起交易,每筆交易轉賬金額都是0.1Ether。顯然,黑客正通過0x5483智能合約向LW發起攻擊。
BSN與邊界智能合作集成IRITA框架以支持互操作性及跨鏈:由于國家信息中心牽頭,聯合中國移動、中國銀聯等單位發起的區塊鏈服務網絡(Block-chain-based Service Network,BSN)的首席架構師、紅棗科技CTO 馬曉軍在接受采訪時表示,BSN在異構區塊鏈間的跨鏈機制的實現方面,將與邊界智能合作研究將其IRITA框架集成到BSN,以支撐開發者的應用鏈之間的跨鏈訪問與互操作。據此前報道,IRITA是邊界智能上線并開源自研的聯盟鏈產品,全稱為「跨域行業互信聯盟產品」(Inter-Realm Industry Trust Alliance),是Cosmos生態中首個企業級聯盟鏈產品,基于現代區塊鏈技術框架Tendermint和IRIS SDK[2020/6/8]
讓我們觀察下面這條狀態顯示為成功的交易。表面上看是0xae58向攻擊合約0x5483轉了0.1Ether,實際卻涉及了一大堆地址間的相互轉賬,最終隨著0x7c77合約自毀,0.189個Ether轉移回0xae58的賬戶中。
這十分神奇,攻擊者投入0.1個以太幣,最終收獲0.189個,瞬間回報率高達89%,簡直暴利。
我們很快發現,除了0xae58地址外,還有四個地址也持續不斷地向0x5483合約發起類似交易,持續獲得高額回報。
而失敗的交易,僅消耗27712燃料,成本損耗十分低。
研究目標立刻鎖定為攻擊合約0x5483。由于無法獲得源碼,安比實驗室立刻使用內部工具展開逆向分析。
暴利:數據面前我們再次震驚
8月13日,當我們沉浸在研究黑客的攻擊合約各種細節優化和精巧設計之時,黑客攻擊數據全景分析新鮮出爐。
其中,攻擊獲利最大的是以0x820d地址為首的團隊。他們累計獲利超過5000個以太幣。AnChain.ai團隊和安比實驗室將該黑客團伙精確定位,并將其命名為BAPT-LW20(BlockchainAPT–LastWinner)。
BAPT-LW20團隊在短短6天時間內,共發送將近5萬筆交易,從中攫取5194個Ether,獲利價值將近1200萬人民幣。
由下圖每小時發起的攻擊交易數量趨勢圖,我們可以看出攻擊的高峰期發生在8月8日~10日,每小時平均攫取將近100以太幣,將近22萬人民幣。這正好也是LW游戲最火爆的時間段。隨著游戲進入后期,入場資金急劇下降,收益降低,黑客也不得不也降低了攻擊頻率。
再看看黑客每小時攫取以太幣數量趨勢圖。慘淡的漫漫熊市里,黑客卻在狂賺以太幣。
下圖是「LastWinner中黑客的交易量占比和攫取ETH占比」,可見黑客發送的交易量只占總交易量的9.877%,但是去攫取了LastWinner獎金池中49%的獎金。黑客的嫻熟攻擊技能,為他們帶來了普通玩家難以企及的好運,而普通玩家在這場游戲里面幾乎很難獲得空投獎勵。
火線追兇:BAPT-LW20團隊攻擊LW始末
安比實驗室嘗試追蹤復原BAPT-LW20團隊攻擊時間線。
下圖是BAPT-LW20團隊某賬戶余額變動情況。
0x820d是BAPT-LW20團隊所有攻擊合約的部署者,也是攻擊的實施者之一,可認為是BAPT-LW20團隊的隊長。0x820d地址最早活躍于7月20日,賬戶中的初始以太幣均由0x73B6地址轉入。而0x73B6也是同一天開始活躍的新地址,它的初始以太幣來自總部位于美國舊金山的Kraken交易所。
0x820d在收到來自0x73B6的10個以太幣后,隨即部署了它的第一個合約。可能有些地方不太理想,他并沒有繼續使用該合約。三分鐘后,0x820d部署下了第二個合約,攻擊對象是Fomo3D。在一組準備工作設置、若干次失敗的調用以及兩次雖然成功但卻沒有收益的嘗試過后,0x820d應該是發現了攻擊合約里的bug和優化空間。
在接下來的14個小時內,他依次部署了8個合約進行攻擊測試,無奈都不成功。終于在第9個合約0xBad7中首次完成攻擊,以0.1ETH的投入換回了0.125ETH。
動態 | bZx遭受二次攻擊,需要對DeFi智能合約進行徹底審計:昨日去中心化金融(DeFi)貸款協議bZx再次被攻擊后,該平臺被關閉并離線,開發人員試圖修復合同,保證惡意行為體無法執行另一次攻擊。第一次攻擊讓加密社區措手不及,因為flashloans是DeFi平臺提供的新產品。第二次攻擊表明,需要對DeFi智能合約進行非常徹底的審計。bZx在兩次攻擊中都凍結了平臺,這一事實表明,即使將其作為DeFi進行銷售,但最終它是一個集中化平臺,開發者可以使用“管理密鑰”來關閉平臺上的交易。(Bitcoinis)[2020/2/19]
0xBad7是0x820d團隊首個可以正常工作的攻擊合約,他們在7月21日至7月23日三天時間內總計調用該合約11551次,小有斬獲。
7月23日,0x820d又部署了新的合約,將攻擊對象轉移為另一款Fomo3D山寨游戲老鼠會RatScam(0x5167350d082c9ec48ed6fd4c694dea7361269705),0x820d團隊在一天時間內使用了2299次攻擊合約。
一天后,0x820d又找到了新目標,一個名為FoMoGame的山寨游戲,部署新合約進行攻擊。這款游戲知名度不高,入場資金并不多,黑客調用了126次之后就放棄。
接下來的三天內,0x820d前后部署了10個新合約進行優化與攻擊測試。
終于,在7月26日上線了他們的新版攻擊合約。該合約總共發生過23835筆交易,最近一次活躍時間在8月10號。這款攻擊合約,可由攻擊者自定義受害游戲合約地址。因此0x820d在接下來的幾天內,持續混合攻擊Fomo3D原版、RatScam、FoMoGame等游戲,并持續觀察其他山寨游戲的動態,等待時機。同時,繼續部署若干個新合約進行調優測試。
終于,8月6日LastWinner游戲上線,24小時后0x820d團隊就使用準備好的0x5483合約,針對LastWinner發起第一次攻擊,并在接下來的4天內集中力量,瘋狂利用空投漏洞展開攻勢。
8月10日,0x820d調用0x5483攻擊合約withdraw接口,提走了里面的余額,攻擊疑似暫停。
原來,他們早已經部署了新版合約攻擊合約0x9C10,又發起了超過30000筆交易,至今仍在活躍攻擊。
不僅僅是空投:BAPT-LW20黑客團隊拿走LW最終大獎
北京時間8月17日上午,LastWinner游戲第一輪最終結束,最終大獎由0x5167地址獲得,獎金額總計7,754以太幣。
而這個地址正是BAPT-LW20黑客團隊的五個地址之一。
如下圖,14小時前,黑客還在利用攻擊合約獲取空投獎勵。隨后,他改變了方案,直接用自身地址購買道具參與游戲,不斷嘗試奪取最終大獎。在此之后,又繼續調用合約攻擊LW游戲。
安比實驗室猜測黑客潛伏很久,早已做好充分的準備,長時間利用腳本監控LW游戲狀態,最終才能在眾人放松警惕之時獲得大獎。
BAPT-LW20黑客團隊利用空投漏洞獲利超5,194Ether,同時又奪取最終大獎7,754Ether,累計獲利12,948Ether。
同行相殺:Zethr團隊兩天時間就成功利用漏洞
這場超大規模的類Fomo3D智能合約游戲被攻擊事件,攻擊者使用的秘密武器也正是智能合約。
據安比實驗室調查分析,0x20C9地址最先成功利用原版Fomo3D空投漏洞并獲取獎勵。我們將他定位,并將其命名為BAPT-LW10。
0x20C9于7月8日10點07分創建了攻擊合約0xe7ce,在接下來的十分鐘內,前后調用了三次,最終在第四次時成功獲得獎勵,投入0.1以太幣,收回0.19個,回報率高達90%。
此后,0x20C9繼續部署多個攻擊合約,進行調試優化。最終,在7月23日部署了最終版本0x39ac攻擊合約,接下來的時間前后調用過90余次,而攻擊對象涉及Fomo3D原版、LastWinner以及其他山寨版Fomo3D。
動態 | 西班牙銀行將測試智能合約的可編程支付:薩巴德爾銀行、桑坦德銀行、Bankia銀行、BBVA銀行和Caixabank已經啟動概念驗證測試,以部署銀行間智能支付平臺,使區塊鏈網絡能夠執行支付。該倡議由管理西班牙支付系統(SNCE)的Iberpay公司協調,旨在促進從區塊鏈網絡中部署的智能合約啟動即時信貸轉移。Iberpay表示,利用該技術開發的任何一種商業案例都可以執行和編程自動支付——從簽訂合同到交付貨物。該測試包括一個基于部署在區塊鏈網絡中的虛擬業務案例的試點項目,該項目已經實施,每個參與者管理六個分布式節點。(Finextra)[2019/12/20]
據我們觀察,0x20C9是最早研究并成功利用空投漏洞的黑客。研究過程中,安比實驗室發現0x20C9與另一款游戲Zethr密切關聯。
最終我們在Zethr游戲合約代碼中發現了他的身影。他是熱門游戲Zethr的八位核心開發者之一,代號為Etherguy。
顯然,作為DApp游戲開發同行,Etherguy以及他所在的Zethr團隊很早就研究了Fomo3D項目代碼。Fomo3D合約7月6日部署上主網,Etherguy兩天后就發現并成功利用了漏洞。從調用規模來看,Etherguy(BAPT-LW10)應該主要還是出于研究目的,并沒有太多獲利。
讓其他黑客獲利最多的正是LastWinner游戲。
游戲細節:LastWinner為何讓黑客如此瘋狂
從最初Fomo3D上線后不久,空投漏洞就已被人發現并成功利用。隨著游戲的廣泛傳播,以及該漏洞被逐漸披露,空投漏洞的攻擊手段也在這一過程中不斷升級進化,最終部分黑客團隊完成了精巧的攻擊方案,可低成本、高效率獲得獎勵,并可大規模工程化地攻擊任意任何同類游戲合約,瘋狂收割以太幣。
據安比實驗室分析,除LW游戲以外,不少黑客團隊都曾嘗試攻擊其他類Fomo3D游戲合約。但獲利都遠小于BAPT-LW20團隊在LW游戲中所得。
我們試圖從LW游戲本身尋找答案。
LW游戲是Fomo3D山寨版,本身沒有太多創新,但入場資金完全集中在游戲開始后的第2天至第5天內。巨量入場資金,會讓游戲空投獎池迅速累積,因此這段時間也是黑客攻擊的黃金時機。
更要命的是,LastWinner團隊修改了空投游戲參數,使進入副獎池的以太幣比例由1%調整到10%,相當于空投獎勵金高了10倍!
一方面,游戲運營團隊可能是利用高額空投獎勵吸引用戶瘋狂加入;另一方面,他們可能并不知道空投漏洞的嚴重性,而提高獎勵比例則會讓該問題進一步放大。
LastWinner游戲簡直成為了黑客的提款機!
特別地,前面提到LastWinner游戲第一輪入場資金已達10萬以太幣,這也就是說,單單這一款游戲就有超過1萬個以太幣都持續暴露在被攻擊的風險下,成為黑客的囊中之物。要知道,這款游戲第一輪最終獎池也才1.6萬余以太幣。本來空投獎勵都是很小的金額,但黑客持續利用空投漏洞,積少成多,終成LastWinner最大贏家。
我們追蹤到有多個團隊對Fomo3D及山寨合約開展大規模自動化攻擊,企圖攫取利益。
而BAPT-LW20團隊在游戲開始后24小時左右就加入了戰局,并迅速擴大作戰規模,最終占得先機,獲取巨額收益。
安比實驗室追蹤到還有其他黑客團隊向LastWinner合約開展攻擊。部分黑客8月11號以后才入局,雖規模也很大,但終究因為錯過黃金時機而獲利較少。
攻擊合約:設計復雜又精巧
攻擊合約0x5483,創建于7月26日,創建者為0x820D,同時也是持續調用攻擊合約的五個地址之一。
起初,攻擊合約的創建時間讓我們感到疑惑,前面提到LW游戲合約于8月6日才部署上主網。難道0x820D可以未卜先知,或者他與項目方有什么不可告人的秘密?
帶著這個疑問,我們嘗試從合約0x5483的代碼中尋找答案。
經過逆向發現,該合約有七個公開函數,其中一個疑似函數名是withdraw(uint256),用于將攻擊合約中積累的以太幣轉走。
富士通推出新技術檢測以太坊智能合約錯誤:CoinDesk發文稱,日本IT巨頭富士通公司透露了一項新技術,該技術有助于解決源呼叫真實性的問題,并且能夠確定此類錯誤代碼的位置。[2018/3/7]
安比實驗室在字節碼中發現了上面提到的五個地址。原來這兩個函數都會跳轉到同一個內部函數,檢查交易發起人是否是這五人地址之一。如果是,則可繼續執行,如果不是,則提前讓交易失敗。
這也解釋了為什么偏偏是這五個地址一直在調用攻擊合約。因為他們是一個團隊,合約特地為他們而設計,而其他人根本無法正常調用。
初步猜測,攻擊合約這么設計是為了分散權限和資金,降低出問題或被發現的風險。
上圖正是一筆攻擊交易的傳入參數。第一部分是調用函數哈希ID,后面跟著三個參數。注意看第一個參數,攻擊者傳入的明顯是一個地址。顯然,這個地址正是LW游戲合約地址。
原來如此,攻擊目標對象可以作為參數傳入。「黑客真機智!」,我們不由地感慨。之前的一個困惑被解開,早在LW游戲上線前就已部署好的攻擊合約0x5483,其實是一個通用型武器。
繼續研究,接下來合約的復雜程度出乎我們意料。我們沿著生成的控制流程圖追蹤合約函數調用過程,程序指令以及分支情況非常之多,讓人難以完全跟上。
安比實驗室使用動態追蹤調試技術,結合逆向分析結果與攻擊交易內部記錄,搞清楚了黑客所使用的手法。
其他攻擊交易也都是類似的過程,黑客調用攻擊合約,攻擊合約再調用提前創建好的合約,進而創建新的合約,以新合約的身份參與LW游戲,買游戲道具,然后幾乎必定獲得空投獎勵。
這一過程中不斷新建的合約,就是態勢感知系統中預警的大量異常合約創建與自毀。
追蹤攻擊合約調用歷史,發現攻擊者在部署完攻擊合約后,就立即多次調用特定函數,每次新建10個新合約。而函數總共恰好調用了100次,因此新建了1000個新合約。
在攻擊交易中,攻擊合約最先調用的就是這預先創建好的1000個合約之一,似乎是特地從中挑選出來一個地址。
智能合約:一切皆可預測
攻擊函數控制流程圖中一個相隔很遠的循環引起了我們的注意。
我們恍然大悟。攻擊函數所做的就是不斷循環地在1000個合約中,挑選合適的地址來完成下一步新建合約操作。所謂合適的地址,就是指能確保每次參與游戲都能獲得空投獎勵。
前面提到,以太坊智能合約中可以很容易的預測隨機數,因為隨機數的來源都是區塊或者交易中特定的一些公開參數,如交易發起者地址、區塊時間戳、區塊難度等等。因此空投游戲利用隨機數來控制中獎概率是不可行的。
而這里,黑客利用了另一個以太坊的特征,一個地址創建一個合約,合約地址是可按照特定規則計算得到的,任何人都可以根據已知信息進行推算。
因此,黑客循環利用自己控制的1000個合約地址,推算各地址下一次新建的合約地址,而該地址恰恰是空投游戲中獎數字的隨機源。攻擊合約通過一系列預演推算來篩選出“合適”的地址來完成攻擊操作。
這才是黑客能夠以超高概率獲得空投的真正原因!
技術流:攻擊手法細節披露
類Fomo3D游戲空投漏洞的根本原因在于,以太坊智能合約環境中難以生成無法預測的隨機數。而Fomo3D開發者在其合約中增加了「判斷調用者是普通人類還是合約」的邏輯來嘗試規避,但此邏輯實現存在漏洞。黑客利用攻擊合約提前預測隨機數,并通過在構造函數內調用游戲合約的方法來偽裝成普通人類地址,從而大大增加自身中獎概率。
時間再次回到7月23日,以太坊基金會開發團隊負責人之一PéterSzilágyi在Reddit上首次公開爆出這個漏洞并給出1.0版本的POC方案。這主要是利用了這些特點:
空投游戲用來控制中獎概率的隨機源,可被提前獲得
用戶能否獲得空投獎勵以及獎勵金額,可在另外一個合約中提前計算出來,從而決定后面的操縱邏輯Fomo3D空投機制中嘗試限制只有非合約地址才能參加游戲以防止上述情況的發生。但該判斷方法存在漏洞,在構造合約的過程中參與游戲即可繞過該限制。因此攻擊者可以部署一個智能合約,并在合約的構造方法中計算出自己是否能夠獲益,如果能則投入以太幣參加游戲空投獲利,否則就不參加。
Péter提出的這個方案只是一個最簡單的原型,因為每次部署合約都要消耗不少Gas,而且工作效率很低且收益率并不高,采用該方案攻擊,發起上千筆交易,都不一定能夠真正獲得空投獎勵。
看到這里你可能會有疑問,上文的攻擊者似乎手法更高明,而且實際成功攻擊的發生時間要早得多。
Zethr開發者Etherguy早在7月8日就已使用更高明的手法成功獲利,解決了上文1.0方案中的部分問題,我們姑且稱之為2.0版本。
這個思路是通過合約循環創建子合約,直到子合約滿足空投條件可以獲利為止。這樣做的好處是,在Gas充足的情況下,每次調用合約幾乎一定可以獲得收益,提高了工作效率。然而這種方案和1.0版本的攻擊成本接近,并沒有從本質上提高收益率。
而這次事件的最大獲利者BAPT-LW20團隊,就是在2.0版本的思路上進行了進一步優化降低了投入成本,提高了收益率。3.0版本則瘋狂創建代理合約,通過利用計算下一步新建合約地址的技巧提前預判,篩選出符合條件的代理合約再創建出新的子合約,在子合約的構造函數中再完成上述攻擊。而且攻擊目標地址可配置,可多人同時協作攻擊。當游戲獎池金額不足以覆蓋攻擊成本時,發出的攻擊交易會自動提前失敗,僅消耗很低的Gas費用。
在分析各類攻擊合約過程中,我們還見到另外一種更高明的做法:主攻擊合約有著良好的設計模型,支持核心算法動態替換與升級。原理上則是利用了delegatecall進行操作。安比實驗室會持續關注這批黑客的動向。
彩蛋一:空投與挖礦
我們知道在PoW挖礦的時候,礦工通常需要進行如下計算:
當BlockHash結果小于當前難度值的時候,代表找到了一個合法的Nonce。
在Fomo3D的空投獎勵里有著類似挖礦的機制:
用戶唯一可以操縱的就是msg.sender字段,我們是否可以將msg.sender作為Nonce來挖礦呢?
答案顯然是可以的,智能合約的地址是根據發起者賬戶nonce決定的,于是有了第1代方法:
但是這種方式需要用戶持續部署合約,消耗的礦工費代價非常大,且成功率極低,每次都是以1/1000的中獎概率在嘗試。
由于第1代驚人的失敗率,顯然無法利用,于是有了第2代攻擊方法:
這種方法的主要思想是,合約創建的新合約地址由合約地址nonce確定:
這種方式類似于挖礦,固定區塊頭部,不斷修改nonce來試探能否成功獲得獎勵,但是問題在于,如果在循環第1000次才發現合法的nonce,那么意味著之前部署的999個合約都屬于浪費Gas的操作。
那么如何更高效地尋找合法的nonce呢?
我們回想比特幣挖礦,一個挖礦任務中,不僅有nonce,還有extraNonce。
在比特幣區塊的Coinbase字段中,有一個自由修改的區域,修改這個區域會導致MerkleRoot被修改,從而實現Header被修改,具有nonce的效果,因此被稱作extraNonce。
為什么需要引入extraNonce呢?原因在于nonce為32bit數字,搜索范圍只有2^32,礦機幾乎一瞬間就遍歷完了,通過不斷修改extraNonce來擴大本地搜索范圍,我們甚至可以不修改nonce只修改extraNonce來挖礦。
也許黑客也想到了這一點,他們通過提前部署1000個代理合約來實現有1000個extraNonce的效果。至此,攻擊方法升級到了第3代:
顯而易見,這種攻擊方式同時實現了2個效果:
提升了攻擊成功率減少了攻擊合約部署數量,大大減少了Gas消耗。
彩蛋二:黑客預先創建的合約數量與中獎概率
前文提到黑客預先部署1000個代理合約,這個數字有什么講究呢?
seed經由一系列以太坊鏈上環境以及多次Hash運算得出。Hash結果對1000取余數,可以得到0~999的偽隨機數。
我們假設哈希輸出結果是均勻的,并且哈希是抗碰撞的,那么平均每次中獎的概率為1/1000。
模擬結果:
公式運算結果:
盡管更多合約能夠提供更高的中獎概率,但是需要考慮到Gas消耗與GasLimit等因素,不宜過大。
安比實驗室認為黑客選擇部署1000個合約,是根據概率代碼1/1000想當然做出的判斷。
彩蛋三:黑客可能利用了空投概率計算的另一個bug
黑客仍然需要更高效地攫取利潤,他們甚至發現了Fomo3D空投規則在這種攻擊方式下暴露出的缺陷。
攻擊合約需要在最開始獲取空投獎勵信息,作為后續操作的依據。因此,攻擊合約會先依次調用游戲合約的兩個查詢接口,分別是0xd87574e0airDropPot_()和0x11a09ae7airDropTracker_()。
Fomo3D空投獎勵的airDropTracker_計算方式為如下方法:
Fomo3D判斷是否能中空投獎勵使用了如下方法:
根據我們分析,0x820d后期更新的攻擊合約直接去除了對airDropTracker_的判斷,但這樣做其實有利有弊。
尾聲:下一個是誰?
8月14日,BAPT-LW20黑客團隊的0x820d再次部署了兩個新版攻擊合約,這一次他們將炮筒又對準了另一款一天前新部署的不知名合約。
望著大屏幕上AnChain.ai態勢感知平臺不斷閃爍的紅點,安比實驗室和AnChain.ai都很清楚,區塊鏈世界里的戰役還遠遠沒有結束。
2009年,中本聰創造了一個虛擬的去中心化新世界。這仿佛是一片流著奶和蜜糖的應許之地,人們歡呼雀躍,蜂擁而至。但與所有的生態系統一樣,新世界有生命,就有捕食者。有交易者,就有黑客。區塊鏈上的應用在進化,攻擊者也同樣,我們給大家展示的是區塊鏈世界不為人知的另一面,暗流涌動。意料之外,也在意料之中。
BAPT-LW20&BAPT-F3D大事件時間表:2018/07/06Fomo3D游戲合約上線2018/07/08Zethr核心開發者Etherguy發現并利用空投漏洞2018/07/20Fomo3D游戲在國內走紅2018/07/20BAPT-LW20黑客團隊地址開始活躍2018/07/21BAPT-LW20團隊第一次成功利用Fomo3D空投漏洞2018/07/23BAPT-LW20團隊攻擊山寨游戲?鼠會RatScam2018/07/23Pe?ter在Reddit爆料Fomo3D空投漏洞2018/07/24安比實驗室發布Fomo3D及山寨版游戲空投漏洞預2018/07/24BAPT-LW20黑客團隊攻擊FoMoGame2018/07/26BAPT-LW20黑客團隊部署新版攻擊合約0x54832018/08/06類Fomo3D游戲LastWinner上線2018/08/07LW游戲開始火爆2018/08/07BAPT-LW20黑客團隊開始攻擊LW游戲2018/08/09以太坊未確認交易數創年內新高2018/08/10凌晨AnChain.ai態勢感知系統發出預警2018/08/10安比實驗室與AnChain.ai聯手開展調查2018/08/10BAPT-LW20黑客團隊轉移舊合約中資金,使用新版合約繼續開展攻擊2018/08/11完成BAPT-LW20攻擊時間線復原2018/08/12完成BAPT-LW20攻擊手法復原2018/08/13針對更多攻擊源分析2018/08/13完成BAPT-F3D和BAPT-LW20攻擊數據全景分析,黑客獲利超5000Ether2018/08/14BAPT-LW20黑客團隊再次部署新版攻擊合約,開始攻擊一個不知名合約2018/08/17BAPT-LW20黑客團隊奪取LW最終大獎7754Ether2018/08/17安比實驗室完成BAPT-LW20攻擊事件報告
參考文獻區塊律動:8萬筆交易「封死」以太坊網絡,只為搶奪Fomo3D大獎?https://mp.weixin.qq.com/s/5nrgj8sIZ0SlXebG5sWVPwPwningFomo3DRevealed:Iterative,Pre-CalculatedContractCreationForAirdropPrizes!,https://peckshield.com/2018/07/24/fomo3d/PéterSzilágyi提出的空投漏洞利用POC,https://www.reddit.com/r/ethereum/comments/916xni/how_to_pwn_fomo3d_a_beginners_guide/,2018/07/23AsicBoost-ASpeedupforBitcoinMining,https://arxiv.org/pdf/1604.00575.pdf,2016/03/31以上數據均由安比實驗室和AnChain.ai提供,合作交流請聯系。
來源鏈接:mp.weixin.qq.com
本文來源于非小號媒體平臺:
安比實驗室SECBIT
現已在非小號資訊平臺發布1篇作品,
非小號開放平臺歡迎幣圈作者入駐
入駐指南:
/apply_guide/
本文網址:
/news/3626986.html
免責聲明:
1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
一文看懂區塊鏈安全6大分類3大問題
下一篇:
韓國政府宣布:被檢查的21家加密貨幣交易所中有11家已實施安全措施
根據3月2日發布的新聞稿,日本金融服務集團SBIHoldings已經收購了40%的臺灣加密貨幣硬件錢包公司CoolBitX.
1900/1/1 0:00:00NEO看漲期權 代碼周NEO看漲0528期權標的NEO合約類型歐式看漲期權計價單位USDT最小價格單位0.0001USDT合約比例1:1.
1900/1/1 0:00:00來自加密技術媒體theblockcrypto.com獲得的法庭文件顯示,穩定幣發行商Tether表示,其已將部分儲備金投資于比特幣和其他資產.
1900/1/1 0:00:00尊敬的BITKER用戶:BITKER將于2019年4月19日16點正式開放ZCO/BTC和ZCO/USDT交易對.
1900/1/1 0:00:00由知道創宇出品的「KCon黑客大會2018」將于8月24日在京召開,KCon是以「追求干貨、有趣」著稱的黑客大會;是中國網絡安全圈最年輕、最具活力與影響力的前沿網絡安全攻防技術交流平臺.
1900/1/1 0:00:00人在家中坐,禍從天外來。這話用來形容Zcash的近日運勢或許正合適。在上周一個區塊鏈峰會上,德勤、安永的專家在評價Zcash時可謂不留情面.
1900/1/1 0:00:00