300枚EOS轉眼變為30000枚!EOS DApp成為了駭客的搖錢樹?

買賣虛擬貨幣

EOS上的遊戲又雙叒被駭客給黑了!

這一次慘遭毒手的,是EOS公鏈中的“老牌”遊戲類DApp——EOSPlay。

在上週,一名駭客利用EOSPlay中隨機數生成器的相關特性,成功地在該平臺的菠菜遊戲DICE裡實現了持續獲勝,並以此來牟取大量EOS幣。

據瞭解,截至上週末,這名駭客已經透過這一方法獲得了約3萬個EOS幣,累計價值超過110000美元,而他所使用的成本,僅為大約300枚EOS。

- 01 -

屢遭毒手的EOS遊戲

“EOS網路也許並不適合DApp,尤其是那些菠菜、競猜遊戲。”一名EOS社羣成員在EOSPlay事件發生後評論道。

據不完全統計,僅2018年下半年,EOS上由駭客攻擊所引發的較大的DApp安全事故就多達27起,累計損失約40萬枚EOS幣。

儘管事故的數量在2019年有了較為顯著的減少,但是發生於EOS DApp的被黑事件仍然佔到整個行業所有被黑事件的一半左右。根據慢霧科技所統計的“被黑檔案庫”,區塊鏈被黑事件總計有224起,其中111起都來自於EOS DApp。

圖片資料來自慢霧科技“被黑檔案庫”

而在遭遇駭客攻擊的DApp當中,菠菜遊戲佔據絕大多數,是最容易、也最經常被駭客們“光顧”的應用型別。

從最早發生於EOS上線後不久的Luckyos被駭客破悉隨機數生成規律,到截至目前損失最為慘重的EOSBet假幣事件,再到如今老牌遊戲平臺EOSPlay遭到新型隨機數攻擊。EOS遊戲可謂是屢遭毒手,生存環境之險惡可見一斑。

值得注意的是,在一樁樁EOS遊戲被黑事件接連被爆出的過程之中,隨機數攻擊似乎是出現頻率最高的詞彙。

- 02 -

什麼是隨機數攻擊?

熟悉遊戲的朋友們應該對隨機數攻擊這一概念並不陌生。儘管遊戲當中充斥著以“抽卡”、“獎池”、“掉落”為代表的所謂隨機事件,但這些事件通常都被認為是“偽隨機事件”。

什麼又叫做偽隨機呢?用最簡單的話來講,就是

num=Random(seed)

其中num為隨機數返回值,Random為包含有某種計算公式的隨機數產生函式,seed則是執行該函式的基準變數。

我們知道“真隨機事件”需要滿足的條件是事件之間相互獨立、每種事件的發生概率等同以及發生結果的不可預測性。顯然,上述這種純粹依靠程式所實現的隨機事件並不完全符合這些條件,也就是“偽隨機事件”。

當偽隨機函式執行週期較短時,相同seed值所生成的隨機數佇列也是相同的;而當執行週期較長時,過長的隨機數列樣本又會間接地反映出Random的計算規律。也就是說,無論哪種情況,駭客都有可能根據某一段隨機數列樣本或者某種方法獲悉隨機數生成器的生成規律,這便是隨機數攻擊的本質。

在同一時間生成三個隨機數生成器

輸入相同的seed,得到相同的結果

- 03 -

EOSPlay所遭遇的“新型隨機數攻擊”

駭客做了什麼?

話題回到EOSPlay此番所遭遇的駭客攻擊上來。

慢霧科技將駭客的這次攻擊稱作是“新型隨機數攻擊”,那麼,駭客的手段到底“新”在哪裡呢?他又是如何實現在DICE競猜遊戲中的持續勝利的呢?

我們先來看看駭客究竟幹了什麼。

駭客首先透過EOS REX(一個透過借貸他人的EOS來租賃EOS資源的DeFi專案)租用了大量的EOS的CPU和NET(網路頻寬),隨後使用這些CPU和NET在EOSPlay的智慧合約上建立了多筆延遲交易。這個過程,他花費了大約300枚EOS的租賃費用。

我們知道,EOS上一般的使用者操作以及合約程式碼的執行都需要佔用CPU和NET,因此駭客大量佔用CPU資源以及建立延遲交易的行為導致了區塊鏈網路的部分堵塞,進而使得許多使用者無法傳送交易請求。藉助這一手段,駭客成功地將自己的交易資訊填滿了區塊。

持續勝利的實現

EOS中並沒有內建的隨機數熵源,因此EOS官方也沒有為DApp開發者們提供隨機數功能介面。這也就意味著,當應用程式使用到隨機數時,需要開發人員自行確立隨機數的生成方法。

EOS遊戲的開發者們一般是無法避免這一問題的,畢竟抽獎以及競猜等模組,總是需要使用隨機數來完成。

