KeyFrame內部研究專用

Enhancing Test Coverage: A Framework for Effective Protocol Security | Dmitry Zakharov (MixBytes)

DeFi Security Summit - DSS·12月18日週三·18 min英文

三句話摘要

編寫安全測試的三維思維框架:用黑客思維、形式驗證思維和系統架構師思維補足100%代碼覆蓋率的不足。 編寫安全的智能合約測試不能只依賴覆蓋率指標,必須以黑客思維、形式驗證思維和系統架構師思維三個層次來設計測試場景,才能有效捕獲嚴重的安全漏洞。 100% 覆蓋率的陷阱:代碼覆蓋率只確保執行路徑被測試,但無法捕捉邏輯漏洞、邊界情況或惡意攻擊路徑,因此必須基於覆蓋率之上加入專門的安全思維方式。

重點整理

重點
  • 1

    100% 覆蓋率的陷阱:代碼覆蓋率只確保執行路徑被測試,但無法捕捉邏輯漏洞、邊界情況或惡意攻擊路徑,因此必須基於覆蓋率之上加入專門的安全思維方式。

  • 2

    黑客思維的核心:停止思考代碼「應該如何工作」,轉而思考「不應該如何工作」,通過問四個關鍵問題(誰不應該有權限?調用順序和頻率有何限制?輸入參數如何受限?哪些參數不能由用戶控制)來識別權限漏洞、重入攻擊、溢出問題。

  • 3

    形式驗證思維:從編寫規範開始,識別協議的不變性(invariant),如「輸出代幣數不超過合約餘額」、「托管變量值等於實際余額」,再通過 Fuzz 測試或形式驗證工具確保系統始終符合這些不變性。

  • 4

    系統架構師思維:假設所有外部集成都可能失敗(預言機、跨鏈橋、外部協議升級),提前為每個依賴項設計模擬失敗場景,測試協議在服務故障時的反應。

實用技巧與重點

乾貨
  • Mix Bites 背景:自 2017 年起,60 多家客戶,250+ 審計案例
  • 測試覆蓋率目標:至少 80-90%,包含所有單元測試和集成測試
  • 黑客思維的四個問題
  • 協議有哪些不應該對普通用戶開放的用例?
  • 用戶調用函數的順序和頻率有哪些限制?
  • 應該對輸入參數施加哪些限制?
  • 哪些參數不能由用戶控制?
  • 形式驗證不變性示例
  • 輸出代幣數 ≤ 合約余額(適用於 Uniswap V4)
  • 托管變量值 ≤ 實際合約代幣余額
  • 系統架構師思維的外部風險:預言機停止更新、鏈下服務時間單位錯誤(毫秒 vs 秒)、跨鏈橋傳輸失敗、集成協議升級
  • 建議工具:狀態機圖、Fuzz 測試(相比形式驗證更快但不保證完整性)、模擬工具(用於測試鏈下服務故障)
  • 測試清單:建立可復用的測試場景清單,用於新版本開發

結論

結論

編寫安全的智能合約測試不能只依賴覆蓋率指標,必須以黑客思維、形式驗證思維和系統架構師思維三個層次來設計測試場景,才能有效捕獲嚴重的安全漏洞。

完整解析

詳細

在 Web3 安全審計的實踐中,簡單的代碼覆蓋率指標往往給人虛假的安全感。Mix Bites 的 Dimitri 基於多年 250+ 審計案例,提出了一個系統性的框架來解決這個問題。他強調,編寫全面的安全測試需要三種截然不同的思維方式,而不是單純地追求測試覆蓋的百分比。

黑客思維的本質是轉變視角:不再作為按規範設計的開發者思考,而是作為想要破壞協議的攻擊者思考。這要求開發者問出四個關鍵問題。首先,識別權限漏洞——某些函數是否真的應該只由特定角色(如授權的 RO 或鏈下服務)調用?其次,檢查調用序列和頻率限制,以捕獲重入攻擊(reentrancy)或過度使用的風險。第三,檢驗輸入參數的邊界——比如一個接受 256 位整數但內部轉換為 8 位的函數,如果沒有限制最大值就會被利用。最後,識別哪些參數不應該由用戶控制,而應該由常量或管理員白名單控制。

