區塊鏈裡的智慧型合約安全

2022-09-01 11:09:10 字數 1420 閱讀 5749

在我寫這遍文章的時候,距離eos曝出漏洞已經有三天時間,區塊鏈行業熱點來的快去的也快,每每出現安全相關問題,都會給整個行業帶來**。自從我開始關注區塊鏈行業以來,安全事故有增無減,交易平台、智慧型合約、共識機制等等都成了安全事故的中心。

智慧型合約本質是一段執行在區塊鏈網路中的**,它完成使用者所賦予的業務邏輯。通俗的來說,相當於是乙個「不可改變」且「公正」的「中間人」。舉乙個例子,我跟你打乙個賭,如果明天下雨,算我贏,如果明天沒下雨,就是你贏了。然後我們在打賭的時候就把錢放進乙個智慧型合約控制的賬戶內,第二天過去了,賭博的結果出來了以後,智慧型合約就可以根據收到的指令自動判斷輸贏,並進行轉賬。這個過程是高效,透明的執行過程,不需要公正等第三方介入。

比如我們熟悉的以太坊,它的智慧型合約業務邏輯就是代幣發幣和交易。以太坊在設計之初,將智慧型合約設計成了一旦部署就不能修改的模式。這種設計是為了提高智慧型合約的可信性。但是只要是人編寫的程式,不可避免的就會產生漏洞。所以,當有漏洞出現時,想要再挽回損失就很大了。

前面講到,智慧型合約本質就是一段**,並且發布之後不可修改。若在發布之後發現了嚴重的漏洞,就只能重新部署新的合約,這對廠商來說代價太大了。那麼要想這段保證**的安全,就一定要在發布之前對智慧型合約進行**審計。除開需要第三方的**審計之外,團隊在開發的過程中,也是有方法可以用來提高智慧型合約的安全。

1.  **一定要測試!

2.  **一定要review!

不要看小看這簡單的兩點,絕大多數的**問題都能在這個過程中發現。下面我將白帽安全研究院給出的如何避免開發業務層**安全問題放在下面。有需要的可以一一對應對自己的**做乙個審核。

1.   盡量避免外部呼叫


2.   仔細權衡再發生重要操作時的**邏輯,避免邏輯陷阱

3.   處理外部呼叫錯誤


4.   不要假設你知道外部呼叫的控制流程


5.   標記不受信任的業務內容


6.   正確的使用斷言


7.   小心整數除法的四捨五入


8.   不要假設業務建立時餘額為零

9.   記住鏈上的資料是公開的


10.  在雙方或多方參與的業務應用中,參與者可能會「離線離線」後不再返回

11.  明確標明函式和狀態變數的可見性

12.  將程式鎖定到特定的編譯器版本

13.  小心分母為零


14.  區分函式和事件


15.  避免死迴圈


16.  公升級有問題的業務層**

1. 函式可見性審核

2. 合約限制繞過審核

3. 呼叫棧耗盡審核

4. 拒絕服務審核

通過這四點的審核,至少能把隱私洩露、交易溢位與異常、合約故障和拒絕服務的問題解決。大大減少智慧型合約帶來的安全風險。

本文只是對智慧型合約和智慧型合約審計做了乙個非常淺薄的分析。並且區塊鏈行業安全問題牽扯到了方方面面。智慧型合約只是裡面的一小部分,後續會繼續寫一些區塊鏈行業其他的安全問題,歡迎一起**。

CS 區塊鏈 智慧型合約

和雲計算相似,占用區塊鏈的資源 不管是簡單的轉賬交易,還是合約的部署和執行 同樣需要付出相應的費用。以太坊上用gas機制來計費,gas也可以認為是乙個工作量單位,智慧型合約越複雜 計算步驟的數量和型別,占用的記憶體等 用來完成執行就需要越多gas。gas 由執行合約的人在提交執行合約請求的時候規定,...

區塊鏈學習筆記 智慧型合約

智慧型合約這個詞首次出現的時間是在1994年由尼克薩博提出的概念。而尼克薩博所提出的智慧型合約的概念是這樣描述 乙個智慧型合約是一套以數字形式定義的約定,包括合約參與方可以在上面執行這些約定的協議。智慧型合約的基本思想是,各種各樣的合約條款可以嵌入到我們使用的硬體和軟體中從而使得攻擊者需要很大的代價...

區塊鏈智慧型合約開發小記

使用 python和 solidity語言,drf框架開發智慧型合約的一些踩坑記錄。compile source和compile standard方法都無法import 檔案進行編譯,提示找不到檔案,使用compile files方法吧。compile files 方法裡面合約路徑不能有冒號,使用相...