LLM 應用之縱深防禦
進階4 分鐘閱讀更新於 2026-03-13
AI 應用之分層防禦策略,涵蓋網路、應用、模型與輸出層,各層的貢獻,以及為何單層防禦必然失敗。
縱深防禦是「沒有任何單一安全控制可被單獨信任」的原則。對 LLM 應用而言,這意味著建置多個獨立防禦層,當一層失效時——而且它終將失效——其他層可攔截威脅。
四個防禦層
層 1:網路與基礎設施
此層於任何 AI 特定處理之前運作。它處理驗證、授權、速率限制與傳輸安全。
| 控制 | 目的 | 所緩解之攻擊 |
|---|---|---|
| 驗證 | 驗證使用者身分 | 匿名濫用 |
| 速率限制 | 限制每使用者/時間之請求數 | 自動化攻擊、DoS |
| API 金鑰輪替 | 降低金鑰外洩之曝險 | 憑證竊取 |
| TLS/mTLS | 加密傳輸 | 流量攔截 |
| IP 白名單 | 依網路限制存取 | 未授權存取 |
| WAF 規則 | 封鎖已知攻擊模式 | 常見 Web 攻擊 |
# 速率限制中介層範例
from datetime import datetime, timedelta
class RateLimiter:
def __init__(self, max_requests: int = 60, window_seconds: int = 60):
self.max_requests = max_requests
self.window = timedelta(seconds=window_seconds)
self.requests: dict[str, list[datetime]] = {}
def check(self, user_id: str) -> bool:
now = datetime.utcnow()
user_requests = self.requests.get(user_id, [])
# 移除過期項
user_requests = [r for r in user_requests if now - r < self.window]
if len(user_requests) >= self.max_requests:
return False
user_requests.append(now)
self.requests[user_id] = user_requests
return True此層無法做到: 無法檢視內容以辨識語意威脅。精心打造、以每分鐘一次頻率送出的 jailbreak,可穿過所有網路層控制。
層 2:應用(輸入處理)
此層於輸入抵達模型前分析並消毒輸入。
| 控制 | 目的 | 所緩解之攻擊 |
|---|---|---|
| 輸入大小限制 | 防止上下文視窗濫用 | Token 耗盡、注意力稀釋 |
| Prompt shield | 偵測注入嘗試 | 直接與間接注入 |
| 內容安全 API | 標記有害輸入內容 | 有害請求嘗試 |
| 輸入消毒 | 移除/跳脫特殊 token | 分隔符跳脫、格式仿冒 |
| Session 管理 | 追蹤多輪行為 | 漸進升級攻擊 |
class InputProcessor:
def __init__(self):
self.prompt_shield = PromptShield()
self.content_safety = ContentSafetyClient()
self.max_input_tokens = 4096
def process(self, user_input: str, session: Session) -> ProcessResult:
# 大小檢查
if count_tokens(user_input) > self.max_input_tokens:
return ProcessResult.blocked("Input exceeds maximum length")
# 提示注入偵測
if self.prompt_shield.is_injection(user_input):
return ProcessResult.blocked("Input flagged as injection")
# 內容安全檢查
safety = self.content_safety.analyze(user_input)
if safety.max_severity > THRESHOLD:
return ProcessResult.blocked(f"Content safety: {safety.category}")
# Session 層行為分析
session.add_message(user_input)
if session.escalation_score > ESCALATION_THRESHOLD:
return ProcessResult.blocked("Behavioral escalation detected")
return ProcessResult.allowed(user_input)此層無法做到: 無法防止模型回應看似善意之輸入卻生成有害內容;也無法偵測 shield 模型未被訓練的攻擊。
層 3:模型(推論控制)
此層於生成期間約束模型行為。
| 控制 | 目的 | 所緩解之攻擊 |
|---|---|---|
| 系統提示加固 | 明確行為限制 | 指令覆蓋 |
| 指令階層 | 系統指令優先於使用者 | 優先度操弄 |
| 溫度限制 | 降低輸出隨機性 | 隨機性繞過 |
| Token 預算限制 | 限制輸出長度 | 資料外洩 |
| Stop sequences | 於邊界標記停止生成 | 生成失控 |
| 工具權限範疇化 | 限制可用工具 | 工具濫用、權限提升 |
此層無法做到: 它依賴模型「遵循指令」——而這正是提示注入攻擊所顛覆的。模型層控制必要但永遠不充分。
層 4:輸出(後處理)
此層於將模型輸出回傳使用者前加以分析並消毒。
| 控制 | 目的 | 所緩解之攻擊 |
|---|---|---|
| 內容分類器 | 偵測生成之有害內容 | Jailbreak 成功 |
| PII 偵測/遮罩 | 自輸出移除個人資料 | 資料洩漏 |
| LLM 評審 | 細緻之政策評估 | 細微政策違規 |
| 綱要驗證 | 確保輸出符合預期格式 | 經由結構化輸出之注入 |
| 引用驗證 | 驗證所引用之來源 | 幻覺引用 |
| 程式碼執行沙箱 | 隔離生成之程式碼 | 惡意程式碼生成 |
為何單層防禦失敗
考慮下列針對「只有輸入過濾」系統之攻擊推進:
| 步驟 | 攻擊者動作 | 輸入過濾結果 | 結果 |
|---|---|---|---|
| 1 | 送出直接注入 | 封鎖 | 防禦維持 |
| 2 | 換句話注入 | 封鎖 | 防禦維持 |
| 3 | 使用截斷繞過 | 通過 | 無其他層攔截 |
| 4 | 模型生成有害輸出 | 無輸出過濾 | 有害內容遞送 |
現以相同攻擊對抗縱深防禦系統:
| 步驟 | 攻擊者動作 | 層 1 | 層 2 | 層 3 | 層 4 | 結果 |
|---|---|---|---|---|---|---|
| 3 | 截斷繞過 | 通過 | 通過 | 系統提示可能抵抗 | 輸出分類器攔截有害輸出 | 防禦維持 |
即便某一層失效,其餘層仍維持保護。
縱深防禦檢查清單
以此清單評估應用的防禦覆蓋:
| 層 | 控制 | 是否存在? | 備註 |
|---|---|---|---|
| 網路 | 要求驗證 | ||
| 網路 | 已設定速率限制 | ||
| 網路 | API 金鑰定期輪替 | ||
| 應用 | 已強制輸入大小限制 | ||
| 應用 | 已部署 prompt shield | ||
| 應用 | 內容安全 API 啟用 | ||
| 應用 | 多輪追蹤啟用 | ||
| 模型 | 系統提示已加固 | ||
| 模型 | 工具權限已範疇化 | ||
| 模型 | 輸出長度已限制 | ||
| 輸出 | 內容分類器啟用 | ||
| 輸出 | PII 偵測/遮罩 | ||
| 輸出 | 結構化輸出驗證 | ||
| 橫向 | 日誌與監控 | ||
| 橫向 | 異常告警 |
延伸閱讀
- Guardrails 與安全層架構 -- 應用與輸出層的詳細架構
- 執行期監控與異常偵測 -- 橫切之監控層
- 速率限制、沙箱與執行控制 -- 基礎設施層控制
- 紅隊發現到修復 -- 將防禦缺口翻譯為可行發現
相關主題
- Guardrails 與安全層架構 - 應用與輸出層的詳細架構
- 執行期監控與異常偵測 - 橫切之監控層
- 速率限制、沙箱與執行控制 - 基礎設施層控制
- 紅隊發現到修復 - 將防禦缺口翻譯為可行發現
- 紅隊視角的 AI 系統架構 - 這些防禦所保護系統的元件層視角
參考資料
- "Defense in Depth: A Practical Strategy for Achieving Information Assurance" - NSA(2012)- 本頁為 AI 應用改寫之分層防禦策略奠基文件
- "NIST Cybersecurity Framework" - NIST(2024)- 將防禦控制組織於辨識、保護、偵測、回應與復原功能之框架
- "Securing LLM-Integrated Applications" - Microsoft Security(2024)- 為 LLM 應用實作多層防禦之實用指引
- "OWASP Top 10 for LLM Applications" - OWASP(2025)- 可對映至縱深策略中特定防禦層之風險分類
Knowledge Check
某 LLM 應用於輸入具強 prompt shield 但無輸出過濾。攻擊者以看似善意之輸入通過 shield,模型生成有害內容。違反了何種縱深防禦原則?