一行程式碼蒸發了5,300,000元

買賣虛擬貨幣

EOSBet是利用區塊鏈技術,執行在EOS公鏈上的一款菠菜遊戲。上線兩個月,盈利近百萬的EOSBet昨日又因營銷活動推向了一個小高潮,日活突破千人, 穩坐EOS DApp當日榜首。

不過剛高興了一天的EOSBet, 卻因程式碼漏洞,再次被駭客攻擊了。


這是EOSBet上線以來第三次被攻擊了!

無論表面資料如何風光,但菠菜類遊戲始終有極大的風險,想要入場的朋友請謹慎。我們今天不談其他,僅從技術角度來分析,EOS開發者的現狀到底如何,EOSBet為何屢次被駭客攻擊,我們到底需要什麼樣的機制。

01 覆盤EOSBet三次被駭客攻擊

1駭客對EOSBet的第一次攻擊:

早在遊戲上線第二天,EOSBet就被駭客利用EOS網路本身缺陷,吸取了很多記憶體。當日團隊緊急的作出修復,而且EOSIO已經在著手修復該漏洞。

可能是對自己的程式碼不自信,也可能是為了防止被攻擊,或是有什麼隱藏的後門,EOSBet 專案程式碼尚未開源。可即使程式碼未開源,EOSBet也難逃被駭客再次攻擊。

2駭客對EOSBet的第二次攻擊:

就在上個月,EOS上多個菠菜類DApp接連被駭客攻擊,累計被薅走數百萬。EOSBet也是那次攻擊中損失最慘重的。

9月14日上午11點左右,EOS賬號aabbccddeefg 在未進行投注的情況下,卻以中獎的方式, 在20多分鐘的時間內,贏得了4.2萬個EOS(總價值約為150萬人民幣)及投注產生的1千多個平臺代幣BET。

據分析,EOSBet被攻擊,是因為程式碼中並沒有檢查收到的EOS是不是eosio.token產生的EOS,駭客透過自己建立的名字同為EOS的“假幣”,套取了真的EOS。

那次駭客事件的詳細覆盤連結:https://bihu.com/article/1378930

3駭客對EOSBet的第三次攻擊:

接連兩次被攻擊,EOSBet也更加註重安全審計。

EOSBet已經將獎池的30萬EOS轉入冷錢包,同時將每把遊戲上限由1%提升到4%,保持最大押注額不變,以保障大戶的遊戲體驗。EOSBet表示會盡最大努力,保障最基本也是最重要的安全問題。

可惜,第三次攻擊還是發生了,而且損失金額更大! 就在剛剛,EOSBet再次被駭客攻擊,直接損失了14萬EOS!!!

02 第三次駭客攻擊來龍去脈

EOSBet這次的攻擊是因為下面的這段程式碼:

__attribute__((eosio_action)) 

void transfer(account_name from, account_name to, asset quantity, string memo){

require_recipient(RECIPIENT_CONTRACT);

}

主要問題是出在沒有判斷使用者的轉賬是轉給了其他賬戶,還是轉給了EOSBet的合約。


以上圖片引用自慢霧科技文章_<EOS DApp 充值“假通知”漏洞分析>

簡單來說,就是駭客自己建立了兩個賬戶,攻擊賬戶A和無關賬戶B,而B是一個合約賬戶,每次轉賬成功之後,B賬戶就會自動發個通知給EOSBet的合約說轉賬收到了。

EOSBet的合約收到這個通知後,沒有檢查自己是否真的收到了EOS,誤把賬戶A對賬戶B的轉賬判斷成了賬戶A對EOSBet合約賬戶的轉賬。也就是把賬戶A當成了EOSBet下注了的玩家,給玩家開獎。

駭客於是就用這個漏洞,空手套白狼,不斷開獎,給自己開了14萬EOS的獎!

那麼這個漏洞該如何修復呢?其實很簡單,只需要加一句判斷,if (to != _self) return ; 來判斷傳來的轉賬通知是不是轉給自己的。

於是, 就因為缺少了一句判斷,EOSBet這次被駭客提走14萬EOS。EOS現價約為5.48USD(轉換成人民幣大概在38元),14萬個EOS累計530萬人民幣!!!

03 CPU告急,大戶人家的遊戲

EOS的開發者除了要擔心合約被駭客攻擊之外,被爆CPU也是常有的事。

轉賬是執行區塊鏈DApp智慧合約的基本功能,在以太坊上的轉賬是要消耗Gas的,使用者支付越高的Gas費用,交易越容易被礦工優先記錄和執行。EOS的轉賬交易雖然是免費的,但同時需要佔用和消耗少量的資源來保證系統的安全。

EOS執行交易主要是依靠三種資源:ram,頻寬、CPU。

其中ram是需要購買和消耗的,頻寬和CPU是透過抵押EOS來獲得的。通常DApp開發者會為使用者抵押一定的頻寬和CPU資源,來降低使用者入場門檻。如果DApp開發者沒有抵押足夠的資源給使用者,同時使用者自己也沒有抵押足夠的資源的話,是無法與合約進行互動的。

舉個例子,假設全網一共抵押了100個EOS來置換CPU資源,那麼抵押了1個EOS的賬號則被分配全網1%的CPU。這個候,有個賬號抵押了100個EOS的CPU,那麼之前抵押了EOS的賬號被分配的CPU就被稀釋了一半。此時再來一個大戶抵押10000個EOS,那麼之前抵押了EOS的賬號被分配的CPU就被嚴重稀釋,導致不夠資源來執行操作。

ITE4是一種早期入場回報極高,後期砸盤極快的遊戲,獲得盈利要拼“入場早”和“跑得快”。該資金盤遊戲上線前,有人大量質押和租賃CPU資源,導致專案上線時,各賬號的CPU資源佔比被大大的稀釋。大部分玩家在開局時沒有足夠的CPU資源入場買進,而有幸買進入場的使用者在專案砸盤時也沒有足夠的CPU資源離場,坐等被收割。

因為EOS上CPU資源總量有限,導致大戶在抵押EOS換取資源上有著很強的優勢。所以最近每當有一些大型DApp搞活動或者新資金盤遊戲上線時,便會有大量的EOS用於抵押CPU,稀釋小戶的CPU佔比,導致大量DApp癱瘓。

難怪有人說,EOS是大戶人家玩的遊戲。

04 總結——開源的力量

EOS上線僅4個月,很多開發者剛剛進入到這個領域,開發者沒有太多成熟案例可以參考和借鑑,必然會經歷一段踩坑期。EOSBet合約尚未開源,屢次被攻擊都是因為缺少一行簡單的判斷程式碼,而釀成重大損失。

我們一直希望開源能夠讓世界變得更好,這是因為我們相信透明的機制的力量,相信透明的規則能夠讓信任的成本降到最低,讓合作的效率變得更高。

目前大部分專案方怕被駭客攻擊選擇不開源,而實際的結果只能是掩耳盜鈴。駭客往往能夠根據 wasm 和 abi 檔案還原出合約的資訊,很多時候封閉的程式碼只會隱藏自己的錯誤反而給駭客可乘之機——而EOSBet就是最好的例子。

免責聲明:

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

推荐阅读

;