03.04 以太坊的智能合約和錢包連續被黑客攻擊,該如何保資金安全?


智能合約本質是計算機程序,計算機程序就是代碼,只要是代碼就會大概率出現漏洞。


來看幾個案例,4月22日美圖合約漏洞導致價值歸零,4月24日SMT智能合約類似的漏洞被黑客利用。這是一個很嚴重的問題,因為普通代碼的問題,可能丟失數據、可能造成崩潰,但智能合約的漏洞被利用,造成的是最直接的經濟損失。



今年年初,我們看到新加波科研工作者對以太坊上的智能合約做了細緻分析,主要是對漏洞進行分析,設計了合約漏洞的形式化驗證方法,設計了合約漏洞的檢測工具,並在Github上開源。


按照它的分析,大致分成三類:一是貪婪型,有進無出型,相當於以太幣鎖定在合約上,永遠無法取出;二是揮霍型,任何人都可以得到合約中的以太幣;三是自殺型,任何用戶都可以終止該合約。


研究人員對幾萬個合約進行了分析,實驗結果顯示69%的合約存在問題,最大99%都存在問題。就是一小段代碼,框出來了,如果用安全加值就不會溢出。但是開發者沒有正確採用,它用了一個簡單的沒有考慮它可能會有溢出的可能,帶來了問題,導致後門被利用,漏洞被利用帶來了很大的危害。這就是重入攻擊,類似還有重放攻擊、短地址攻擊。


這個問題我們必須得解決,其實有這樣一些可能的思路,可以將合約安全性問題得到顯著改善:首先是檢測,檢測包括靜態形式化檢查和驗證機制、動態分析以及模糊測試技術。還有一個思路是對整個鏈的設計,從新的角度考慮,功能分層,包括對操作系統分裝,這兩種角度可以同時發力,共同努力讓代碼質量有一個提升。


來具體談談檢測技術,這個技術在智能合約裡有廣泛的應用前景,叫CFI,最早在CCS2005提出,並被廣泛應用於安全漏洞分析理論研究之中。前面文章我們發現的一些漏洞是由於底層EVM自身執行機制的問題導致代碼的非正常跳轉,其實CFI可以防止這種重入的發生。CFI 核心思想是限制程序運行中的控制轉移,使之始終處於原有的控制流圖所限定的範圍內。


最後再來看一些常見的測試,比如模糊測試,通過對目標系統提供非預期的輸入,不正常的輸入看輸出是不是有問題,有的時候靠異常的輸入來考驗程序。在這種情況下,模糊測試是比較好的手段,針對智能合約可以有另外模糊系統,在另外層面完成合約執行,提高效率,分析結果看會不會發現隱藏的漏洞。



剛才講代碼層的措施,從整個鏈的設計角度,看是否可以對安全性有所增強。這裡面主要提出了鏈結構分層,底層區塊鏈就做關鍵數據存儲和研究,其他複雜業務在鏈外進行操作。


從這些分層結構,我們可以得到一些啟發:首先鏈上的合約邏輯複雜性會大大降低,鏈上的代碼本身不會特別的複雜,代碼越簡單出現漏洞可能性越小,因為漏洞往往都是很複雜的流程,把複雜過程放到鏈下處理,關鍵數據存儲再用鏈上合約,這是一個我們能想象到的,從結構的角度來解決安全性的問題。


我最近比較關注一個叫Elastos的項目,它做區塊鏈的操作系統,我覺得這個想法對於安全性有幫助,要基於區塊鏈,基於Elastos創造一個未來安全互聯網,這是一個小夢想,當然很難,但是從架構設計上還是有一點啟發,把操作系統對於應用訪問做了一個分裝,所有的應用不能直接訪問網絡資源,保證分裝這一層安全性,這樣應用對於網絡不透明瞭,應用操作系統提供了訪問機制,這也是一種新的思路。


分享到:


相關文章: