菠菜類DAPP已成黑客提款機?元凶竟然是它!
區塊鏈,一直以透明、開源而聞名,也因此成為近兩年最受人關注的技術。有資料顯示,從2009年比特幣的原始碼公開後,平均每年有8600多個區塊鏈專案加入GitHub,開發者們的DAPP程式碼開始大批量湧入。
被譽為明星專案的EOS,自從主網上線以來,就一直致力於DAPP生態建設,雖然在DappRadar上,EOS的DAPP數量遠不如以太坊的鏈上DAPP數量,但它的高擴充套件性被開發者們所認可,DAPP的數量和日活也在逐漸增加。
但天下無不bug的程式,開源讓專案更透明,也給了技術高超的黑客以可乘之機。
就在昨天,知名DAPP EOSDice被黑,造成了4633個EOS的損失。而僅在6天前,EOSDice就已經被黑掉過2545個EOS。
這已經是EOS DAPP本月第三次遭到黑客攻擊了。這一次的攻擊者是之前攻擊FFGame DAPP的黑客,攻擊手法也是由於使用了可控的隨機數種子。
上一次EOS合約競猜類遊戲FFGame被攻擊之後,慢霧安全團隊經過技術覆盤推測了整個攻擊過程:
攻擊者是通過部署攻擊智慧合約,並且在合約中使用與FFGame相同演算法計算隨機數,產生隨機數後立即在inline_action中使用隨機數攻擊合約,導致中獎結果被“預測”到,從而達到超高中獎率。
根據攻擊覆盤,慢霧預警了該攻擊手法,並告誡開發者: 不要引入可控或可預測隨機數種子 ,任何僥倖都不應該存在。
果不其然,這一次黑客使用了相同的攻擊手法,再次嚐到了甜頭,也給了開發者們警醒的一擊。
那麼,這個“可控的隨機數種子”究竟是個啥?
我們都知道,隨機數是區塊鏈上執行智慧合約的一個關鍵數值。用程式設計師的思維來看,只要你告訴我初始狀態,我可以根據你每次給的輸入,預測出它的輸出。
這裡我們不用瞭解太多技術層,我們只需要知道, 假如想讓隨機數是不可預測的,那就必須保證隨機種子是不可預測的。
那麼這個隨機數種子就需要從外界輸入。簡單打個比方,它可以是某個商品的銷量,也可以是計算機的系統時間。
但這些資料太過於簡單,非常容易被黑客預測到並加以使用,從而大幅提升自己在菠菜遊戲裡的中獎率,拿走獎金池裡的獎金。
因此找到一個優良的、不易被控制的隨機數種子,是現在所有菠菜類DAPP面臨的難題。
據DappRadar資料顯示,EOS上有118個DAPP,其中菠菜遊戲類有60多個,幾乎佔比了一半!一位資深DAPP開發者表示:“目前來看, 區塊鏈第一應用就是賭博 ,其他應用,暫時還火不起來。”
因此對於菠菜遊戲來說,智慧合約是命脈,是靈魂,任何漏洞都有可能讓資金池中的資金被席捲一空。
目前菠菜類遊戲的智慧合約所參考的隨機數比較侷限,可作為隨機種子使用的公開資料仍然比較少,且大部分都有可能被猜出來,因此暫時無法實現真正的隨機。
曾經有人提出用“EOS RAM的交易資料”或者“某活躍DAPP的公開資料”作為隨機數,但是被社群中的開發者給否定掉了。原因是這些變化無窮的公開資料依然存在著很大問題,並不能直接被使用——
1、過於依賴其他方資料,必須保證智慧合約跟著別人的資料格式同步更新;
2、變化頻次時高時低,無法保證不間斷的不可預測性。
從近半年的新聞中可以得知,EOS DAPP的安全事件頻發。目前被報道的已經有FFGame、DEOSBET、EOS Happy Slot、FairDice、EOSDice,以及損失最為慘重的EOSBet。
我們會發現, EOS DAPP遭受攻擊的概率比以太坊DAPP高得多 。這不外乎是以太坊DAPP開發模式已經趨向於成熟,內部安全性較為完整,複雜邏輯較少,因此漏洞範圍更低。
還有一個原因是,目前EOS的開發人員並不多,成熟的開發者就更少了。很多情況下,一個DAPP可能背後只有1-2個程式設計師,甚至連完整的測試人員都不存在。在這種情況下,漏洞出現的可能性就非常大,也更可能被攻擊。
多次的黑客攻擊和大額損失都證明了,EOS DAPP現在還是個寶寶,不足以說是一個具有完善保護機制的成熟應用鏈。
當然, 這也是EOS DAPP發展壯大必須經歷的過程 。提升其內部安全性,任重而道遠。