遊戲skr而止,漏洞周而復始——遊戲合約漏洞全面彙總

image

區塊鏈遊戲江山如畫,算法

安全防禦未規劃,安全

一片殘陽西掛。服務器

區塊鏈行業突飛猛進,發展迅猛,各個公鏈及項目方奇思妙想層出不窮。俗話說,玩是人的天性,將數字貨幣與遊戲結合,運用遊戲的機制吸引投資者參與到互動中來的想法以標新立異、推陳出新的姿態引領了最近的潮流。各類區塊鏈遊戲彙集大量的虛擬貨幣,價值動輒上千萬,承諾下的豐厚回抱吸引了愈來愈多的目光,投資者們躍躍欲試,人人都想充當「頭號玩家」。 分佈式

可是,缺乏一套完整的、通過驗證的SDK庫是當下區塊鏈遊戲的一個痛點。各遊戲方大都自食其力,獨立開發遊戲智能合約。比代幣合約更加複雜的開發過程使得安全隱患不可避免的出現,這些漏洞一旦被攻擊者或者項目方自己利用,受害的總會是玩家,可謂是,興,百姓苦,亡,百姓苦。 成都鏈安科技對目前已經爆發的區塊鏈遊戲合約事件進行了概括整理,分析目前遊戲存在如下兩個方面的問題:函數

1

代碼層面的安全問題

目前代碼層面的安全問題在遊戲中的表現幾乎與以前的代幣合約一模一樣,可是包裹了鮮亮外衣以後,內部的代碼結構嚴謹度依然差強人意,加上游戲機制的部分功能,有些合約代碼甚至更加混亂。比如建造一棟樓房,基本結構沒有搭建好,上樑不正下樑歪,增長更多的樓層與附屬結構反而使得樓房的轟然倒塌更加迅速。 區塊鏈

image

**漏洞歸類與修復建議 **測試

一、以溢出爲表明的代碼安全漏洞優化

數學運算溢出在智能合約中是個比較大的安全隱患。不管是以太坊仍是EOS,一個整型變量只能有必定範圍的數字表示。例如,一個 uint8 ,只能存儲在範圍[0,255] 的數字。試圖存儲 256 到一個 uint8 將變成0。不加註意的話,只要沒有檢查用戶輸入又執行計算,致使數字超出存儲它們的數據類型容許的範圍,就會產生溢出,並能夠被用來組織攻擊。 此部分的具體原理在咱們以前第一期,溢出漏洞全面分析中已經重點介紹過,沒看過的請戳下面的連接:一晚上回到解放前?溢出漏洞類型全面分析 | 鏈安團隊漏洞分析連載第一期 —— 溢出漏洞網站

下面咱們來看遊戲合約案例:表明遊戲:狼人遊戲平臺:EOSui

image

從遊戲網站上,能夠很明顯的看到,該合約執行發生了溢出,致使獎金池總額變爲一個極大的負值,而且因爲項目方應對措施不當,致使獎池獎金被盜取,普通玩家血本無歸[1]。 修復建議 該遊戲有三個問題須要你們引發注意:

  • 代碼開源問題,狼人遊戲項目方並未公佈合約源代碼,玩家在參與遊戲以前沒法對  項目安全性進行評估,本身的資產沒法獲得保障;

  • 狼人遊戲項目方要求用戶提供的過大的權限,致使其有能力在用戶未提供私鑰的狀況下,在後臺修改權限,並轉出用戶的EOS;

  • 對安全事件的應急響應,狼人遊戲項目方未凍結攻擊者帳戶,致使攻擊者在升級後的版本中提出了6萬多EOS。

在此處,成都鏈安科技建議廣大遊戲項目方應在遊戲合約的設計中引入安全控制機制,包括惡意帳戶凍結、暫停交易等,爲遊戲安全創建最後一道防線。

二、以owner權限盜取爲表明的函數調用權限問題

此類漏洞的造成緣由爲構造函數失配或者修改owner的函數未添加調用者檢查。智能合約的構造函數通常擔負着合約初始化以及owner地址綁定的功能,若是構造函數聲明方式不正確,那麼,其會變成一個普通函數,任何人均可以調用他,並將本身設置爲合約管理者。修改owner的函數用於將新地址設置爲owner,此類函數須要檢查調用者地址,若是確少該檢查,那麼任何人都可以將本身變爲合約的管理者。這與咱們在開始連載以前的owner權限漏洞分析中的構造函數問題一模一樣,須要瞭解請由如下連接傳送:注意!3份合約又存在Owner權限被盜問題——低級錯誤不容忽視

直接進入案例分析:表明遊戲:Ether Cartel平臺:以太坊

image

遊戲的構造函數(DrugDealer)和合約名(EtherCartel)不一致,存在構造函數失配漏洞,致使DrugDealer變成一個普通的函數,任何人都可以調用該函數變成合約的ceoAddress,而且,根據後面的代碼邏輯,他能夠收取本來應該打入合約部署者的ETH2

image