具體到EOSPlay的開發者,他們所做出的決定是將區塊資訊作為引數來生成隨機數,因為使用者無法預料到在傳送交易事務時區塊具體會產生什麼樣的變化。

顯然,這既是EOS合約的漏洞,也是EOSPlay開發者對於駭客的低估。

使用區塊雜湊作為隨機數引數將導致在同一個區塊上,使用相同演算法的隨機數函式將會得到相同的隨機數值,這就為駭客透過作弊手段獲得持續勝利提供了前提條件。

由於區塊被駭客自己預先構造的交易內容填滿,其他使用者的交易請求又因為CPU被大量佔用所導致的網路堵塞而無法傳送,區塊雜湊便順理成章地成為了駭客可以預料乃至掌控的資訊。根據前一段所述的內容,當區塊資訊被掌握,“預測”競猜遊戲中以區塊資訊為引數的隨機數也就不是難事。

獲得持續勝利的駭客

狡猾的攻擊者

從某種意義上來說,這次攻擊完全可以稱得上是一場“成功”的策劃和表演。

據瞭解,EOS REX上的CPU租賃計費是動態變化的,被佔用的CPU越多,租用CPU的費用也就越高。

狡猾的駭客透過租借大量的CPU資源,既令大多數使用者的CPU資源不充足,也使得透過EOS REX租借CPU的費用大大提升。

這兩者促成了一個因果迴圈:CPU被佔用所導致的網路擁堵使得許多使用者無法傳送交易,為了執行交易他們不得不以更高的成本去租賃CPU,而這又會使得CPU資源更加緊張、網路更加擁堵,租賃費用也愈發水漲船高。

而這個迴圈最終所導向的唯一結果就是,因為成本的高昂,大家都不會選擇在這個擁堵時段執行操作和交易,駭客試圖用自己的交易資訊填滿區塊的計謀也就因此而得逞了。

更加老謀深算的是,智慧合約的持有者,也就是遭到攻擊的EOSPlay自身,也因為網路的擁堵和CPU資源的匱乏而無法請求禁用DICE遊戲的智慧合約,只得眼睜睜地看著真金白銀被攻擊者逐步“贏”走。

更甚者,根據ERC-233的建立者、Reddit使用者Dexaran在推特中所釋出的推文來看,這個攻擊者不僅對EOSPlay伸出了魔爪,還同時利用多個賬戶尋找多個智慧合約中的可趁之機。

Dexaran 的推特

有意思的是,在Dexaran的這條推特的評論中,一名美國網友寫道:“我要是有這個駭客1/100的聰明和狡詐,我會比現在富有很多。”聽起來似有調侃的意味,但也從側面認同了這次攻擊事件之周全和完備。

- 03 -

BM的迴應

針對EOSPlay被黑一事,BM於上週末做出了的迴應:“EOS執行正常。這與攻擊者向以太坊或比特幣傳送高費用交易垃圾郵件沒有什麼不同。網路沒有凍結代幣持有者,沒有額外的頻寬可供免費使用。”

這一回應的大致意思就是:駭客黑走的幣沒有被凍結,也沒有必要凍結,因為這是EOSPlay智慧合約的問題,與EOS無關,EOS仍然在正常地運作。至於這個攻擊者,他的行為和那些向以太坊或比特幣傳送高費用交易垃圾郵件的伎倆沒什麼區別。

事實上,不少EOS的社羣成員都從以EOSPlay為代表的DApp被黑事件中感受到了EOS DApp的安全隱患,並希望EOS能夠儘快做出改變。而BM這樣的迴應,恐怕會令這部分人感到些許沮喪。

有推特網友就在BM迴應該事件的推文下回複道:“沒有應對作惡的免費寬頻,你還指望能有數以百萬計的人入駐Voice?”BM對此表示:“這種攻擊不會影響Voice使用者,因為B1為Voice使用者提供所有頻寬。”

BM迴應網友的質疑

儘管BM的迴應沒有為EOS DApp的安全問題起到任何實質性的影響。但從這次的事件本身,我們仍然能夠吸取到許多有關DApp開發的教訓:

首先,遊戲開發者們最好不要使用鏈上的資訊作為隨機數引數,資訊的可掌握性越低、可獲取渠道越少,遭到駭客攻擊的概率自然就越低。

其次,儘管EOS官方沒有準備專門用來應對作惡的免費CPU以及網路頻寬,但是開發者自己可以準備一個備用賬戶,以便解決網路堵塞的突發狀況或是在必要之時關閉受到攻擊的智慧合約。

最後一點則是希望DApp開發者們能夠更加積極地公開原始碼,以便於社羣成員對該專案的程式碼進行審視和查漏補缺。即便攻擊事件發生,開源的程式碼也有助於大家更快捷地找到問題的根源所在。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;