KeyFrame內部研究專用

Black Hat Europe 2025 | Stress-Testing SAST And LLMs On Modern Web Backends

Black Hat·6月24日週三·39 min英文

三句話摘要

傳統靜態應用安全測試(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 只會顯示它真正能驗證的內容。

更多「Web2 安全」的內容

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car
7 min
Web2 安全英文PODCAST8月25日

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car

SANS Stormcast

  • PNG 容器攻擊的簡易性設計:Double Cup 不依賴複雜的 Exif 或隱寫技術,只用 PNG 副檔名和檔頭來偽裝,核心是利用 findstr 指令的常見可用性讓執行變得無需額外工具。
  • Web Audio API 的隱密指紋識別:音訊於增益零的無聲狀態下播放,使用者完全無感,但錄製波形足以建立裝置特徵,在瀏覽器原生功能層面難以區分是反詐欺還是過度追蹤。
  • 域名過期引發的串聯漏洞:DMARC 報告端點使用過期域名是常見疏漏,允許攻擊者透過簡單的域名註冊取得他人的 SPF/DKIM 錯誤報告,進而收集目標系統配置情報。
Risky Bulletin: Expired credit cards can be used for malicious transactions
5 min
Web2 安全英文PODCAST8月24日

Risky Bulletin: Expired credit cards can be used for malicious transactions

Risky Business

  • 支付安全的非對稱風險:Visa卡利用未加密的卡片資料與NFC通訊,攻擊者可藉由中間人技術竄改過期日期進行交易,但MasterCard、美運卡與Discover的防護更完善,顯示不同發卡機構的安全架構存在明顯差異。
  • 國家級駭客活動的連鎖延伸:北韓Lazarus集團在2月單一事件已累積100名受害者,涵蓋大學、警察部門、媒體與醫療機構,伊朗駭客則針對基礎建設如電力系統發動破壞性攻擊,反映地緣政治在網路戰爭中的升溫。
  • AI加速漏洞生態的雙面刃:AI工具催生近2萬份漏洞概念驗證代碼發布,但同時也導致大量失效漏洞代碼氾濫,增加資安團隊甄別真實威脅的難度;Mayer Protocol遭攻擊事件中,駭客用AI鏈接六個無關的小漏洞完成盜竊170萬美元的攻擊。
SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware
5 min
Web2 安全英文PODCAST8月24日

SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware

SANS Stormcast

  • Microsoft EntraID 的遠端代碼執行漏洞已由微軟修補,初期報告顯示已遭利用但後來更正為未遭利用。這反映 Microsoft 在雲端軟體安全上的透明度提升,對漏洞採用與內部軟體相同的 CVE 編號和公告流程。
  • PowerShell 指令碼可用於驗證 MFA 部署完整性,特別是找出未啟用 MFA 的遺漏帳號。同時可以分析 EntraID 登入日誌中的異常行為,如風險係數評估和地理位置檢測,幫助組織快速識別可疑登入。
  • GitLab 的 GraphQL 代碼注入漏洞允許未認證攻擊者刪除或修改儲存庫,潛在導致供應鏈攻擊。已有公開概念驗證 (PoC) 存在,使用內部部署 GitLab 的組織必須立即修補。