運用 AI 進行漏洞研究
如何運用 AI 程式助理進行漏洞研究,包括自動化程式碼稽核、fuzzer 生成、漏洞利用開發與負責任的揭露。
概述
AI 程式助理正迅速成為漏洞研究者不可或缺的工具。它們能加速枯燥的任務,例如撰寫 fuzzer、分析當機記錄、理解陌生的程式碼庫,以及生成概念驗證 (PoC) 漏洞利用。然而它們也有顯著的限制:會對函式簽章產生幻覺、誤判漏洞類型,並可能產出細微錯誤的漏洞利用程式,讓你浪費數小時除錯。
本文涵蓋如何有效運用 AI 工具進行漏洞研究,它們在何處能提供真正的價值、在何處會失敗,以及如何建立工作流以最大化其效用並緩解其弱點。
AI 在漏洞研究中的加速點
研究工作流
漏洞研究涉及多個階段,AI 在不同階段提供不同程度的價值。以下以資料結構方式概述各階段的重點:
- 攻擊面盤點 (Attack Surface Mapping):識別進入點、資料流與信任邊界。AI 加速效果高,適用工具為 Claude Code、Cursor、Aider;限制在於可能漏掉非顯而易見的進入點 (如 IPC、共享記憶體),且無法分析執行中的程序或動態行為。
- 程式碼理解 (Code Comprehension):理解陌生的程式碼庫、通訊協定或檔案格式。AI 加速效果高,但可能對未納入上下文視窗的 API 行為產生幻覺,且無法理解未文件化的專有協定。
- 漏洞模式辨識 (Vulnerability Pattern Recognition):在程式碼中識別潛在漏洞類型。AI 加速效果中等,適用工具包含 Semgrep、CodeQL、Claude Code;限制在於複雜漏洞類型的誤判率高、可能漏掉需要深層理解的微妙邏輯漏洞,且常誤判嚴重性。
- Fuzzer 開發:為特定攻擊面撰寫針對性 fuzzer。AI 加速效果高,適用工具包含 Claude Code、GitHub Copilot、Cursor;限制在於生成的 fuzzer 可能未涵蓋重要程式路徑,且可能無法處理協定或格式解析的邊界案例。
- 當機分流 (Crash Triage):分析當機、判定根因與可利用性。AI 加速效果中等;限制在於無法執行除錯器或分析記憶體狀態,若當機複雜可能誤判根因,且在缺乏執行期資訊下評估可利用性有侷限。
- 漏洞利用開發:建立概念驗證漏洞利用。AI 加速效果中等;限制在於漏洞利用程式常出現細微錯誤 (偏移量錯誤、編碼錯誤),對記憶體佈局與 ASLR 繞過的理解有限,且無法在缺乏執行環境下測試。
- 漏洞報告撰寫:撰寫漏洞報告與安全公告。AI 加速效果高;限制在於可能高估或低估嚴重性,CVSS 評分需人工驗證。
AI 輔助的程式碼稽核
系統化的原始碼審查
AI 擅長程式碼稽核的廣度階段——快速掃描大型程式碼庫,以識別值得深入審查的區域。實務上常以啟發式規則分類高風險區域:
- 輸入處理器 (input_handlers):涵蓋
request.get/post/json/form/args/data、sys.argv、input(、socket.recv、read(等外部輸入進入點。 - 加密操作 (crypto_operations):涵蓋
hashlib、hmac、cryptography、Crypto、ssl等模組呼叫、加解密、簽章驗證、hash 計算,以及 AES/RSA/DES/MD5/SHA 的使用;這些位置常隱藏實作缺陷。 - 認證邊界 (auth_boundaries):涵蓋
login、authenticate、authorize、session、token、jwt、@login_required、password、credential等認證與授權邏輯。 - 命令執行 (command_execution):涵蓋
subprocess、os.system、os.popen、exec、eval、shell=True、Popen,以及exec(、eval(、compile(等可能導致命令注入與程式碼執行的呼叫。 - 反序列化 (deserialization):涵蓋
pickle.load、yaml.load、json.loads、deserialize、unmarshal、unpack、fromstring以及 XML 解析;處理不可信資料時常見風險。 - 檔案操作 (file_operations):涵蓋
open(.*+、os.path.join、shutil、上傳/下載、mkdir、rmdir、unlink、chmod;常見路徑穿越與檔案操作漏洞。
識別高風險區域後,針對每一類別產生量身打造的 AI 稽核提示詞。範例:
- 輸入處理器:「檢閱此程式碼是否有輸入驗證漏洞,檢查 SQL 注入、命令注入、XSS、路徑穿越、SSRF 與反序列化攻擊。對每個輸入處理器,追蹤資料流從進入到處理的完整路徑,識別缺漏的清理或驗證。」
- 加密操作:「檢閱此加密程式碼的實作缺陷,檢查弱演算法 (安全情境使用 MD5、SHA1)、靜態 IV/nonce、缺漏的完整性檢查、不當的金鑰派生、時間側通道與不安全的亂數產生。」
- 認證邊界:「檢閱此認證與授權程式,檢查認證繞過、存取控制失效、會話固定、權杖洩漏、密碼儲存缺陷、敏感操作缺漏的授權檢查,以及 IDOR 漏洞。」
- 命令執行:「檢閱此程式的命令注入漏洞,檢查 subprocess 呼叫中未清理的輸入、帶使用者輸入的
shell=True、帶使用者輸入的 eval/exec,以及環境變數注入。」 - 反序列化:「檢閱此程式的不安全反序列化,檢查對不可信資料呼叫
pickle.load、未使用 SafeLoader 的yaml.load、XML 外部實體 (XXE) 攻擊,以及原型污染。」 - 檔案操作:「檢閱此程式的檔案操作漏洞,檢查路徑穿越 (../)、符號連結攻擊、TOCTOU 競爭條件、不安全的暫存檔,以及無限制的檔案上傳。」
AI 輔助的 Fuzzer 生成
建構針對性 Fuzzer
AI 特別擅長生成 fuzzer,因為 fuzzer 有明確的結構,AI 能快速產出原本需耗時撰寫的樣板程式碼。
典型工作流:先向 AI 提供目標函式簽章與上下文,例如 Python 中的自訂二進位協定解析器 parse_message(data: bytes) -> dict,其中前 2 位元組為 magic number 0xCAFE、1 位元組 version、1 位元組 msg_type、接著 4 位元組 payload 長度,之後為實際 payload。接著請 AI 產出以 atheris 為基礎的結構感知 fuzzer:使用 atheris.FuzzedDataProvider 消耗隨機位元組,產生能通過初始檢查的「近似有效」訊息,用 struct.pack 組合完整訊息後呼叫 parse_message;預期例外 (ValueError、struct.error、IndexError、KeyError) 吞掉,非預期例外則讓 atheris 判定為當機。這種結構感知正是 AI 能加值之處。
不同目標的 Fuzzer 生成
針對不同目標類型,可準備對應的提示詞範本:
- HTTP API fuzzer:使用 requests 函式庫,從有效請求範本出發,變異標頭、參數、主體欄位與 content-type;檢查 500 錯誤、時序異常與非預期回應;將有趣的回應記錄供人工審查。典型輸出會包含突變策略 (SQL 注入、XSS、路徑穿越、緩衝區溢位、null byte、template/expression 注入、空字串、純空白等),並針對字串、整數 (0、-1、231、263、None)、清單 (長度 1000)、布林等不同型別套用不同變異;追蹤狀態碼 ≥500、耗時 >5 秒、回應同時包含 "error" 與 "traceback" 等指標。
- 檔案格式 fuzzer:對有效檔案進行變異,再餵給解析器,檢查是否當機。
以 AI 進行當機分流
自動化當機分析
當機分流流程通常分為三步:
- 解析當機報告:以正規表示式擷取 Python traceback,識別例外類型、訊息與呼叫堆疊;將每個
File "...", line N, in funcname轉為結構化資料,收集受影響的原始檔清單。 - 產生 AI 分流提示詞:將解析結果組成提示詞,請 AI 回答:根因為何?是否具安全相關性?能否導致程式執行、資訊揭露、阻斷服務或認證繞過?最接近哪一個 CWE?PoC 可能長什麼樣?修復方式為何?
- 啟發式可利用性評估:依例外類型與堆疊中的函式名稱加權計分。例如 BufferError/OverflowError +3 (記憶體毀損指標)、PermissionError/AuthError +2 (權限邊界被跨越)、反序列化函式中的當機 +3、解析器中的當機 +1。總分 ≥3 視為高可利用性,≥2 視為中等,其餘視為低。
倫理與法律考量
負責任的使用框架
用 AI 進行漏洞研究時,應明確區分三種情境:
- 獲授權的研究:需具備來自系統所有者的書面授權 (漏洞獎勵計畫、委任書);明確定義測試範圍;約定負責任的揭露時程;不存取生產使用者資料。此情境下 AI 工具的使用是適當的。
- 協調式揭露 (Coordinated Disclosure):公開揭露前先向供應商回報;遵循供應商偏好的流程;給予修復開發合理時間 (通常 90 天);提供 PoC 而非武器化的漏洞利用。此情境下 AI 工具的使用是適當的。
- 武器化 (Weaponization):為未授權使用建立完整武器化的漏洞利用。此情境下 AI 工具的使用不適當。相關行為違反包括 CFAA 在內的法律,也違反多數 AI 工具的可接受使用政策。
AI 工具在漏洞研究上能做什麼、不能做什麼,誠實評估如下:
- 真正有幫助:解釋陌生的程式碼模式與通訊協定;為 fuzzer 與測試腳手架生成樣板;為特定漏洞模式撰寫 Semgrep/CodeQL 規則;草擬漏洞報告與安全公告;建議相關 CWE 與攻擊技術;在程式語言之間轉換 PoC。
- 在指引下有幫助:在原始碼中識別潛在漏洞類型;生成 PoC 漏洞利用 (需人工微調);分析當機傾印與堆疊追蹤;為特定攻擊面建議攻擊向量。
- 不可靠:在無指引下發現全新的 zero-day;準確評估記憶體毀損漏洞的可利用性;為複雜漏洞鏈生成能運作的漏洞利用;繞過現代緩解措施 (ASLR、CFI、沙箱);理解專有或未文件化的協定。
建構 AI 增強的研究工作流
完整的 AI 增強漏洞研究工作流可分為五步:
- 偵查:人工定義研究目標與範圍;AI 盤點攻擊面、識別進入點、列出使用的技術堆疊。工具:Claude Code 分析程式碼庫、Semgrep 模式比對。產出:依優先度排序的攻擊面地圖。
- 分析:人工引導 AI 聚焦於高風險區域;AI 深入審查指定區域。工具:CodeQL 資料流分析、AI 程式碼審查提示詞。產出:帶有信心等級的潛在漏洞清單。
- 驗證:人工核實 AI 的發現並過濾誤報;AI 為每個發現生成測試案例與 PoC 程式碼。工具:AI 生成的 fuzzer、人工除錯。產出:附 PoC 的已確認漏洞。
- 利用:人工評估可利用性並開發可靠的 PoC;AI 生成漏洞利用骨架並在格式間轉換。工具:AI 處理樣板、人工精煉漏洞利用。產出:展示影響的可運作 PoC。
- 報告:人工驗證嚴重性、判定 CVSS 分數;AI 草擬漏洞報告並建議緩解措施。工具:AI 撰寫報告、CVSS 計算器。產出:可送出的漏洞報告。
參考資料
- MITRE ATLAS — Adversarial Threat Landscape for Artificial-Intelligence Systems — https://atlas.mitre.org/
- "LLM Agents can Autonomously Exploit One-day Vulnerabilities" — Fang et al., 2024 — https://arxiv.org/abs/2404.08144
- Google Project Zero — Vulnerability Research Methodology — https://googleprojectzero.blogspot.com/
- Atheris — Python fuzzing engine — https://github.com/google/atheris
- OWASP Testing Guide — https://owasp.org/www-project-web-security-testing-guide/
- CWE-676: Use of Potentially Dangerous Function — https://cwe.mitre.org/data/definitions/676.html
- Coordinated Vulnerability Disclosure Guidelines — https://www.cisa.gov/coordinated-vulnerability-disclosure-process