微信輔助網(wǎng)站制作論壇排名
智能合約安全審計的意義
智能合約審計用于整個 DeFi 生態(tài)系統(tǒng),通過對協(xié)議代碼的深入審查,可以幫助解決識別錯誤、低效代碼以及這些問題。智能合約具有不可篡改的特點,這使得審計成為任何區(qū)塊鏈項目安全流程的關鍵部分。
代碼審計對任何應用程序都很重要,但它們對去中心化應用程序 (dApp) 尤其重要,因為它們建立在其之上的區(qū)塊鏈是不可變的。如果代碼漏洞導致用戶資金丟失,這些資金將無法找回。迄今為止,DeFi中的黑客已經(jīng)損失了超過 50 億美元。
智能合約審計包括對一個協(xié)議的智能合約代碼進行詳細分析,以識別安全漏洞、不良的編碼實現(xiàn)方式和低效代碼,然后再提出解決這些問題的解決方案。審計有助于確保跨 Web3 的去中心化應用程序的安全性、可靠性和性能。
智能合約代碼最終將部署到 Avalanche、BNB Chain 或 Ethereum 等區(qū)塊鏈中。一旦合約生效,任何人都可以訪問它們——從終端用戶到惡意攻擊者——這就是為什么在啟動或更新去中心化應用程序之前必須解決所有漏洞。
審計完成后,審計師會發(fā)布一份摘要報告,其中提供有關審計結(jié)果、解決方法和任何其他問題的詳細信息,以及未來解決現(xiàn)存問題的路線圖。經(jīng)過全面的智能合約審計后,項目可以放心地部署他們的合約,因為應用程序的安全性有了保證,用戶資金也受到保護。
被審計的項目必須先凍結(jié)代碼,并向?qū)徲媶T提供技術(shù)文檔,包括代碼庫、白皮書、架構(gòu)和任何其他相關材料。該文檔應該為審計員提供有關代碼旨在實現(xiàn)的目標、范圍和具體實施的詳細指南。
安全專家團隊仔細檢查每一行代碼,找出錯誤和漏洞。雖然自動化測試可以很好地識別代碼中的錯誤,但人類工程師更有能力檢測合約邏輯或架構(gòu)的問題、技術(shù)上正確且通過自動化測試的不良編碼實現(xiàn)、gas 優(yōu)化以及常見攻擊點(比如說搶先交易)
BscScan中某代幣的智能合約如下:
常見漏洞類型
以下是當前智能合約審計清單的一部分的常見漏洞。
重新輸入問題
當智能合約函數(shù)被不受信任的外部合約調(diào)用時,可能會發(fā)生重入攻擊。重入攻擊中,使該外部合約能夠通過遞歸調(diào)用原始合約來耗盡用戶資金或進行其他惡意操作。
整數(shù)上溢和下溢
當智能合約執(zhí)行算術(shù)運算輸出超過當前存儲容量的數(shù)字時,可能會發(fā)生整數(shù)溢出或下溢,從而導致計算錯誤。
搶先交易機會
設計不合理的代碼可能會泄露有關dApp尚未發(fā)生的交易信息,其他用戶可以先運行這些信息,以犧牲協(xié)議為代價換取鎖定利潤。
重放攻擊
當數(shù)據(jù)出現(xiàn)故障延遲或重復時,就會發(fā)生重播攻擊,尤其是在硬分叉事件期間,攻擊者可以使用新的系統(tǒng)上的消息從遺留系統(tǒng)中提取資金。
隨機數(shù)漏洞
如果dApp使用公開的數(shù)字(例如塊哈希)來播種隨機數(shù),則它很容易被利用,這就是為什么許多協(xié)議使用Chainlink VRF來實現(xiàn)隨機性。
函數(shù)可見性錯誤
打算私有的函數(shù)必須定義為私有的,因為Solidity中的默認可見性屬性是公共的。如果是公開的,任何人都可以調(diào)用該函數(shù)。
中心化風險
中心化機制有單點故障的問題,如果單個私鑰或類似密鑰被泄露,可能會破壞協(xié)議的安全性。時間鎖和授予 DAO 特權(quán)是處理中心化風險的常用技術(shù)。
未鎖定編譯器版本
Solidity有許多編譯器版本。dApps應該鎖定他們使用的編譯器版本,這樣用戶就不能用不同的版本編譯它,否則這可能會導致不同的字節(jié)碼和意想不到的問題。
智能合約安全審計工具
流行的智能合約安全審計工具包括:
Echidna – 一個 Haskell 程序,專為模糊測試的以太坊智能合約而設計。
Ethlint — 分析Solidity代碼的風格和安全問題并幫助解決這些問題。
Mythril – EVM字節(jié)碼安全分析工具,使用符號執(zhí)行(symbolic execution)、SMT求解(SMT solving)和污點分析(taint analysis)來檢測各種安全漏洞。
MythX – 自動掃描以太坊和其他基于EVM的區(qū)塊鏈智能合約中的安全漏洞。
Rattle — 一個使用流敏感分析(flow-sensitive analysis)的EVM二進制靜態(tài)分析框架。
Slither – 針對安全漏洞和最佳實踐對Solidity源代碼進行靜態(tài)分析。
Solgraph — 生成一個DOT圖,可視化功能控制流并顯示潛在的安全漏洞。
Scribble – 規(guī)范語言和運行時驗證工具,可將高級規(guī)范轉(zhuǎn)換為Solidity代碼。