LLM的安全訓練主要是透過多層的防禦體系(Defense-in-Depth)
大型語言模型的安全防護,採用的是多層防禦體系(Defense-in-Depth),假設每一層都是不安全的防禦機制,確保即使有任何一層被攻破,其他層也可以防禦住攻擊。
核心在於模型內建對齊(Model-Internal Alignment)以及外部輸入與輸出過濾(Input and Output Guardrails,預處理和後處理)
依照指令與資料的輸入、LLM內建的防禦與LLM的輸出過程來講LLM的多層防禦體系。
一開始指令和資料進入LLM會遇到的安全訓練是外部的輸入過濾
一、外部的輸入過濾(Input Guardrails,預處理)
主要分成四個部分,格式標準化、關鍵字和正則比對(Regular Expression 正規表達式比對)、輕量安全模型掃描和語意向量偵測,核心的目標就是不要讓危險的東西進入主要的LLM,同樣是以多層的防禦體系(Defense-in-Depth)的設計方式,透過流水線從極快的格式標準化到語意向量掃描。
1格式標準化、解碼清洗,透過將所有的字元格式標準化和清洗掉多餘的符號和異常的空白。
2比對過去攻擊關鍵字、特徵、符號、規則
3輕量安全模型掃描,透過已經定義過的安全政策的輕量模型快速推論出背後的潛在惡意。
4語意向量相似度比對,跟上一個比對不同是,這是將攻擊庫轉換語意向量座標來比對距離,可能原先看起來完全不一樣的,但是在向量空間非常近,表示可能是過往攻擊的變形。
最後如果判斷是攻擊提示詞,會阻斷回應,並且記錄在安全審計日誌上Audit Logging,作為日後的材料。
接著指令進到LLM裡面,會遇到什麼?
**二、LLM內建的防禦
**
包括安全對齊訓練(Safety SFT & RLHF / RLAIF)和系統提示詞(System Prompt)
安全對齊訓練會直接改變模型神經網路的權重,將拒絕回答有害的輸出調整成最高機率的路徑。
實際上有兩種訓練方式, 加上一個提供訓練資料的測試流程。
拒絕範例學習(Safety SFT)
人類和AI反饋強化學習(RLHF / RLAIF)
紅隊測試(Red Teaming)
1.拒絕範例學習(Safety SFT),主要是透過在訓練資料中,混入大量的惡意提問攻擊,並且配上標準的拒絕回答,教LLM看到危險的輸入就會輸出標準的拒絕回答。
2.RLAIF(Reinforcement Learning from AI Feedback,AI 反饋強化學習)與 RLHF(Reinforcement Learning from Human Feedback,人類反饋強化學習)
兩者都是透過強化學習來對齊模型,讓模型的回答更有幫助、基於事實並且沒有傷害。
RLAIF(AI反饋)由AI 依照一份人類事先寫好的書面原則, 來評價和排序模型的回答。
RLHF (人類反饋)則是由人類標記員比較同一個問題的多個回答, 排出偏好順序;這些排序先用來訓練
一個「獎勵模型」 (專門替回答打分數的模型) , 再由獎勵模型去引導主模型調整。。
3.紅隊測試(Red Teaming),則是讓資安專家和自動化攻擊模型,不斷嘗試越獄,找出漏洞後把攻擊資料加入微調集,修復防禦漏洞,會作為人類和AI反饋強化學習的資料。
以及不影響權重的系統提示詞
系統提示詞(System Prompt),跟一般大家寫給Claude、ChatGPT寫的提示詞很像,只是這邊指的系統提示詞,是由LLM公司或是API的開發者寫入的,並且作為每次的對話行為基準,模型被訓練成優先遵守系統提示詞, 但這不是絕對保證, 提示詞注入攻擊就是在試圖推翻。
為什麼第二層也可能會擋不住,安全訓練教模型拒絕有害的提問,但 Skill 裡的指令看起來像正常的工作說明,模型會把它當成應該遵守的內容。
最後當指令繞過了前面層層的防禦機制,LLM要輸出回覆前,還會遇到外部輸出的過濾,確保LLM輸出不會有問題。
外部輸出過濾(Output Guardrails,後處理)
外部輸出過濾分別有幾層
1.串流即時審查(Streaming Inspection)在回傳給使用者的過程中,檢查敏感資訊、洩漏系統提示詞的內容,並且切斷連線改為錯誤訊息。
如果有時候你遇到AI回傳訊息到一半突然斷掉,改成錯誤訊息,可能是因為串流即時審查。
2.敏感資訊去識別化,將模型可能不小心輸出的個人資訊,包括個人資訊(電話號碼、身分證字號、信用卡號)和憑證(API Key),即時替換為遮罩。
3幻覺與事實檢驗(Fact-checking / Consistency Guard
在一些高嚴謹的場合,比對模型回答與知識庫來源的文本依賴關係,避免幻覺。
第一層的輸入過濾,也是我在做Claude Skill掃毒軟體小章魚,最先想到要做和設計的防禦方式,將有危害的Skill擋在外面。
這三層防禦的設計前提,是危險來自使用者的提問。但Claude Skill不是使用者打進來的字,它是被當成「可信任的說明書」載入的。如果輸入過濾只檢查使用者訊息, 那Skill檔案、工具回傳的結果, 可能沒經過第一層的比對和掃描。
這就是所謂的間接提示詞注入 (攻擊指令藏在模型讀取的資料裡, 而不是使用者的提問裡) 。
小章魚在做什麼?把輸入過濾的檢查點往前移,在 Skill 被安裝之前就掃描,而不是等它進到對話裡。