Cardano以及其他區塊鏈項目能避免類似 EOS 此次的漏洞嗎?

這次360爆出的漏洞屬於缺少在release版本中對輸入進行檢查而數組越界引起的(EOS Node Remote Code Execution Vulnerability - EOS WASM Contract Function Table Array Out of Bounds)。

EOS關注性能而採用了C++編寫並利用了WASM技術。我目前關心的Cardano 比較側重安全和正確性上的考慮,走的路徑是先發論文接受同行評審,選用 Haskell語言進行開發,並有做形式化驗證。

那麼在Cardano以及其他區塊鏈項目中(從開發流程到技術選型等角度)是否可以避開類似安全隱患?

Jasin Yip:第三代加密幣 Cardano(ADA) 要做什麼??

zhuanlan.zhihu.com圖標


  1. 關於語言和程序bug

    EOS使用c++這種語言開發,優勢在於性能高,但是像指針錯誤,訪問越界這種低級程序漏洞就會容易出現,而且很難發現,而且一旦出現,還特別的嚴重。比如這次的問題,如果真的上線,後果確實不堪設想。

    Cardano使用的Haskell這種較為高層的語言會好很多,至少默認情況下不會發生這種低級錯誤。當然也不是100%的,因為就算項目代碼本身完全OK,也不排除第三方庫會有c語言的代碼,或者使用一些unsafe的代碼等,也可能出現問題。極端一點,就算自己的軟體不出問題,操作系統也可能出問題;操作系統不出問題,CPU也可能出問題 = =" 。當然總的來說,機率就低多了。
  2. 關於軟體開發流程和形式化驗證

    軟體bug,除了上面說的這些低級漏洞,還存在邏輯層面的bug。傳統軟體開發流程中主要依賴測試來發現問題,但測試無法發現所有問題,更不能保證沒有問題,是一種被動的手段。證明程序的正確性雖然不是不可能,但成本確實大,Cardano採用的是一種折中的流程。一方面儘可能利用Haskell語言本身的強類型系統來表達更多業務邏輯上的約束和不變數,通過編譯器保證他們正確性,在一定程度上做到通過編譯就沒有bug;另一方面,在一些關鍵系統上,會讓specification先行,在細化specification的過程中可以對問題本身有更清晰的認識,並且發現許多在邏輯層面上就存在的坑,這些問題,如果直接上手寫代碼,往往會會忽略。比如最近對錢包後端的重構,就有一份用數學語言描述的specification,並且又用coq實現了,然後再把它翻譯到Haskell語言。而在specification的階段,就發現了一些過去錢包軟體開發時沒有人搞清楚過的許多概念,比如餘額的概念實際上比用戶看到的一個簡單的數字要複雜很多,pending transaction,block rollback,都對餘額有很複雜的影響,最終發現需要多個餘額的概念(total balance,available balance, minimal balance)才能完全解釋清楚。錢包裡面另一個比較複雜的地方就是從一條鏈切到另一條鏈的時候,錢包狀態需要發生哪些變化。這些問題都是需要在編碼之前,通過形式化的語言徹底搞清楚的。

    當然Cardano的流程還不是完整的形式化流程,因為在specification和代碼之間,並不是自動轉換的,也就是說理論上,可能specification沒問題了,代碼還是有bug。但是肯定可以大幅降低出bug的可能性,是在成本和收益之間一個恰當的平衡。
  3. 關於協議安全

    Cardano強調的peer review主要是針對協議上安全。因為當程序員開始開發之前,數學家需要先提出協議和演算法,如果協議和演算法本身有漏洞,那麼軟體開發的再漂亮也白搭。那如何保證協議和演算法本身的正確性?利用學術界本身長期存在的同行評審機制,發專業期刊,讓業界專家共同評審,來驗證你的論文是不是靠譜的。很多項目的協議和演算法都是程序員自己想的,或者只是發一個白皮書,而不提交專業期刊,是不是經得起推敲就很難說了。


可以避免,因為 360 團隊(以及絕大部分黑帽子/白帽子)不懂 Haskell。


這次EOS曝出的漏洞使得黑客可以構造並發布包含惡意代碼的智能合約,EOS超級節點將會執行這個惡意合約,並觸發其中的安全漏洞。攻擊者再利用超級節點將惡意合約打包進新的區塊,進而導致網路中所有全節點被遠程控制。

而這個漏洞造成的原因僅僅是一行代碼的問題。但是在網路安全上,漏洞不看原因,只看結果。

今年四月的BeautyChain也是因為智能合約出現重大漏洞,BEC憑空蒸發了10億美元,最後價值幾乎歸零。最後發現也只是一行代碼的事情,然後就造成了如此嚴重的黑客盜取事故。

那麼,如何避免這種問題呢?

代碼一定要測試!代碼一定要review!代碼審計!智能合約安全審計了解一下!


歡迎訪問我們:

區塊鏈行業安全解決方案

知道創宇雲安全


區塊鏈技術雖然現在很火,但是出現這樣的漏洞確實是不應該,要不是360發現了漏洞並且及時修復,這個真的是一場災難。


首先找bug輪的到360?這種bug過下coverity肯定全出來了。

cardano用Haskell,類型檢查更嚴格,理論上更安全了,但是你總可以用一些黑科技繞開語言的限制。

我不看好cardano,扯上Haskell,開發者就少了,avoid success at all cost不是亂說的。


幸虧360能夠提前發現漏洞並且給出解決方案,要不然又會是個悲劇。


推薦閱讀:

EOS安全漏洞事件始末~
OTCBTC 關於EOS分叉幣與空投糖果的公告(附評論)
看,在EOS上空翱翔的黑天鵝!
【熱搜熱說】 EOS主網臨近啟動,將有什麼大事會發生?柚粉要注意什麼?

TAG:奇虎360 | 比特幣Bitcoin | 區塊鏈Blockchain | 數字化貨幣 | EOS |