文章來源: 慢霧科技
作者:唐飛虎

本文盤點了近期 EOS Dapps 上影響較大的安全事件以及漏洞解讀,同時以開發者的角度對 EOS 生態和「Code is Law」進行點評,嚴格執行 Code is law,會增加用戶監督門檻,開發者故意埋下漏洞的行爲也難以譴責追訴。而過分的人治,又會成爲民粹的溫牀,打擊開發者審計合約的動力。

自主網上線以來,一場最大型的 EOS 合約漏洞攻擊正在上演且追隨者無數,涉及到的項目包括 EOSBet、newdex 等衆多頭部項目,項目方累計損失 11 萬個 EOS (約價值人民幣 400 萬)。目前尚不能判斷這一系列事件是由一人還是多人所爲,主要涉及到的賬號包括:「guydgnjygige」, 「imeosmainnet」, 「iloveloveeos」, 「aabbccddeefg」及衆多疑似小號,如「chinasichuan」, 「cityhangzhou」, 「cityhongkong」, 「guangxichina」, 「guydgnjygige」, 「lloolloolloo」, 「meadwestvaco」, 「nbcuniversal」, 「ooooo11ooooo」, 「shunwanggame」, 「sichuanchina」, 「surveymonkey」, 「wolframalpha」, 「slowmistsafe」, 「helloboy1234」…

第一個中招的遊戲 – https://luckyos.io/

主要涉及到的黑客賬號「guydgnjygige」。
該賬號創建於 6 月 9 日,最初以 0.0001 EOS 的小額轉賬附帶 Memo (注:一般的 EOS 轉賬必須填寫發起方和接收方賬戶名,MEMO 作爲備註信息是選填的。)打廣告的形式,推廣一款叫 EOS Game World 的山寨 FOMO3D 的遊戲。https://gameworldeos.github.io/ 該網站現已停運,網站的社交媒體鏈接已導向 dapp.pub。

後期該賬號主要投注各類骰子、樂透類菠菜項目,並通過預測各項目的隨機數產生,產生收益。

8 月 27 日,Luckyos 旗下的石頭剪刀布遊戲被成功攻破。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

該黑客找到了剪刀的隨機數產生規律,於是通過持續在指定時間出石頭,來贏得獎勵,並指出有 38% 的概率獲勝。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

自此,該黑客對破解其他菠菜遊戲產生了濃厚的興趣,不斷的嘗試挑戰破解新的遊戲,並通過小額轉賬 Memo 指點了 http://rollgame.github.io 的開發者。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

第二個中招的遊戲 – DEOSBET

10 日,黑客又利用類似的漏洞,攻擊了 DEOSBET,並且連續贏了 24 次,累計接近 2.4 萬美元。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

第三個中招的遊戲 – EOS Happy Slot

https://happyeosslot.com/

主要涉及到的黑客賬號 imeosmainnet 。

另一名賬號爲 imeosmainnet 的黑客對 Happy Eos Slot 老虎機項目的攻擊是在 9 月 12 日凌晨,利用重放攻擊(Replay Attacks,這種攻擊會不斷惡意或欺詐性地重複一個有效的數據傳輸),導致項目方損失了 5000 個 EOS。

攻擊方法是黑客首先賭了較小的金額,並在 transfer 方法中加入了鉤子開關,transfer 過程可以被黑客預留的鉤子中斷,所以 reveal 被卡死,當 reveal 被卡死時候,並且這時候 bet 是仍然可以被調用的,重放攻擊就成立了。黑客選擇默認關閉開關,當檢測到得到五倍以上的開獎金額之後,就再發一筆數額較大的金額,並開啓開關,從而每一次都可以獲得數倍的回報。

由於 happyeosslot 使用了一種新的智能股權協議,項目的盈虧會直接作用在幣價上,在收到黑客攻擊之後,happyeosslot 的企業經營係數也是隨之降低到了 0.1。

有趣的是,老虎機小遊戲 https://www.luckywith.me/slots 大部分參考了 Happy EOS Slot 的合約代碼,而在 Happy 家被黑客 imeosmainnet 攻擊的前兩個小時,Lucky 家突然暫停了旗下的老虎機項目。Lucky 家的官方解釋是 EOS 主網節點波動嚴重,等主網穩定後再開放。直至發稿,Lucky 家的老虎機仍未重新上線。

而黑客 imeosmainnet 非法獲得了 EOS 之後,立刻轉入了 fcoin 交易所。黑客的最初幾筆資金來自火幣和 zb 兌換中心。但從記錄表明,並未看出 imeosmainnet 與 guydgnjygige 的關係,可以猜測,這兩個賬號背後是不同的人。

該項目目前已經重新上線。

第四個中招的遊戲 – FairDice

https://dapp.pub/dice/

主要涉及到的黑客賬號 iloveloveeos 。

