a16z:給Web3項目的智能合約安全指南
本文來自 a16zcrypto本文來自

本文來自
本文來自。
,原文作者:Andy Beal、Nassim Eddequiouaq、Riyaz Faizullabhoy & Christian Seifert,由Odaily 譯者Katie 辜編譯。
通常,黑客會發現並利用軟件開發整個流程鏈條(從設計到部署再到維護)中的缺陷,從而打破區塊鏈項目的安全屏障。如果能夠提前了解到相關經驗,我相信安全事故會少很多。
本文概述了Web3 開發人員和安全團隊在設計、開發並維護智能合約時必須考慮的安全要素,覆蓋了從威脅建模到應急響應準備的整個週期
開發一款安全的軟件包括以下五個階段:
設計:開發人員描述系統所需的功能和操作,包括重要的基準和固定屬性;
開發:開發人員編寫系統代碼;
測試和評審:開發人員將所有模塊聚集在一個測試環境中,並評估它們的正確性、規模和其他因素;

部署:開發人員將系統投入生產;
上面描述的軟件生命週期步驟和相應的安全考慮為促進智能合約安全性提供了基礎。下面將從三個問題出發,進行更詳細的研究。
二級標題
二級標題
二級標題
1. 設計階段的智能合約安全考慮——考慮威脅建模和安全設計在設計系統時要有“攻擊者”的心態,並預先假定任何個人、機器或服務都有可能受到攻擊的情況。
二級標題
二級標題二級標題
2. 發展階段的安全考慮——管理考慮和訪問控制
方法:建立多重簽名錢包或DAO 合約,以透明的方式代表社區管理變更。變更應該經過徹底的審查過程,並設置一個時間鎖定(故意推遲規定的製定並具有取消的能力),以確保在治理攻擊的情況下可以驗證其正確性並回滾(rolled-back)。確保在自行保管錢包或安全保管服務中可安全存儲和訪問特權密鑰。
二級標題
二級標題
二級標題
3. 考慮可重複使用的、經過實戰測試的模板和集成了解你的風險敞口,監控供應鏈攻擊。使用官方接口調用外部協議,並確保考慮到潛在的集成風險。監控重複使用的合約的更新和安全披露。
二級標題
二級標題
4. 測試和評審階段的安全性考慮——考慮測試和文檔原因:內容:創建清晰、全面的代碼文檔,並建立一個快速、徹底、易於運行的測試套件。在允許的情況下,在測試網或通過主網模擬建立測試環境,進行更深入的實驗。
方法:實施已知的測試框架和安全檢查器,如Hardhat、Mythril、Slither、Truffle 等,它們提供不同的測試技術,如模糊化、屬性檢查,甚至正式驗證。使用NatSpeccomments 大範圍記錄代碼,從而指定預期的副作用、參數和返回值。使用文檔生成工具以及高級設計說明生成實時文檔。
二級標題
二級標題
二級標題5. 考慮內部審查和安全審計
內容:花時間通過內部和外部代碼檢查來發現漏洞。
請查看ConsenSys、Nassent、OpenZeppelin 和Trail of Bits 的指南,這些指南為開發人員提供了考慮事項清單,包括時間安排,供任何準備審計的人參考。還要確保檢查部署交易,確保它們使用經審核的代碼版本並具有適當的參數,特別是在升級軟件時。
二級標題
二級標題
二級標題
6. 部署和維護階段的安全考慮——激勵白帽社區參與
注:文中的一些作者在Forta 公司工作,該公司擁有一個網絡,為去中心化創建高質量安全監控機器人提供了一個代幣化激勵結構。開發團隊可以鼓勵他們的協議社區利用傳統和Web3 原生的兩種方法來激勵漏洞獎勵,並通過增強安全性來讓參與者潛在地獲利,實現雙贏。
二級標題
二級標題
二級標題
方法:使用監控平台或分佈式節點運行機器人,實時監控智能合約事件。根據需要為開發團隊和更廣泛的社區插入數據儀表板和警報通知。
二級標題
二級標題
二級標題
8. 意外和緊急情況響應操作的安全考慮
內容:使用能夠在發生任何安全問題時立即做出響應的工具和流程。原因:即使有最好的部署前保障措施,智能合約和關鍵組件(如預言機和跨鏈橋)仍有可能出現實時問題。配備專門的人員、清晰的流程和適當的自動化設備,確保可以快速調查事件,並儘快解決。
方法:為最壞的情況做準備,計劃如何應對事件或緊急情況,並在最大程度上自動化響應能力。包括分配調查和響應的責任,這些人員可以通過分佈式安全郵件列表、代碼存儲庫中的指示或智能合約註冊表就安全問題公開聯繫。根據協議的威脅模型,開發一組流程,其中可以包括場景演練和採取緊急行動所需的預期響應時間,可以考慮將自動化集成到緊急事件響應中。


