智慧合約安全性

chainpip發表於2022-08-12

以太坊智慧合約是極為靈活的。它能夠儲存超過非常大量的虛擬貨幣(超過十億美元),並且根據先前部署的智慧合約執行不可修改的程式碼。 雖然這創造了一個充滿活力和創造性的生態系統,但其中包含的無信任、相互關聯的智慧合約,也吸引了攻擊者利用智慧合約中的漏洞和以太坊中的未知錯誤來賺取利潤。 智慧合約程式碼通常無法修改來修復安全漏洞,因此從智慧合約中被盜竊的資產是無法收回的,且被盜資產極難追蹤。 由於智慧合約問題而被盜取或丟失的價值總額很容易超過 10 億美元。 

 

稽核不是完美的解決方案

幾年前,用於編寫、編譯、測試和部署智慧合約的工具還非常不成熟,許多專案被隨意地編寫 Solidity 程式碼,並將其交給審查員,審查員將審查程式碼以確保其安全並按預期執行。 在 2020 年,編寫 Solidity 程式碼的開發過程和工具得到了顯著改善,不僅可以確保專案更易於管理,而且能夠組成專案安全性的一部分。僅僅在專案結束時對您的智慧合約進行審計已經不足以成為專案的唯一安全考慮。 安全性來源於適當的設計和開發過程,所以在您編寫第一行智慧合約程式碼之前,安全性就應該被考慮。

智慧合約開發過程

最低安全限度:

  • 所有程式碼應該被存在於一個版本控制系統當中,例如 git
  • 所有的程式碼修改都應該透過拉取請求來進行
  • 所有的拉取請求都應該有至少一個稽核員。 如果這是一個個人專案,請考慮尋找另一位個人作者和一個交易程式碼稽核員。
  • 使用開發以太坊環境(請參閱:Truffle),只需一個命令就可以編譯、部署和執行一套針對您的程式碼的測試
  • 已經透過 Mythril Sliter 等基本程式碼分析工具執行了程式碼,最好是在合併每個拉取請求之前,比較輸出中的差異。
  • Solidity 程式碼編輯器不會發出任何警告
  • 您的程式碼有據可查

上面的這些條目是編寫智慧合約的一個良好的開始,但是在編寫程式碼過程中還有很多要值得注意。 關於更多條目及其詳細解釋,請參閱DeFiSafety 提供的過程質量檢查清單 DeFiSafete 對專案的安全評級等級的一部分包括該專案是否遵守了質量檢查表。 遵循這些稽核過程:

  • 透過可復現的自動化測試,產生更安全的程式碼
  • 審查員將能夠更有效地審查您的專案
  • 對新開發者友好
  • 允許開發者快速迭代、測試並在修改時獲得反饋
  • 回滾程式碼的可能性較低

漏洞攻擊

既然您正在使用高效的開發過程編寫 Solidity 程式碼,那麼讓我們看看一些常見的 Solidity 漏洞問題。

重入攻擊

重入攻擊時在編寫智慧合約程式碼時應該考慮的最大且最重要的安全問題。 雖然以太坊虛擬機器不能同時執行多個合約,一個合約可以呼叫另一個合約來暫停一個合約的執行和記憶體狀態,直到被重新呼叫。這時,程式碼將會繼續被正常執行。 暫停和重新啟動的過程可能會造成一種被稱為“重入攻擊”的漏洞。

其他攻擊

除了上面的重入攻擊,智慧合約還會收到許多其他型別的攻擊需要注意,例如:

安全工具

 

雖然瞭解以太坊安全基礎知識和聘請專業審計公司審查您的程式碼是無可替代的,但在合約編寫的過程中學會使用安全工具,能幫助你更有效率的發現和改正程式碼中出現的錯誤和漏洞。

 

Slither

Slither是分析程式碼和報告問題的實用工具。 每個人都有一個 [commercial] 託管版本,但也可以免費在本地執行。像所有自動化測試工具一樣,Slither 並不完美,它在報告一側出現了太多錯誤。 即使在不存在可開發的脆弱性的情況下,它也可以就潛在的重返提出警告。 在程式碼更改之間在 Slither 輸出中檢視 DIFERENER 常常非常有啟發性,可以幫助發現比等待您的專案程式碼完成早得多的漏洞。

 

Mythril

Mythril EVM 位元組碼的安全分析工具。它檢測為以太坊、HederaQuorumVechainRoostockTron 和其他與 EVM 相容的區塊鏈構建的智慧合約中的安全漏洞。它使用符號執行、SMT 解決和汙點分析來檢測各種安全漏洞。它還在MythX安全分析平臺中使用(與其他工具和技術結合使用)。

 

小結

隨著區塊鏈技術的不斷髮展,智慧合約關於安全性的解決方案也越來越完善和多樣,但我們也應該做好預防措施去避免漏洞:

 

使用開放的資源與社群接受的庫合約的實質標準 (de facto standards),例如 Open Zeppelins contracts

使用推薦的模式與最優操作指導手冊,例如 Consensys 提供的。

l 考慮由信譽好的供應商稽核您的智慧合約。

 

相關文章