修復建議 爲了不此類漏洞,開發者在開發遊戲合約時須要足夠謹慎,並進行詳盡的測試。構造函數僅在合約部署時執行一次,當出現合約部署後owner仍爲0地址,而且用戶能夠調用實現構造函數功能的函數,那麼,合約就存在構造函數失配的漏洞,開發者須要檢查並修復構造函數實現。

**三、「隨機數生成」等區塊鏈平臺短板 **

截止至目前,以太坊和EOS官方均未提供隨機數接口,這對遊戲開發確實是一個不利的影響,好比抽獎模塊的開發。爲了實現相似的功能,遊戲開發者每每須要本身編寫隨機數生成函數,這些函數每每利用區塊信息做爲參數,而後進行一系列運算,得到一個「隨機數」。可是,因爲使用區塊信息做爲參數,這將致使在同一個區塊上,使用相同算法的隨機數函數將會獲得相同的值,攻擊者能夠利用這點,部署中間合約,而後不停的嘗試生成隨機數,當生成滿意的隨機數時,再利用中間合約參與遊戲,得到較大優點。此外,區塊鏈做爲一個全球分佈式的計算機,其資源目前是比較有限的,鏈的開發者爲了保障鏈平臺的穩定性,對鏈上的智能合約的運作出了限制,防止死循環等消耗資源的操做,好比,運行gas限制(以太坊)、CPU/內存資源限制(EOS),這使得鏈上游戲開發者須要比傳統的中心化服務器遊戲付出更大的努力,對遊戲的邏輯進行優化,確保邏輯正確的合約不會由於資源限制問題而沒法運行。

隨機數問題咱們在以前的快訊 智能合約隨機數算法漏洞影響遊戲公平性 已經說起過,此次咱們根據案例進行一下具體分析。

表明遊戲:FoMo3D long平臺:以太坊

image

該合約空投函數的隨機數生成使用的區塊參數依次爲block.timestamp(當前區塊時間戳)、block.difficulty (當前區塊難度)、 block.coinbase(挖出當前區塊的礦工地址)、block.gaslimit(當前區塊 gas 限額)、block.number (當前區塊號),結合msg.sender (玩家地址),計算出玩家是否得到空投獎勵,攻擊者能夠部署中間合約,預先計算出在當前塊進入遊戲是否可以得到空投,而後在結果爲true的時候參與遊戲,就必然可以得到空投,並以此牟利。

修復建議

針對隨機數問題,目前有幾點建議:

  • 能夠嘗試官方推薦的隨機數生成方式,好比以太坊的Solidity官方文檔推薦用戶使用鏈外的Oraclize庫生成隨機數;

  • 杜絕中間合約參與遊戲,以太坊開發者須要注意,使用以太坊平臺提供的    extcodesize函數並不能徹底判斷某個地址是否爲合約,由於合約在部署的時候,其extcodesize爲0,可是能夠在構造函數與其餘合約進行交互,從而參與遊戲,可使用tx.origin==msg.sender的方式判斷。

4.  利用競態條件機制發起的攻擊

目前有些相似博彩的遊戲合約彷佛更加受到歡迎,此類遊戲合約有一個共同的特色——時間依賴。它們都是在必定時間段內與用戶進行互動,時間截止以後宣佈獲獎者名單。這樣取決於時間點的遊戲留下的隱患是:攻擊者能夠將整個區塊「塞滿」交易,使得特定的交易沒法進行。 攻擊者會使用高昂的gas使其成爲整個區塊中惟一一個交易進行者。

案例分析:表明遊戲:Exitscam/FoMo3D平臺:以太坊

image

以太坊版的FoMo3D規則相似於透明「金字塔騙局

  • 每一局持續固定的時間

  • 若是你是最後一個向獎池中投注的人,你拿走頭獎(獎池總獎金的90%)

  • 若是有人在你以後投注,你會得到必定的分成。目前,分成金額低於投入ETH的1%

  • 每0.005 ETH會給結算時間增長30秒,也就是2個區塊,但每次增長上限爲24小時