形式驗證思維則完全不同。它要求從詳細的規範開始,明確協議在任何狀態下必須滿足的不變性。例如,在 Uniswap V4 這樣的交換合約中,輸出代幣數必須不超過合約余額;在接受用戶存款的協議中,內部托管變量應該等於實際合約余額。通過 Fuzz 測試或正式驗證工具持續驗證這些不變性,即使代碼在演變,協議的核心承諾也始終被保護。

系統架構師思維則關注整個系統生態。它假設所有外部集成都會在某個時刻失敗:預言機可能停止更新價格(Luna 危機)、鏈下服務可能引入錯誤(時間單位混淆)、跨鏈橋可能中斷、集成的協議可能升級並改變獎勵分配。開發者應該提前為每個外部依賴編寫模擬失敗的測試場景,確保協議能夠優雅地降級或回復。

實踐層面,Dimitri 建議先實現 80-90% 的代碼覆蓋率,確保基本功能正確,然後應用這三種思維方式的問卷逐層深化安全層。建立一份可復用的測試清單特別有價值——每當開發新版本時,這份清單可以快速確保所有已知的攻擊向量都被重新覆蓋。需要注意的是,並非所有思維方式都必須應用;例如,沒有外部集成的協議可以跳過系統架構師思維。但根據 Dimitri 的經驗,幾乎所有生產級協議都有外部依賴,因此三種思維方式通常都是必需的。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web3 安全」的內容

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️
8 min
Web3 安全英文8月14日

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️

Zach Humphries

  • 機構支撐的積極意義:價格操縱常被視為負面,但Ripple掌握大量XRP供應與escrow,在熊市期間提高價格下限,實際上替零售投資者鎖定了低風險的積累區間,這不是剝削而是市場穩定機制。
  • 歷史模式驗證:2024年7月至11月XRP在50美分附近橫盤整理,低點觸及42美分(wick),高點65美分;隨後11月5日至12月5日單月上漲456%,年底到2025年初累計漲幅534%,這個歷史周期正在1美元價位重演。
  • 比特幣聯動邏輯:講者在4-5月就預測「如果比特幣跌至60k以下,XRP會跌至1美元或更低」,此預測精準應驗,反映出熊市中兩者的明確連動關係。
Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady
72 min
Web3 安全英文PODCAST8月5日

Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady

Zero Knowledge

  • 反向 Linux 架構:Commonware 刻意暴露棧各層級控制,讓開發者自訂執行環境、共識機制、密碼學實現,而非像 Cosmos SDK 只允許應用層以上定制。2-3 個月能組裝一條定製鏈,代價是額外深度但回報是長期維護成本降低及效能優化彈性。
  • 容錯假設的典範轉移:Alpine Glow(Solana 2025)實現單輪投票定終的關鍵是將容錯預算分離為獨立的 Byzantine 和 Crash 容限。傳統系統把 33% 當一個整體預算;新模型允許 20% 惡意加 20% 崩潰,打破了 PBFT 理論界線,釋放單輪設計空間。
  • Minimet 與 Multimet 的遞進:Minimet 是 5F+1 設定下的乾淨構造,實現更短視圖延遲;Multimet(剛發布)進一步允許並行 mini-commits 且驗證者可推翻領導者審查,使用者交易在全球分布式網路達到 200-300 毫秒端到端定終。
Private Information Retrieval (PIR) with Alex Hoover
64 min
Web3 安全英文PODCAST7月29日

Private Information Retrieval (PIR) with Alex Hoover

Zero Knowledge

  • PIR 保護的是訪問模式,不是資料本身
  • PIR 與加密不同,它關注的是隱藏「客戶端查詢了什麼」,而非「資料是否加密」。在公開資料庫(如區塊鏈)上,客戶端可以在不洩露查詢對象給伺服器的情況下檢索特定條目,解決了輕量級客戶端的隱私和防審查問題。
  • 客戶端預處理方案是突破瓶頸的關鍵