總結專案:建置完整的 AI 紅隊演練平台
設計並實作全面的 AI 紅隊演練平台,具備自動化攻擊編排、漏洞追蹤與協作式報告能力。
概述
此總結專案挑戰你從零建置一套生產等級的 AI 紅隊演練平台。專業 AI 紅隊無法只倚賴單一工具進行評估,而是需要整合型平台,協調多種攻擊方法、跨任務追蹤發現,並為利害關係人產出可執行的報告。
你將建置的平台是 AI 紅隊作業的中樞神經系統。它編排多個目標模型的自動化攻擊活動、將結果彙整至統一漏洞資料庫,並產出對應至 OWASP Top 10 for LLM Applications 與 MITRE ATLAS 等風險框架的報告。架構必須具可擴充性,讓新的攻擊技術與目標模型整合可以在不修改核心平台程式碼的情況下新增。
此專案借鑑了已自建內部紅隊平台的組織的真實經驗,包含 Microsoft 的 PyRIT 框架(提供攻擊編排的概念基礎)以及 NVIDIA 在持續 AI 安全測試方面的作法。完成此總結專案後,你將擁有一個可立即用於自身任務、並能依組織需求擴充的工作平台。
專案需求
功能需求
核心平台架構
平台必須實作下列元件:
-
目標登錄(Target Registry) — 用於登錄受測 AI 系統的組態系統。每個目標包含連線詳情(API 端點、認證)、模型中繼資料(供應商、版本、能力)與範圍限制(授權的攻擊類別)。
-
攻擊模組框架(Attack Module Framework) — 以外掛架構封裝各種攻擊技術。每個模組宣告所需輸入、目標相容性與預期輸出格式。框架處理模組探索、相依解析與平行執行。
-
活動編排器(Campaign Orchestrator) — 將攻擊模組組裝為活動的排程器,管理執行順序(遵守相依性與速率限制),並以重試邏輯與斷路器優雅處理失敗。
-
結果彙整器(Result Aggregator) — 資料管線,將不同攻擊模組的輸出正規化為共同漏洞結構、去重發現並計算嚴重度分數。
-
報告引擎(Reporting Engine) — 以範本驅動的系統,產出多格式(Markdown、HTML、PDF)任務報告,嵌入證據、嚴重度分布與緩解建議。
非功能需求
- 平台必須能同時對多個目標執行並行活動而不互相干擾。
- 攻擊模組必須沙箱化,使單一模組失敗不會導致整個活動崩潰。
- 所有與目標模型的互動必須記錄完整請求/回應對,以利重現。
- 平台必須同時支援互動式(CLI)與程式化(API)使用。
技術規格
- 語言:Python 3.11+
- 非同步框架:asyncio,搭配結構化並行
- 資料儲存:開發用 SQLite,生產用 PostgreSQL 相容
- API 層:REST 介面使用 FastAPI
- 組態:以 YAML 為主並搭配 JSON Schema 驗證
實作指引
階段 1:核心資料模型與目標登錄
先定義整個平台所依賴的資料模型。以 Pydantic 定義 SeverityLevel(critical、high、medium、low、informational)與 AttackCategory(prompt_injection、jailbreak、data_extraction、privilege_escalation、denial_of_service、model_manipulation、output_manipulation、supply_chain)。
TargetConfig 包含目標 ID、名稱、描述、供應商(openai、anthropic、custom)、端點、模型識別符、認證標頭、認證權杖環境變數名稱(絕不直接儲存權杖)、每分鐘最大請求數、授權攻擊類別與中繼資料。
VulnerabilityFinding 包含發現 ID、活動 ID、模組名稱、目標 ID、類別、嚴重度、標題、描述、證據列表、重現步驟、緩解建議、CWE ID、ATLAS 技術 ID、發現時間與驗證狀態。EvidenceItem 記錄證據類型(request_response、screenshot、log_excerpt)、內容與時間戳。
CampaignConfig 包含活動 ID、名稱、目標 ID 清單、模組名稱清單、最大並行模組數、單模組逾時、是否在發現 critical 時停止等。
TargetRegistry 類別管理登錄/查詢目標。它會從指定目錄載入 YAML 檔,容忍單一損壞檔(印出警告並略過)。register 方法會先驗證認證權杖的環境變數已設定,然後保存至 YAML。remove 刪除目標並移除 YAML 檔。
階段 2:攻擊模組框架
攻擊模組框架採外掛模式。_MODULE_REGISTRY 全域字典以 @register_module 裝飾器填入;get_module_class(name) 與 list_modules() 提供查詢。
AttackModule 抽象基底類別宣告類別變數 name、description、categories、version;建構子接收 campaign_id 與 target 並初始化 findings 列表。子類別必須實作 async run() -> list[VulnerabilityFinding]。safe_run 包覆 run,攔截 CancelledError 與一般例外,確保部分結果仍能回傳。
範例模組 GarakProbeModule(類別 @register_module)整合 Garak:預設執行 encoding、dan、gcg、knownbadsignatures、misleading 探針。run 方法以 asyncio.create_subprocess_exec 執行 python -m garak,透過 _build_env 將目標的認證權杖從環境變數傳入 Garak(由平台解析 auth_token_env_var,再塞入子行程環境),執行結束後解析 JSONL 報告:對每一筆 status=fail 的紀錄建立 VulnerabilityFinding,並透過 _map_severity 將 DAN/GCG 映射為 HIGH、encoding 映射為 MEDIUM。
階段 3:活動編排器
CampaignResult 類別匯整活動結果:findings 列表、模組狀態字典、開始與結束時間;提供 critical_count 屬性與 summary 方法(回傳總數、依嚴重度分布、模組狀態、耗時)。
Orchestrator 類別的 run_campaign 方法:
- 以
asyncio.Semaphore(max_concurrent_modules)限制並行。 - 從登錄中解析目標,過濾不存在的 ID。
- 為每個 (module, target) 組合建立
asyncio.Task。 - 以
asyncio.as_completed收集結果,若設定stop_on_critical且已發現 critical,取消剩餘任務。
_run_module 在信號量保護下執行單一模組:解析模組類別(失敗則略過)、以 asyncio.wait_for(module.safe_run(), timeout) 套用逾時,逾時時回傳已累積的部分結果。
階段 4:結果彙整與去重
SEVERITY_WEIGHTS 以 CVSS 為靈感定義權重(critical=10、high=7.5、medium=5、low=2.5、informational=0)。
deduplicate_findings 以 target_id + category + title 為鍵去重,保留較高嚴重度的版本並合併兩者的證據項目。compute_risk_score 將所有發現的權重加總,依理論最大值(20 個 critical 發現)正規化為 0–100 分數。group_by_category 將發現依攻擊類別分組以利報告。
階段 5:報告引擎
ReportGenerator.generate_markdown 方法:
- 去重 findings 並計算風險分數、依類別分組。
- 輸出標題、活動名稱、日期、風險分數、總發現數。
- 執行摘要:目標數、模組數、風險分數。
- 嚴重度分布表格。
- 依類別展開每項發現:標題、嚴重度、模組、描述、重現步驟、緩解建議。
階段 6:FastAPI REST 介面
app = FastAPI(...) 掛載下列端點:
GET /modules:列出所有已註冊攻擊模組。POST /targets:登錄新目標(失敗時回 400)。GET /targets:列出所有目標(排除環境變數名稱欄位)。POST /campaigns:啟動新活動;先驗證所有目標存在,再以背景任務執行,立即回傳活動 ID。GET /campaigns/{id}:取得活動狀態與結果摘要。GET /campaigns/{id}/report:產出並回傳 Markdown 報告路徑。
階段 7:CLI 介面
以 click 建立 CLI,接收 --data-dir 選項:
modules:列出所有模組。register <config.yaml>:從 YAML 檔登錄目標。run <campaign.yaml>:以asyncio.run執行活動、印出 JSON 摘要、產出 Markdown 報告。
評估標準
你的 AI 紅隊演練平台將從五個面向評估:
| 標準 | 權重 | 優秀 | 合格 | 待改進 |
|---|---|---|---|---|
| 架構 | 25% | 清晰的關注點分離、可擴充外掛系統、定義良好的介面 | 可運作外掛系統,但有輕度耦合問題 | 單體式設計、硬編碼元件 |
| 攻擊覆蓋率 | 25% | 5 個以上模組涵蓋多種類別,整合 2 個以上外部工具 | 3–4 個模組,具外部工具整合 | 少於 3 個模組或無外部工具 |
| 編排 | 20% | 非同步執行、並行控制、優雅錯誤處理、速率限制 | 基本非同步搭配錯誤處理 | 序列執行或模組失敗時當機 |
| 報告 | 15% | 多重格式、嚴重度評分、ATLAS/OWASP 對應、緩解指引 | 單一格式,具嚴重度與證據 | 無結構的原始發現傾印 |
| 程式品質 | 15% | 有型別註解、測試、文件,遵守 Python 最佳實踐 | 多數具型別與文件 | 缺型別、無測試、組織差 |
延伸目標
- 使用 React 或 HTMX 新增即時活動監控的網頁儀表板。
- 實作發現關聯引擎,辨識跨多個個別發現的攻擊鏈。
- 支援排程/週期性活動,並偵測漂移(標示自上次執行以來的新漏洞)。
- 透過 webhook 通知與 SIEM/SOAR 平台整合。
參考資料
- Mazeika, M., et al. (2024). "HarmBench: A Standardized Evaluation Framework for Automated Red Teaming and Robust Refusal." arXiv:2402.04249. https://arxiv.org/abs/2402.04249
- Derczynski, L., et al. (2024). "garak: A Framework for Large Language Model Red Teaming." arXiv:2406.11036. https://arxiv.org/abs/2406.11036
- OWASP Foundation. (2025). "OWASP Top 10 for LLM Applications." https://owasp.org/www-project-top-10-for-large-language-model-applications/
- MITRE. (2024). "ATLAS — Adversarial Threat Landscape for AI Systems." https://atlas.mitre.org/