繼 Happy 家失竊,一衆程序員正誇讚 dapp.pub 旗下的 FairDice 的代碼並潛心學習的時候,突然發現黑客也開始對 Fairdice 下手,並已成功了幾筆。

這一次攻擊的手法也是重放攻擊,由於 FairDice 的隨機數算法和時間相關,因此多次同一筆下注在不同時間開獎可以獲得不同的結果,黑客正是利用了這一點,拒絕了所有失敗的開獎結果,從而可以讓自己的下注總是獲勝。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

https://www.reddit.com/r/eos/comments/9f5o6a/dapppubfairdice_version_2_is_back_an_opensourced/
Fair 的代碼增加了安全機制,每次獲勝的金額不得超過合約獎池的 1%,並且我們發現及時,立即 Call 醒了開發者,纔沒有讓損失繼續擴大。

第五個中招的遊戲,也是損失最慘重的 – EOSBet

主要涉及到的黑客賬號 aabbccddeefg 。

EOSBet 是建立在 EOS 上的一個擲骰子的 DApp, 被攻擊時在 DAppRadar 上排名第四。七日交易量約 860 萬 EOS,交易筆數 137 萬餘筆。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

EOSBet 項目尚未開源,卻也難逃離攻擊。9 月 14 日上午 11 點左右,aabbccddeefg 在未進行投注的情況下,卻以中獎的方式 , 在 20 多分鐘的時間內,贏得了 4.2 萬個 EOS(總價值約爲 150 萬人民幣)及投注產生的 1 千多個平臺代幣 BET。
據分析,EOSBet 被攻擊,是因爲代碼中並沒有檢查收到的 EOS 是不是 eosio.token 產生的 EOS,黑客通過自己創建的名字同爲 EOS 的「假幣」,套取了真的 EOS。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

在獲得了 EOS 之後,黑客分別給 guydgnjygige 和 cctvworldcup 兩個賬號各轉賬了 1 萬個 EOS。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

第六個中招的遊戲 – EOS.win/dice
隨後相同手法又被用在了 EOS.win 上,導致各項目方產生驚恐,紛紛關閉了自己的項目。

第七個中招的是去中心化交易所- newdex

主要涉及到的黑客賬號 oo1122334455 。

9 月 14 日下午兩點,EOS 賬戶“oo1122334455”用同樣方法發行了 10 億個 EOS 假幣,分配給了 dapphub12345 賬戶,再由 dapphub12345 轉賬給了 iambillgates 賬戶,並利用假 EOS 掛單進行幣幣交易,委託買入 IPOS、BLACK、IQ、ADD,並轉給 xx1234512345 和 x12345x12345,最終由 xx1234512345 將非法得來的 Token 掛單賣得 4 千多個 EOS,並充值到 Bitfinex。

整個黑客攻擊事件最無奈的便是,作爲一個去中心化的交易所,在遭遇了假幣之後,不得不通過中心化的手段來強制下架了交易對。此次事件,共造成了 Newdex 用戶 11803 個 EOS 損失。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

賬戶安全提醒

事件發生後,大家紛紛通過轉賬時的 Memo,給黑客賬號留言致敬或蹭黑客賬號熱點來發布小廣告。

更有詐騙賬號假裝 EOSBet 官方,不斷的向黑客賬號發出索賠要求。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

點評 EOS 生態

EOS 自主網上線兩個多月以來因其 TPS 超越各大主流公鏈而受到 dapp 開發者的青睞。EOS 上的 dapp 數量也呈現井噴式增長。EOS 公鏈本身的安全性,以及合約開發如何設計安全規範,也越來越引起開發者的重視。

「擲骰子」可以視作 dapp 開發的最小可用模型,而這次黑客攻擊事件,將 EOS 開發者生態不健全的問題翻到了檯面。如果這類 dapp 的安全性都不能保證,大家暢想的 killer dapp 更是無從談起。目前 EOS 上幾乎每一個類似項目都受到了不同程度的攻擊。一方面是 EOS 合約的表達能力較強,使得很多開發者對可能存在的漏洞缺乏全面的考慮,另一方面是開發者剛剛進入這個領域,缺少必要的安全攻防經驗。EOS 合約開發者們各自爲陣,大部分項目方爲了安全起見選擇不開源,而實際的結果只能是掩耳盜鈴。黑客往往能夠根據 wasm 和 abi 文件還原出合約的信息,很多時候封閉的代碼只會隱藏自己的錯誤反而給黑客可乘之機。EOS 上目前也缺乏一些類似 ERC20 和 OpenZepplin 這樣的標準庫,來給開發者提供一些合約設計上的參考。

作爲 EOS Dapp 開發者,不僅要自掏腰包購買 ram,帶寬,辛苦踩坑。合約上線後還面臨着被用戶維權,被黑客薅,被 BP 丟塊。最後還可能面臨着被 BM 降維打擊的風險(EOS Bank 所提供的服務就直接被官方加入進了 rex 裏)。可以說是生態中最苦逼的一波人。

