以太坊智能合約是極為靈活的,它能夠存盤超過非常大量的虛擬貨幣(超過十億美元),并且根據先前部署的智能合約運行不可修改的代碼, 雖然這創造了一個充滿活力和創造性的生態系統,但其中包含的無信任、相互關聯的智能合約,也吸引了攻擊者利用智能合約中的漏洞和以太坊中的未知錯誤來賺取利潤, 智能合約代碼通常無法修改來修復安全漏洞,因此從智能合約中被盜竊的資產是無法識訓的,且被盜資產極難追蹤, 由于智能合約問題而被盜取或丟失的價值總額很容易超過 10 億美元,
審核不是完美的解決方案
幾年前,用于撰寫、編譯、測驗和部署智能合約的工具還非常不成熟,許多專案被隨意地撰寫 Solidity 代碼,并將其交給審查員,審查員將審查代碼以確保其安全并按預期運行, 在 2020 年,撰寫 Solidity 代碼的開發程序和工具得到了顯著改善,不僅可以確保專案更易于管理,而且能夠組成專案安全性的一部分,僅僅在專案結束時對您的智能合約進行審計已經不足以成為專案的唯一安全考慮, 安全性來源于適當的設計和開發程序,所以在您撰寫第一行智能合約代碼之前,安全性就應該被考慮,
智能合約開發程序
最低安全限度:
- 所有代碼應該被存在于一個版本控制系統當中,例如 git
- 所有的代碼修改都應該通過拉取請求來進行
- 所有的拉取請求都應該有至少一個審核員, 如果這是一個個人專案,請考慮尋找另一位個人作者和一個交易代碼審核員,
- 使用開發以太坊環境(請參閱:Truffle),只需一個命令就可以編譯、部署和運行一套針對您的代碼的測驗
- 已經通過 Mythril 和 Sliter 等基本代碼分析工具運行了代碼,最好是在合并每個拉取請求之前,比較輸出中的差異,
- Solidity 代碼編輯器不會發出任何警告
- 您的代碼有據可查
上面的這些條目是撰寫智能合約的一個良好的開始,但是在撰寫代碼程序中還有很多要值得注意, 關于更多條目及其詳細解釋,請參閱DeFiSafety 提供的程序質量檢查清單, DeFiSafete 對專案的安全評級等級的一部分包括該專案是否遵守了質量檢查表, 遵循這些審核程序:
- 通過可復現的自動化測驗,產生更安全的代碼
- 審查員將能夠更有效地審查您的專案
- 對新開發者友好
- 允許開發者快速迭代、測驗并在修改時獲得反饋
- 回滾代碼的可能性較低
漏洞攻擊
既然您正在使用高效的開發程序撰寫 Solidity 代碼,那么讓我們看看一些常見的 Solidity 漏洞問題,
重入攻擊
重入攻擊時在撰寫智能合約代碼時應該考慮的最大且最重要的安全問題, 雖然以太坊虛擬機不能同時運行多個合約,一個合約可以呼叫另一個合約來暫停一個合約的執行和記憶體狀態,直到被重新呼叫,這時,代碼將會繼續被正常執行, 暫停和重新啟動的程序可能會造成一種被稱為“重入攻擊”的漏洞,
其他攻擊
除了上面的重入攻擊,智能合約還會收到許多其他型別的攻擊需要注意,例如:
- 溢位攻擊
- 自毀攻擊
- delegatecall資料篡改
- 亂數問題
安全工具
雖然了解以太坊安全基礎知識和聘請專業審計公司審查您的代碼是無可替代的,但在合約撰寫的程序中學會使用安全工具,能幫助你更有效率的發現和改正代碼中出現的錯誤和漏洞,
Slither
Slither是分析代碼和報告問題的實用工具, 每個人都有一個 [commercial] 托管版本,但也可以免費在本地運行,像所有自動化測驗工具一樣,Slither 并不完美,它在報告一側出現了太多錯誤, 即使在不存在可開發的脆弱性的情況下,它也可以就潛在的重返提出警告, 在代碼更改之間在 Slither 輸出中查看 DIFERENER 常常非常有啟發性,可以幫助發現比等待您的專案代碼完成早得多的漏洞,
Mythril
Mythril 是 EVM 位元組碼的安全分析工具,它檢測為以太坊、Hedera、Quorum、Vechain、Roostock、Tron 和其他與 EVM 兼容的區塊鏈構建的智能合約中的安全漏洞,它使用符號執行、SMT 解決和污點分析來檢測各種安全漏洞,它還在MythX安全分析平臺中使用(與其他工具和技術結合使用),
小結
隨著區塊鏈技術的不斷發展,智能合約關于安全性的解決方案也越來越完善和多樣,但我們也應該做好預防措施去避免漏洞:
l 使用開放的資源與社區接受的庫合約的實質標準 (de facto standards),例如 Open Zeppelin’s contracts,
l 使用推薦的模式與最優操作指導手冊,例如 Consensys 提供的,
l 考慮由信譽好的供應商審核您的智能合約,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/501715.html
標籤:區塊鏈
