AI 異常偵測
透過統計與機器學習方法偵測 AI 系統中的越獄嘗試、異常使用樣式、輸出漂移與嵌入空間異常。
AI 的異常偵測問題
傳統軟體的異常偵測相對簡單:定義「正常」(回應時間低於 200ms、錯誤率低於 1%),並在觀察偏離時發出警報。對 AI 系統而言,「正常」遠難定義,因為系統輸出本質上具有變異性——兩個相同的提示詞可產生不同回應,廣泛的主題與對話風格都可能是合法的。
偵測越獄嘗試
越獄偵測是 AI 異常偵測中最可立即行動的形式。多種互補方法可以結合:
基於分類器的偵測
訓練專用分類器以區分良性與對抗性輸入。
| 方法 | 優點 | 缺點 |
|---|---|---|
| 微調 transformer | 對已知樣式準確度高 | 漏失新型攻擊;需要標註訓練資料 |
| zero-shot 分類 | 無需訓練資料;偵測意圖 | 精度較低;偽陽性率高 |
| 集成分類器 | 結合多重訊號以增韌性 | 延遲較高;部署更複雜 |
基於困惑度的偵測
對抗性輸入,特別是 GCG 風格後綴與編碼載荷,通常具有異常高的困惑度——模型覺得它們「令人意外」,因為不像自然語言。
def detect_adversarial_by_perplexity(text: str, threshold: float = 100.0) -> bool:
"""標記困惑度異常高的輸入。"""
tokens = tokenizer.encode(text)
with torch.no_grad():
outputs = model(torch.tensor([tokens]))
log_probs = outputs.logits.log_softmax(dim=-1)
# 計算困惑度
token_log_probs = [
log_probs[0, i, tokens[i+1]].item()
for i in range(len(tokens) - 1)
]
perplexity = math.exp(-sum(token_log_probs) / len(token_log_probs))
return perplexity > threshold限制:基於困惑度的偵測可捕捉亂碼的對抗性字串,但漏失使用流暢、低困惑度文字的自然語言越獄。
語意相似度偵測
使用嵌入相似度將傳入提示詞與已知越獄樣板資料庫比較:
- 計算所有已知越獄提示詞的嵌入
- 對每個傳入提示詞,計算其嵌入並找出越獄資料庫中的最近鄰
- 標記與任一已知越獄餘弦相似度超過閾值的提示詞
限制:對已知攻擊的變體有效,但無法偵測真正新穎的技術。
行為樣式偵測
與其分類個別輸入,追蹤使用者會話中的行為樣式:
| 樣式 | 指示 | 偵測方法 |
|---|---|---|
| 對相似提示詞快速迭代 | 越獄搜尋 | 連續提示詞間的編輯距離 |
| 從良性升級至敏感主題 | 漸進攻擊 (Crescendo) | 逐回合主題分類 |
| 頻繁要求角色扮演或人格 | 基於角色的越獄 | 人格切換的意圖分類 |
| 異常長的輸入 | 上下文視窗利用 | 輸入長度監控 |
| 編碼或混淆內容 | 規避嘗試 | 熵與字元分布分析 |
偵測異常使用樣式
除了個別越獄嘗試外,聚合使用樣式揭示系統性的對抗性活動。
使用者層級異常
| 訊號 | 正常範圍 | 異常 | 可能原因 |
|---|---|---|---|
| 每小時請求數 | 5-50 | 500+ | 自動化掃描或萃取 |
| 平均輸入長度 | 20-200 符元 | 2000+ 符元 | 上下文塞入或載荷投遞 |
| 平均輸出長度 | 50-500 符元 | 4000+ 符元 | 萃取或資料外洩 |
| 每會話獨特主題數 | 1-5 | 50+ | 系統性探測 |
| 拒絕率 | 0-5% | 30%+ | 主動越獄嘗試 |
| 工具呼叫比例 | 10-30% | 90%+ | 透過注入的工具濫用 |
時間異常
- 離峰時段活動:集中於使用者基數通常不活躍時段的使用
- 爆發樣式:短時高強度活動後伴隨長停頓 (批次執行的自動化工具之特徵)
- 週期樣式:請求間規律的間隔暗示腳本化存取
- 會話長度異常:極長會話或回合數異常多的會話
基於同群的異常
將個別使用者與其同群 (cohort) 比較,而非全域基線:
- 使用程式碼助理的開發者每小時 200 請求可能對開發者正常,但對客服代表異常
- 主題分布應與角色或使用案例相似的使用者比較
- 行為樣式符合已知攻擊工具的新帳號應被標記
輸出漂移偵測
輸出漂移發生於模型回應的性質、品質或對齊逐漸改變時。這可能指示模型劣化、被投毒的微調,或 RAG 來源汙染。
輸出漂移類型
| 漂移類型 | 描述 | 偵測方法 |
|---|---|---|
| 品質漂移 | 輸出隨時間變得較不連貫或較不準確 | 自動化品質評分 (困惑度、BLEU、語意連貫性) |
| 對齊漂移 | 輸出與安全政策對齊度降低 | 定期安全基準評估 |
| 主題漂移 | 輸出偏向非預期主題 | 套用於輸出分布的主題分類器 |
| 語調漂移 | 輸出情感或正式度改變 | 滾動視窗上的情感分析 |
| 事實漂移 | 輸出含更多無根據聲明 | 對知識庫的事實查核 |
漂移偵測方法
統計檢定:對時間視窗上的輸出特徵分布套用分布比較檢定 (KL 散度、Jensen-Shannon 散度、Kolmogorov-Smirnov 檢定)。
基於參考的監控:為經典查詢維護一組「黃金組」預期回應。定期對此黃金組重新評估模型,並於顯著變化時警報。
嵌入漂移:追蹤輸出嵌入隨時間的中心點與變異數。中心點移動指示系統性漂移;變異數增加指示一致性下降。
嵌入空間監控
基於嵌入的監控提供強大、表徵層級的系統行為視角:
輸入嵌入監控
繪製輸入嵌入隨時間的變化,以偵測使用者詢問內容的轉變:
- 叢集湧現:過去未出現的新輸入叢集可能指示協同對抗性活動
- 叢集漂移:既有叢集移動位置可能指示漸進主題演化或操縱
- 離群偵測:遠離任何既有叢集的輸入可能是新型攻擊
輸出嵌入監控
追蹤輸出嵌入以偵測模型產出的改變:
- 對齊走廊:為可接受輸出定義嵌入空間中的預期區域。落在走廊外的輸出可能違反政策。
- 禁止區域:為已知有害內容類別定義嵌入空間區域。靠近這些區域的輸出觸發警報。
- 與已知有害內容的相似度:計算輸出與有害範例資料庫間的相似度。
RAG 來源監控
對檢索增強生成系統,監控檢索文件的嵌入空間:
- 來源汙染:檢索語料中出現的新文件在對抗性內容附近聚集
- 檢索漂移:最常被檢索文件的變化
- 注入偵測:含嵌入指令的文件 (與提示詞注入樣板有高相似度)
建立異常偵測管線
建立基線
蒐集 2-4 週的正常運作資料。為所有關鍵指標計算統計基線。辨識自然樣式 (日週期、週週期、季節樣式)。
選擇偵測方法
對每種威脅類型選擇適當偵測方法。結合多種方法以達縱深防禦。依系統最可能的攻擊向量優先排序方法。
設定初始閾值
從保守閾值開始 (低敏感度、最小偽陽性)。使用歷史資料校準偵測率。
部署監控
對關鍵訊號實作即時監控,對趨勢分析實作批次監控。確保監控不引入顯著延遲。
調整與迭代
每週審查警報。依偽陽性/陰性率調整閾值。新攻擊樣式出現時新增偵測規則。移除持續產生偽陽性的規則。
規避異常偵測
紅隊成員應理解異常偵測如何被繞過:
- 基線汙染:於基線蒐集期逐步引入對抗性樣式使其變成「正常」
- 擬態:研究正常使用者行為,並將攻擊樣式與之匹配 (請求時點、主題分布、輸入長度)
- 分散式攻擊:使用多個帳號或 IP 位址以保持逐使用者指標於正常範圍
- 漸進升級:足夠緩慢地改變行為,使漂移偵測不觸發 (「煮青蛙」方法)
- 雜訊注入:將對抗性請求與合法請求混合以稀釋統計訊號
相關主題
- AI 監控與可觀測性 — 更廣泛的監控架構
- 日誌架構 — 捕捉異常偵測所需的資料
- 輸入/輸出過濾 — 異常偵測所補充的預防性控制
- 提示詞盾牌 — 行內偵測方法
參考資料
- "Detecting LLM Jailbreak Attempts Using Perplexity-Based Methods" - Jain et al. (2024) - 使用困惑度作為偵測對抗性 LLM 輸入訊號的研究
- "Embedding Space Anomaly Detection for LLM Safety" - Chen et al. (2025) - 透過嵌入空間監控偵測有害輸出的方法
- "Data Drift Detection for ML Systems" - Huyen (2024) - 適用於 AI 監控的漂移偵測方法綜論
- "Baseline Defenses for Adversarial Attacks Against Aligned Language Models" - Alon & Kamfonas (2023) - 對齊語言模型對抗性輸入偵測方法調查
為何基於困惑度的偵測對 GCG 風格對抗性後綴有效,但對自然語言越獄無效?