截止目前,黑客還有一些攻擊手法沒有被完全揭示,黑客可能還留藏着一些底牌,等待項目做大之後再使用,以下是我們總結的一些給 Dapp 開發者的忠告:

跟隨社區的忠告,當友商被攻擊時及時 update 信息,確認自己的合約是否有類似的漏洞。

添加風控功能,防止黑客在短時間內盜取大量 EOS。

總是使用 defer transcation,阻止黑客的鉤子攻擊。

種子只使用一次,避免被重放攻擊。

EOS 核心仲裁法庭(ECAF)

EOS 在社區治理方面與以太坊等區塊鏈有很大的不同,率先創建了仲裁法庭機制來服務於社區,作爲社區的日常管理。當出現爭議時,社區成員便可以向 ECAF 提出訴求,等待社區仲裁。

仲裁員通常由社區公民投票任命,而撤銷仲裁員的任命需要三大權力機構(BP、社區、法庭)中的兩方批准方可執行。一般情況下一個案件僅指定一名仲裁員,而特殊情況則需由一名高級仲裁員領導的三人小組進行審理。

任何社區成員都可以在線上提交仲裁申請,https://eoscorearbitration.io/file-a-claim/,並按照案件涉及的損失金額來支付仲裁費用。目前法庭裁決過的申請主要爲盜取賬號進行非法轉賬,申請人需要提供自己擁有該賬號的證明,其他賬號進行了非法轉賬的證據。這類案件尚不能直接追回損失,法庭的裁決只是對非法賬號進行凍結,所有 BP 不再執行與該賬號相關的任何操作。

所有案件中,大家最關心的便是前段時間出事的區塊鏈遊戲 EOS 狼人殺了,該項目團隊於 7 月 26 日及 7 月 29 日分別發佈了兩個聲明,聲稱被黑客 eosfomoplay1 非法盜取 60686.4190 EOS,並建議中獎者 guztknrygqge 通過 EOS 核心仲裁法庭申請仲裁。該事件一直被外界認爲是狼人殺團隊監守自盜的行爲,認爲 eosfomoplay1 的黑客賬號屬於狼人殺團隊。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

該案件在 ECAF 的案件編號是#ECAF00000339,緊急處理的結果是所有 BP 不再執行 eosfomoplay1 賬號以及與其公鑰私鑰相關的任何交易,即凍結該賬號,等待案件的進一步審查。

EOS DApp 已成黑客提款機?慢霧安全團隊支招

截止目前,該賬號非法所得的 EOS 依舊凍結在其中,理論上講,如果證據確鑿,且 ECAF 通過裁決,判斷這筆 EOS 應轉入給受害者,是可以追回的。只不過目前尚未有過成功追討的案例。
另一個例子是,Happyeosslot 就曾經將合約抵押貸款 refund 返回的 eos 當成是開獎,從而給 eosio.stack 賬戶開出過一筆大獎:
https://github.com/EOSIO/eos/issues/5480

Code is Law?
代碼是項目的骨架和齒輪,儘管各個項目的目標或許是做最公平的 Gambling、或許是爲了盈利賺大錢;儘管各個項目對外有着明確的玩法規則,但撥開外衣,最本質客觀的規則還是運行在各個節點機器上的代碼。

從道德上來講,黑客攻擊了項目合約轉走了「非法」所得;但從代碼這一「規則」角度,黑客的攻擊,也可以視作合約所允許的一種「玩法」,黑客精妙地發掘了「裏メニュー(隱藏菜單)」,並贏得了「獎勵」。

「立法」總會落後於現實。規則是死的,而人總是會犯錯,因此我們需要累積前人智慧作爲指導。

由於代碼的知識門檻,嚴格執行 Code is law,會增加用戶監督門檻,開發者故意埋下漏洞的行爲也難以譴責追訴。而過分的人治,又會成爲民粹的溫牀,打擊開發者審計合約的動力。

從整個公鏈的利益考慮,此次的黑客攻擊,雖然慘痛,但仲裁法庭不應該干涉,而是應該敦促制定一套安全標準,規範未來項目的開發;也讓 ECAF 真正成爲生態的重要一環。

我們一直希望開源能夠讓世界變得更好,這是因爲我們相信透明的機制的力量,相信透明的規則能夠讓信任的成本降到最低,讓合作的效率變得更高。而基於客觀規則的行爲,如果因此受到懲罰,那麼無疑會助長更多對規則的破壞和不公正的行爲。但我們也支持在現在生態還處於比較原始的階段,仲裁法庭利用自身的專業知識一起構建更安全的規則,維護廣大用戶羣體的利益,讓 EOS 公鏈的生態變得更好。