KeyFrame內部研究專用

Going Beyond 100% Coverage

DeFi Security Summit - DSS·11月23日週日·20 min英文

三句話摘要

DeFi 智能合約安全審計中,如何超越 100% 程式碼覆蓋率來找出模糊測試仍會遺漏的漏洞。 100% 覆蓋率是起點而非終點,真正的安全性來自於將隱含程式行、約束行為、重入狀態與元屬性一一納入測試範疇,讓模糊測試器的感知維度超越程式碼路徑本身。 覆蓋率是指標但不是終點:程式碼覆蓋率(行覆蓋、分支覆蓋)目前是衡量測試進度最好的指標,但它對 Bug 天生不敏感——即使象徵性地窮舉所有輸入組合,仍可能遺漏漏洞,因為 Bug 是數學屬性,不是路徑屬性。

重點整理

重點
  • 1

    覆蓋率是指標但不是終點:程式碼覆蓋率(行覆蓋、分支覆蓋)目前是衡量測試進度最好的指標,但它對 Bug 天生不敏感——即使象徵性地窮舉所有輸入組合,仍可能遺漏漏洞,因為 Bug 是數學屬性,不是路徑屬性。

  • 2

    隱含程式行是盲點:Solidity 程式碼有大量編譯器自動插入的隱含邏輯,例如 `msg.value` 的帳戶餘額扣減、整數截斷的 mask 操作,現有覆蓋率工具完全看不到這些行,而這些正是溢位和資金計算類漏洞的溫床。

  • 3

    萬用符號(星號)呼叫讓覆蓋率爆炸:合約中的任意外部呼叫(arbitrary `call`)理論上需覆蓋無限狀態空間,最佳解法是將整合地址硬編碼,以縮小必須覆蓋的範圍,這也是預編譯旁路(precompile bypass)漏洞的常見成因。

  • 4

    元屬性賦予覆蓋率敏感性:透過描述系統狀態關係的元屬性(如 vault 中 shares 與 assets 的比例),模糊測試器能感知到兩個變數之間的極端差距,講者藉此在 Mark Oracle 審計中發現了 5000 萬倍的價格操縱漏洞。

實用技巧與重點

乾貨
  • 防止金額:今年阻止以太坊主網 2000 萬美元被盜
  • 賞金收入:研究員時期累計約 50 萬美元賞金與競賽獎金
  • 覆蓋率類別三種:不可回滾覆蓋類、回滾覆蓋類、斷言破壞覆蓋類
  • 學術對應名稱:Extended EPA(Extended Enabling Preservation Abstraction)、MC/DC(Modified Condition/Decision Coverage,NASA 用於軟體測試)
  • 工具名稱:內部工具「Linearity」用於視覺化覆蓋路徑
  • 隱含行範例:`msg.value` 傳遞時背後的餘額扣減節點、`uint88` 截斷時編譯器插入的 mask
  • 漏洞案例:Liquidity v2 審計中,批量 debt 與批量 shares 的比率截斷,造成可免費借款的漏洞
  • 元屬性應用:Oracle 模糊測試加入價格操縱屬性後發現 5000 萬倍價格偏差
  • 參考資料:講者 GitHub 開源筆記庫(持續更新)、前一日演講在 DSS YouTube 頻道
  • 隱含狀態解法:向合約插入布林標誌模擬重入狀態,測試不同狀態下 withdraw 的行為差異

結論

結論

100% 覆蓋率是起點而非終點,真正的安全性來自於將隱含程式行、約束行為、重入狀態與元屬性一一納入測試範疇,讓模糊測試器的感知維度超越程式碼路徑本身。

完整解析

詳細

Alex 是一位專注於 EVM DeFi 有狀態模糊測試的審計公司創辦人,今年因為在以太坊主網發現重大漏洞而阻止了 2000 萬美元被盜。他這場演講的核心問題是:為什麼即使模糊測試器達到了 100% 程式碼覆蓋率,我們仍然會遺漏漏洞?

他首先建立「覆蓋率類別」的框架,將覆蓋率依據結果分為三類:不可回滾類(用於探索狀態組合)、回滾類(用於識別 DoS 攻擊面),以及斷言破壞類(不變性測試的核心目標)。這個框架呼應了學術文獻中的 Extended EPA 和 NASA 所採用的 MC/DC 概念。他並展示了內部視覺化工具「Linearity」,以 Liquid Governance 合約為例,說明如何看見各條執行路徑。但他強調,這套框架的目的是揭示一個根本問題:程式碼覆蓋率是衡量進度的最佳代理指標,卻對 Bug 天生不敏感——就像徒步只顧著完成路線,卻錯過路邊所有蘑菇。

為了解決這個問題,Alex 提出擴展覆蓋率定義的五個新維度。第一是隱含程式行:Solidity 編譯器會自動插入程式碼,例如 `msg.value` 轉帳背後的節點餘額操作、整數截斷時的 mask 指令,這些行存在於執行中卻不出現在原始碼覆蓋率報告裡。如果工具能夠測量這些隱含行,就能捕捉到一大類溢位與資金計算漏洞。第二是約束行為:使用萬用符號(`*`)進行任意外部呼叫,理論上需要覆蓋無限的合約組合,最佳解是將整合地址硬編碼,讓覆蓋範圍可量化。預編譯旁路(precompile bypass)漏洞正是典型的約束缺失案例,一個簽名方案沒有考慮預編譯會返回 true,導致任何地址都能通過驗證。

第三是隱含狀態,以重入攻擊(reentrancy)為例:合約在被重入時處於一種沒有任何 storage 變數能描述的特殊執行狀態,與正常執行語義截然不同。Alex 的解法是在概念上為合約插入布林標誌,測試同一個 `withdraw` 在不同布林標誌下的行為差異,以此捕捉重入類漏洞的覆蓋缺口。第四是元屬性:透過描述系統中兩個變數之間關係的屬性(例如 vault 中 shares 對 assets 的比值),模糊測試器可以感知到覆蓋率本身看不見的「極端狀態」。他昨日在現場示範中,透過加入價格操縱元屬性對 Oracle 進行模糊測試,發現了 5000 萬倍的價格偏差漏洞。第五是世界分裂:整數不是群而是環,EVM 的整數截斷行為與人類直覺中的線性數學不同,正是 Liquidity v2 審計中,批量 debt 與 shares 比率的截斷讓他找到了免費借款漏洞的突破口。

Alex 最後總結:覆蓋率的真正價值不在數字本身,而在於驅動測試套件切入更多面向——隱含行、約束、隱含狀態、元屬性——每一個新維度都是減少遺漏 Bug 機率的機會,而非追求一個永遠無法真正代表安全性的百分比。

關鍵時刻

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