利用競態條件的概念,贏得此遊戲,得到頭獎的策略很簡單:當倒計時即將結束,趨近於0時,向獎池投注ETH,「買「下以後的每個區塊直至倒計時結束,保證沒有人可以在你以後投注。若是這個操做實現,你將得到頭獎[3]。 這個遊戲的機制漏洞幾乎與以前提到的交易順序依賴(TOD)殊途同歸,競態條件咱們在第三期連載分析中也有描述,連接以下(http://v1.8btc.com/lianan-series-03):彎道超車老司機戲耍智能合約 | 成都鏈安漏洞分析連載第三期 —— 競態條件漏洞。 

修復建議

遊戲開發者須要熟悉重入和交易順序依賴兩種類型的競態條件漏洞,相似的遊戲機制如若能夠利用類似的概念被投機取巧,應當改變設計思路,兼顧設計初衷與安全保障。 

2

遊戲自己可信度問題

雖然區塊鏈上全部的交易都是公開透明的,但這不表明遊戲項目方在合約開發的過程當中不能留有後門。尤爲是還沒有公佈源碼的遊戲合約,其中能夠暗藏一個函數,開發者只要調用這個函數就能捲走全部的貨幣。而目前還沒有出現一款可靠的反編譯器,對字節碼進行反編譯後,使其源碼真正公開透明。若是還拿建造樓房作比喻的話,能夠理解成在建造的時候就設計成歪的,一直住在其中的用戶卻並無察覺。 

image

**事件回顧 **

表明遊戲名稱:Power of Bubble 平臺:以太坊

image

從4月7日到4月8日早上10點,遊戲項目方在Discord各頻道開始了瘋狂的宣傳,利用精美的外形設計和豐厚的獎勵承諾緊緊吸引了大批的粉絲翹首以盼。8日早上10點開服後10分鐘內,合約內資產已超過200ETH,可是隨着時間的推移,玩家們開始發現討論羣消失了,遊戲內的出售以及提取操做也沒法完成。最後,獎金池中227個以太在衆目睽睽之下被合約建立者轉走4

image

區塊鏈遊戲每每須要各類虛擬貨幣做爲遊戲資產,整個遊戲中全部涉及到虛擬貨幣持有、分配的合約都應當開源,供玩家和審計方審覈,確保沒有潛在後門。同時玩家也應該提升警戒,在將本身資產投入一份源碼未知,未經審計的區塊鏈遊戲時,要作到理性投資。

路漫漫其修遠兮

將區塊鏈技術應用到遊戲上,其發展時長其實並不比區塊鏈貨幣交易短不少。區塊鏈遊戲到目前爲止已經能夠劃分爲3個時代,從1.0時代的《加密貓》,到2.0時代的《以太水滸》,都屬於收集玩法爲主的區塊鏈遊戲時代。目前的3.0時代是鏈上加鏈下多種玩法結合的時代,可是在衆多RPG區塊鏈遊戲興起的同時,龐氏騙局型區塊鏈遊戲也開始興風做浪,這類遊戲的交易屬性較重,並且每每缺少長期的遊戲屬性。

展望4.0時代,區塊鏈遊戲應當更加註重於其遊戲性,也就是說在玩法上更加接近傳統遊戲。可是與傳統遊戲相比,區塊鏈遊戲在三個方面有較大優點5

  • 帳號安全:玩家的登陸信息加密事後被儲存在錢包內,安全性相較於傳統登陸模式有較大提高。

  • 服務器:服務器安置在區塊鏈上,即便遊戲運營方中止其官方服務器,玩家也能繼續享受遊戲。

  • 公平性:因爲遊戲內信息公開透明,而且可追溯,濫發,更改道具的行爲將更容易被識別,進而大幅降低。

然而,基於以太坊開發與傳統遊戲機制相同的仍然存在許多劣勢:

  • 以太坊的吞吐量限制了遊戲玩家的數量和增加速度

  • 鑑於目前以太坊交易速度的限制,不少遊戲沒有辦法像傳統遊戲同樣作到低延遲和實時互動

  • 每筆交易須要手續費對遊戲內的交易增長了負擔

目前,更多公鏈和資本介入區塊鏈遊戲的開發,目的是爲其研發新的模式技術奠基更堅實的基礎,或許再過不久,會有專門爲遊戲而生的公鏈出現,給區塊鏈遊戲一個專屬的舞臺。同時,開發者們已經把重心轉移到多玩法的方向,試圖弱化交易屬性、減小龐氏騙局類型遊戲,將區塊鏈的技術優點附加到已經很成熟的傳統遊戲市場,爲遊戲產業帶來一個新的紀元。但不管是以交易屬性爲主仍是以遊戲性爲主的區塊鏈遊戲,都離不開智能合約的編寫和審計。

因此重中之重仍是要在發展的同時,保證合約安全屬性的驗證,對於上述問題遊戲合約,對照以前的漏洞分析不難發現,不少項目方依然在重蹈覆轍,對於異常明顯的常規漏洞沒有采起補救或者防禦的措施,帶給玩家巨大的經濟損失,也給區塊鏈遊戲的天空平添一抹陰霾。 保證合約的質量,讓區塊鏈遊戲快速走出混沌期,每個項目方和開發者義不容辭。 

參考連接彙總:

[1]:EOS版Fomo3D因漏洞終結 資金盤遊戲背後現多重風險

[3]: The Buy-A-Block Attack

內容來源 : 區塊鏈大本營(blockchain_camp)

做者:成都鏈安科技

Blockathon|48小時極客競賽,區塊鏈馬拉松等你挑戰(成都)

本期Blockathon主題不限,遊戲項目很是歡迎哦~

時間:2018年9月14-16日

地點:成都高新區天府五街200號菁蓉國際廣場2號樓A座12樓中韓互聯網+新技術孵化器

  • 招募50名開發者(識別下圖二維碼或點擊「閱讀原文」便可報名)

  • 報名費100元爲參賽押金,參賽者我的緣由不能到場參加活動概不退款;參賽者全程參與活動,待活動結束後現場退還。9月14日18:00開始第一次簽到,9月15日和16日天天早上都要記得簽到哦。

  • 主辦方免費提供2天的食物、飲料,併爲每一位參會者準備一件文化衫

image

相關文章
相關標籤/搜索