KeyFrame內部研究專用

Smart Contracts Fuzzing: Current Problems and Proposed Solutions

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

三句話摘要

以 LLM 引導的三層模糊測試框架,系統性挖掘智能合約的經濟型漏洞。 將 LLM 靜態分析、CFG 引導狀態池、GPU 平行執行組合成三層框架,是目前最有潛力系統性覆蓋智能合約經濟型漏洞的模糊測試路徑。 漏洞的本質是狀態操控:所有智能合約攻擊最終都是「改變特定儲存槽狀態」再「觸發漏洞函數」,因此模糊測試的核心是找出最優函數序列與輸入參數的組合,兩者缺一不可。

重點整理

重點
  • 1

    漏洞的本質是狀態操控:所有智能合約攻擊最終都是「改變特定儲存槽狀態」再「觸發漏洞函數」,因此模糊測試的核心是找出最優函數序列與輸入參數的組合,兩者缺一不可。

  • 2

    現有工具對複雜類型束手無策:傳統 fuzzer(如 Harvey、libAFL)面對動態元組、動態陣列、calldata 嵌套等 ABI 類型時,參數空間爆炸,且無法推導「呼叫者參數」如何影響「被呼叫者參數」的外部呼叫鏈依賴關係。

  • 3

    LLM 可扮演智能靜態分析器:透過讓 LLM 解析源碼,識別哪條控制流路徑通往潛在漏洞基本塊,再用 assembly 插樁(如 `0x7777F7` 標記)對應到 CFG 的具體節點,讓 fuzzer 知道「要進哪個分支」。

  • 4

    狀態多樣性是覆蓋率的關鍵:引入「狀態池」概念,記錄每次執行後的有趣儲存槽快照;再透過重新執行 callchain 組合不同狀態,生成更多樣的測試起點,解決傳統 fuzzer 只能從初始狀態出發的侷限。

實用技巧與重點

乾貨
  • Core 漏洞:將第一個 action 設為借貸、第二個設為 null(無效 opcode),即可繞過 solvent check,損失 170 萬美元
  • Realt Protocol 漏洞:for 迴圈重複 50–53 次買賣操作推高價格;實際上只需 1–5 次即可偵測到價格操控行為
  • Balancer 漏洞路徑:`batchSwap` → `bestSwap` → 內部 `swap` → pool 合約 `bar` → 觸發 upscale → 舍入誤差(rounding error)
  • Moonbirds Hack 範例:攻擊者以 calldata 作為輸入,解碼後注入惡意地址繞過驗證,資金約在 300k 區塊被提取
  • 距離度量(Distance Metric):操作碼層級比較(如 balance > 1),fuzzer 從 1,000,000 開始,根據與目標值的距離決定增/減方向
  • 工具與方法:Harvey mutator、libAFL、CFG(控制流圖)分析、EVM GPU 平行執行(參考 MU 學術論文)、Echidna / Smartian 狀態快照機制
  • 三層架構:① LLM(T 分析 + 外部呼叫追蹤 + calldata 生成 + 動態執行時資訊)② 狀態模糊測試(CFG 三階段引導 + 狀態池 + 狀態多樣性)③ EVM 轉 GPU 平行代碼執行

結論

結論

將 LLM 靜態分析、CFG 引導狀態池、GPU 平行執行組合成三層框架,是目前最有潛力系統性覆蓋智能合約經濟型漏洞的模糊測試路徑。

完整解析

詳細

智能合約的安全問題長期阻礙加密貨幣大規模普及,講者 Andy Mley 基於此動機創辦安全公司,試圖從根本上解決合約漏洞挖掘的效率問題。他首先將「漏洞利用」重新定義為一個雙層優化問題:第一層是選擇正確的函數序列(例如「存入抵押品 → 清算 → 移除抵押品」),第二層是在確定序列後,找出每個函數的最佳輸入參數。這兩步的組合構成了所謂的「價值提取」,也是所有經濟型漏洞的本質。

為了說明模糊測試為何能找到真實漏洞,講者以三個案例展開論述。Core 協議的漏洞起因於將一個無效操作碼作為 action 陣列的第二個元素,從而繞過了清算者驗證,造成 170 萬美元損失;Realt Protocol 的攻擊者用 50 次迴圈交替買賣來操縱價格,而講者指出實際上只需 1–5 次循環 fuzzer 就能偵測到異常,這體現了「降維」思路;Balancer 的漏洞則深藏在多層內部函數呼叫中,`batchSwap` 最終觸發了 upscale 導致舍入誤差,難點在於如何讓 fuzzer 知道該走這條深層路徑。

現有模糊測試工具的核心痛點在於無法處理複雜的參數類型與依賴關係。動態陣列、動態元組、嵌套 calldata(如 Moonbirds 攻擊中以原始位元組作為輸入再解碼)使參數空間爆炸;跨合約的外部呼叫讓 fuzzer 無法推導「入口函數參數」與「下游被呼叫函數參數」之間的映射關係;代理合約、多地址協議、以及 Uniswap v4 hook 這類動態連接又進一步放大了搜索空間。

針對上述問題,講者提出三層解決方案。第一層以 LLM 作為智能靜態分析器:識別源碼中的潛在漏洞基本塊,透過在源碼插入 assembly 標記(如 `0x7777F7`)將 LLM 的語義理解對應到 CFG 的具體節點;同時讓 LLM 分析外部呼叫鏈,自動推導出入口函數中哪個參數會影響下游的關鍵字段,並生成複雜 calldata 的編碼腳本。第二層是狀態引導的模糊測試:透過解析 CFG 的跳轉操作碼確定進入目標分支所需修改的儲存槽,並將每次執行的有趣狀態存入「狀態池」,再通過重組 callchain 生成多樣化起始狀態,解決傳統工具只能從初始零狀態出發的限制。第三層則將 EVM 位元組碼轉換為 GPU 可平行執行的代碼,大幅提升測試吞吐量。問答環節中講者進一步說明距離度量是引導參數變異的核心機制,讓 fuzzer 能像二元搜索一樣,根據與分支條件的距離決定參數的增減方向。

關鍵時刻

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