Black Hat Europe 2025 | Stress-Testing SAST And LLMs On Modern Web Backends
三句話摘要
傳統靜態應用安全測試(SAST)工具為何無法檢測現代 Web 應用中的現實漏洞,以及改進方向。 現代漏洞隱藏在良好代碼實踐中,SAST 需通過自定義規則、業務感知和代碼簡化來適應,同時 AI 工具的成熟提示 SAST 應朝更高層次的邏輯檢測演進。 SAST 失效的根本原因在於其污點分析架構的局限性。污點分析假設數據從單一源流向單一目的地,中間經過驗證則標記為安全。但現實漏洞往往涉及多個輸入源、不同驗證點和執行邏輯的不一致——例如驗證來自集合的數據,卻執行未驗證的列表中的數據。
重點整理
重點- 1
SAST 失效的根本原因在於其污點分析架構的局限性。污點分析假設數據從單一源流向單一目的地,中間經過驗證則標記為安全。但現實漏洞往往涉及多個輸入源、不同驗證點和執行邏輯的不一致——例如驗證來自集合的數據,卻執行未驗證的列表中的數據。
- 2
複雜漏洞的共同模式是開發者在遵守單一責任原則時無意中破壞了安全不變式。案例包括:優惠券驗證函數返回集合但執行函數迭代列表、小費驗證檢查單一參數來源卻執行時從多源讀取、跨租戶的多層防禦因代碼複製和批量操作改造而失效。這些都超出了 SAST 的檢測能力。
- 3
AI 工具的 100% 檢測率證明這類漏洞是可被發現的,但需要跨越多個代碼單元進行業務邏輯推理,這不是 SAST 的設計目標。SAST 的優勢是確定性和可擴展性,應通過自定義規則基於業務約定來補強。
- 4
實踐層面,應把 SAST 當作代碼理解工具而非安全門禁,主動編寫針對第一方代碼的自定義規則。若規則難以編寫,往往反映代碼架構不清晰,應優先重構以建立明確的安全邊界。
實用技巧與重點
乾貨- 基準測試規模
- 33 個現實漏洞示例
- 涵蓋 Owasp Top 10 十個類別、六個 API 類別
- 三個案例漏洞模式
- 優惠券重複使用:驗證返回 Set<Coupon>,執行遍歷原始 List<Coupon>,導致去重失效
- 負數小費:驗證檢查查詢參數 `tip >= 0`,執行時優先讀 JSON body(未驗證),可傳負數
- 跨租戶訪問:批量操作改造後暴露舊端點的複製代碼,攻擊者利用列表中兩個不同的餐廳 ID 繞過授權與數據庫作用域
- SAST 工具測試結果
- 現有工具檢測率:0%(此基準)
- 業界聲稱檢測率:80-85%
- AI 工具測試結果
- Claude Code、Gemini、Cline、Codex:100% 檢測率
- SAST 主要局限
- 污點分析不支持跨請求狀態機追蹤
- 框架級規則覆蓋不足(多數只提供語言級覆蓋)
- 自定義規則編寫困難:對代碼重構、變量重命名、調用鏈改變敏感
- 改進方向
- 集成 IDE/LSP(類似 F12 定義跳轉)
- 提供代碼查詢語言(如 SQL 式查詢)
- 簡化自定義規則編寫
- 支持多層次防禦的交互檢測
結論
結論“現代漏洞隱藏在良好代碼實踐中,SAST 需通過自定義規則、業務感知和代碼簡化來適應,同時 AI 工具的成熟提示 SAST 應朝更高層次的邏輯檢測演進。”
完整解析
詳細傳統 SAST 工具聲稱對常見漏洞的檢測率達 80-85%,但講者團隊在測試現實中的複雜、多層次漏洞時發現,檢測率竟跌至 0%。這不是配置問題,而是反映了 SAST 架構本身的根本局限。
漏洞隱藏在「好的」代碼實踐中。開發者為遵守單一責任原則和 DRY 原則,會將驗證邏輯和執行邏輯分離到不同函數。表面上代碼結構清晰,但這種分離卻創造了新的攻擊面——驗證和執行操作的對象不一致。
第一個案例是優惠券漏洞。驗證函數接收優惠券列表,移除重複項後返回集合;執行函數卻遍歷原始列表而非集合,導致重複優惠被多次應用。第二個案例是小費詐騙漏洞:驗證中檢查 `tip >= 0`,但獲取參數時同時從查詢字符串和 JSON body 讀取,攻擊者可通過 JSON body 傳遞負數繞過驗證。兩個漏洞共同點都是違反了安全不變式——驗證和執行的輸入不一致。
第三個案例更複雜,涉及多層防禦的交互缺陷。開發者使用授權裝飾器進行緩存,防止跨租戶訪問;同時在數據庫層進行作用域限制;還引入消費助手函數來檢測異常行為。單獨看每一層都是安全的。但當舊端點因向後兼容性手動複製授權邏輯,而後來又改造消費函數支持批量操作時,攻擊者可以精心構造包含多個值的列表——一個值通過授權檢查,另一個值在數據庫層執行,實現跨租戶數據篡改。
為什麼 SAST 無法檢測?污點分析(taint analysis)方法追蹤數據從源到目的地的流動。它可檢測「直接」的流動——例如未驗證的用戶輸入直接進入數據庫查詢。但上述案例漏洞涉及多個輸入源、不同驗證點、複雜的數據轉換邏輯,超出了污點分析的模型範圍。編寫自定義規則來檢測這些模式也異常困難——一旦代碼重構、變量重命名或調用鏈改變,規則就失效。
有趣的是,AI 工具在同一基準上的檢測率達 100%。Claude Code、Gemini 等工具能理解業務邏輯、跨越多個代碼單元推理、識別不一致的模式。這推翻了「複雜漏洞無法檢測」的定論,但 AI 也有缺點——不如 SAST 那樣確定性和可擴展。
講者的實踐建議分三層面:首先,對現代 Web 應用應主動編寫自定義 SAST 規則,基於業務邏輯和內部代碼約定;其次,把 SAST 當作理解代碼的工具而非安全門禁;第三,若規則難以編寫,這往往說明代碼架構不清晰,應考慮重構以建立明確的安全邊界。
展望未來,改進方向應是:將 SAST 更緊密地集成到開發流程(如 IDE 插件、LSP),提供更易用的代碼查詢語言(類似 SQL),簡化自定義規則的編寫。只有當 SAST 變得更動態、更交互、更貼近開發者日常工作時,才能真正應對現代代碼中的複雜漏洞。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

