頂石專案:防禦系統實作
打造含輸入過濾、輸出監控、護欄、速率限制與日誌的完整 AI 防禦堆疊,再以自動化攻擊進行評估。
概觀
防禦比進攻更難。攻擊者只需找到一個繞過,防禦者卻必須正確處理所有輸入 — 包含從未見過的對抗性輸入。本頂石專案挑戰您為 LLM 應用打造完整防禦堆疊,然後親自攻擊自身以進行評估。
您將實作五層防禦 — 輸入過濾、輸出監控、行為護欄、速率限制與安全日誌 — 並整合至可運作的 LLM 應用。接著對您的防禦執行自動化攻擊套件,並產出評估報告,記錄繞過率、誤報率與效能衝擊。
先備條件
- 提示詞注入 — 理解要防禦的注入攻擊
- 越獄技術 — 要偵測的安全性繞過方法
- 防禦與護欄 — 防禦架構與已知限制
- CART 與自動化 — 供防禦評估的自動化測試
- Python 熟練度並熟悉 Web 框架 (FastAPI、Flask)
- 日誌基礎設施的基本理解
專案簡介
情境
您是一家部署了 LLM 驅動客服聊天機器人之公司的安全工程師。聊天機器人已正式上線三個月,期間發生多起安全事件:一次提示詞注入洩漏了內部定價公式、一次越獄使其產生不當內容,以及一次成本耗盡攻擊 (自動腳本在一個週末刷了 $15,000 的 API 帳單)。管理階層希望兩週內部署完整防禦系統。
防禦層次
User Input
↓
┌─────────────────────────┐
│ Layer 1: Rate Limiting │ ← Connection and token rate limits
└─────────────────────────┘
↓
┌─────────────────────────┐
│ Layer 2: Input Filter │ ← Injection detection, content policy
└─────────────────────────┘
↓
┌─────────────────────────┐
│ Layer 3: LLM Call │ ← System prompt, model parameters
└─────────────────────────┘
↓
┌─────────────────────────┐
│ Layer 4: Output Monitor │ ← Safety check, leakage detection
└─────────────────────────┘
↓
┌─────────────────────────┐
│ Layer 5: Logging │ ← Structured audit log, alerting
└─────────────────────────┘
↓
User Response
交付物
主要交付物
| 交付物 | 描述 | 權重 |
|---|---|---|
| 防禦系統 | 整合至 LLM 聊天機器人的可運作防禦堆疊 | 30% |
| 輸入過濾器 | 提示詞注入與內容政策執行 | 15% |
| 輸出監控 | 安全違規與資料外洩偵測 | 15% |
| 速率限制器 | 以符元、請求與成本為基礎的速率限制 | 10% |
| 日誌系統 | 結構化安全事件日誌,含告警觸發 | 10% |
| 評估報告 | 攻擊繞過率、誤報率、效能指標 | 20% |
評分準則
- 防禦深度 (20%) — 多個獨立層次,各自抓住不同攻擊類型
- 偵測準確性 (25%) — 低誤報率 (於良性輸入低於 5%) 搭配合理偵測率 (於已知攻擊高於 60%)
- 效能衝擊 (10%) — 防禦層增加的請求處理延遲低於 500ms
- 日誌品質 (15%) — 日誌結構化、可查詢,並含有足以事件調查的細節
- 評估嚴謹性 (20%) — 測試使用多元攻擊集,回報具統計有效性的指標
- 程式碼品質 (10%) — 清晰、可維護、文件完善的實作
分階段做法
階段 1:基礎應用與架構 (3 小時)
建置目標應用
打造或設定一個含 Web API 的簡易 LLM 聊天機器人。這是您要防禦的系統。包含系統提示詞、對話歷程管理與基本功能 (回答問題、遵循指令)。
設計防禦架構
規劃分層防禦堆疊。為每層定義介面 (輸入/輸出型別、設定參數、失敗時的繞過行為)。決定各層同步或非同步執行。
實作中介層管道
建置請求處理管道,依序將每個請求路由經過各防禦層。包含可啟用/停用個別層與設定敏感度閾值的設定。
階段 2:輸入防禦 (5 小時)
建置速率限制器
以三個層級實作速率限制:每位使用者每分鐘請求數、每位使用者每小時總符元數、每位使用者每天估算成本。使用滑動視窗演算法。包含可設定閾值與寬限期。
建置輸入過濾器
實作輸入分析,偵測:指令覆寫模式 (例如 "ignore previous instructions")、已知注入載荷 (對特徵碼資料庫進行模式比對)、異常輸入特徵 (過長、異常編碼、嵌入控制字元),以及內容政策違規。
實作過濾器回應處理
當輸入過濾器偵測到威脅時應:記錄含完整脈絡的偵測、向使用者回傳安全回應 (不洩漏偵測邏輯)、更積極累計速率限制計數 (可疑使用者獲得較低限制),並對高信心偵測選擇性告警安全團隊。
階段 3:輸出防禦 (5 小時)
建置輸出監控
實作輸出分析,檢查:系統提示詞外洩 (比對輸出與已知敏感字串)、安全政策違規 (有害內容類別)、資料外洩指標 (比對內部資料格式的模式,如 SSN、API 金鑰、內部 URL),以及行為異常 (異常長、含意外格式或偏離預期人格的回應)。
實作護欄回應
當輸出監控標記回應時:以安全備用回應替代、記錄原始回應供審查 (但不傳送給使用者)、追蹤哪些輸入產生被標記輸出以改進輸入過濾器,並支援審查佇列,讓被標記的回應可於邊界情況下手動核准。
建置安全日誌系統
實作結構化日誌,擷取:所有安全相關事件 (偵測、封鎖、告警)、被標記互動的完整請求與回應、速率限制狀態變更,以及聚合指標 (偵測率、誤報估算、流量模式)。使用適合 SIEM 工具接入的結構化格式 (JSON)。
階段 4:評估 (5 小時)
組裝攻擊測試套件
打造或策展測試套件,涵蓋:跨主要類別的 50+ 提示詞注入載荷、30+ 越獄範本、20+ 資料萃取探測、速率限制壓力測試,以及 100+ 合法使用者查詢的良性基線 (供誤報量測)。
執行評估
對您防禦的應用執行攻擊套件。記錄:各攻擊類別的偵測率、於良性查詢的誤報率、每層防禦的延遲開銷、負載下速率限制器的效用,以及任何完全繞過。
分析並報告
產出評估報告,誠實評估您防禦系統的長處與弱點。包含各層指標、整體指標,以及成功繞過的具體案例。針對每個辨識的弱點建議改善。
階段 5:加固 (2 小時)
處理發現的繞過
對於評估中發現的每個繞過,實作修補或記錄為何此層無法修補。重跑相關攻擊子集以驗證修補。
調整誤報閾值
依評估資料調整偵測閾值。記錄權衡:每次閾值變更多抓或漏掉哪些額外攻擊?
範例輸出
輸入過濾器偵測範例
class InputFilter:
"""Analyzes user input for injection and policy violations."""
def analyze(self, user_input: str) -> FilterResult:
signals = []
# Check for instruction override patterns
override_score = self._check_instruction_override(user_input)
if override_score > 0.7:
signals.append(Signal(
type="injection",
subtype="instruction_override",
confidence=override_score,
evidence=self._extract_override_pattern(user_input),
))
# Check for encoding-based evasion
decoded = self._decode_obfuscation(user_input)
if decoded != user_input:
evasion_score = self._check_instruction_override(decoded)
if evasion_score > 0.5:
signals.append(Signal(
type="injection",
subtype="encoded_evasion",
confidence=evasion_score,
evidence=f"Decoded payload: {decoded[:200]}",
))
# Aggregate signals into a decision
max_confidence = max((s.confidence for s in signals), default=0.0)
return FilterResult(
action="block" if max_confidence > 0.8 else
"flag" if max_confidence > 0.5 else "allow",
signals=signals,
input_hash=sha256(user_input.encode()).hexdigest(),
)評估摘要範例
## Defense Evaluation Summary
### Detection Rates by Category
| Attack Category | Payloads | Detected | Rate |
|------------------------|----------|----------|--------|
| Direct injection | 25 | 21 | 84% |
| Indirect injection | 15 | 9 | 60% |
| Role-play jailbreak | 12 | 7 | 58% |
| Encoding bypass | 10 | 8 | 80% |
| Multi-turn escalation | 8 | 3 | 38% |
| Data extraction | 10 | 8 | 80% |
| System prompt leak | 10 | 9 | 90% |
### False Positive Rate
- Benign queries tested: 100
- Incorrectly blocked: 3
- Incorrectly flagged: 7
- False positive rate (block): 3%
- False positive rate (block + flag): 10%
### Performance Impact
| Layer | P50 Latency | P99 Latency |
|---------------|-------------|-------------|
| Rate limiter | 2ms | 5ms |
| Input filter | 45ms | 120ms |
| Output monitor| 35ms | 95ms |
| Logging | 8ms | 20ms |
| **Total** | **90ms** | **240ms** |提示
為何評估防禦系統的攻擊偵測率時,同時量測良性輸入的誤報率很重要?