
最近關(guān)于 Anthropic 旗下 Claude 舊模型可被越獄生成違規(guī)內(nèi)容的討論又把“大模型安全防護”這件事推到臺前。很多人第一反應(yīng)是看熱鬧原來大模型也沒那么安全。做安全工程的人看到的是另一個問題為什么一個當(dāng)時已經(jīng)做過安全對齊的模型在發(fā)布一段時間之后依然會被一套經(jīng)過設(shè)計的輸入繞過這件事真正值得關(guān)注的不是某個具體攻擊樣本能產(chǎn)生什么內(nèi)容而是它暴露出的結(jié)構(gòu)性矛盾——模型能力在持續(xù)擴展但安全對齊始終滯后于能力的增長。換句話說大模型安全防護不是一次性發(fā)布會上的演示結(jié)論也不是模型權(quán)重里“自帶”的一個開關(guān)。它是一個需要在發(fā)布前、發(fā)布后、運行期和迭代期持續(xù)維護的對抗過程。如果你正在搭建基于大模型的應(yīng)用或者負責(zé)給內(nèi)部系統(tǒng)接入 Claude、GPT 這類模型那這個話題就離你很近。這篇文章不談獵奇只從工程視角拆解三件事舊模型為什么容易被越獄安全評測為什么不能只靠一組靜態(tài)用例以及部署側(cè)到底應(yīng)該怎么把防護做到模型之外。1. 一次安全事件暴露的是“對齊”和“能力”之間的錯位1.1 模型能力越強對齊滯后越明顯先想一個基礎(chǔ)問題為什么模型會“知道”哪些內(nèi)容不能生成原因是它在訓(xùn)練階段已經(jīng)被灌入了一套人類偏好規(guī)則比如無害性、拒絕違規(guī)內(nèi)容、避免生成危險代碼。這套規(guī)則在深度學(xué)習(xí)里通常被稱為對齊alignment常見做法是 RLHF、RLAIF 或者 DPO 這類偏好優(yōu)化方法。但這里有一個容易被忽略的事實對齊不是一次訓(xùn)練完成之后就永久固定的屬性。模型的語言能力、上下文理解能力、指令跟隨能力是多輪訓(xùn)練疊加出來的而對齊策略往往是在某一個訓(xùn)練階段加入的。當(dāng)模型后續(xù)繼續(xù)做大、繼續(xù)擴展上下文、繼續(xù)強化工具調(diào)用能力時新的能力會不斷涌現(xiàn)其中一些能力會與已有的安全規(guī)則產(chǎn)生沖突。舊模型的問題就在這。它發(fā)布時能力邊界和安全規(guī)則是匹配的。等社區(qū)開始基于它做二次開發(fā)、做更長的上下文微調(diào)、接入外部工具之后模型的“新能力”會繞過當(dāng)初設(shè)計好的安全邊界。這很像一個操作系統(tǒng)剛發(fā)布時漏洞少但隨著新功能、新驅(qū)動和新協(xié)議不斷加入舊的安全補丁就會漏出空隙。1.2 舊模型并不是“沒做過安全訓(xùn)練”而是訓(xùn)練目標(biāo)太靜態(tài)網(wǎng)上有一種聲音說舊模型之所以被越獄是因為“當(dāng)時沒有做安全訓(xùn)練”。這種說法不準(zhǔn)確。Anthropic 的產(chǎn)品模型從一開始就有安全對齊設(shè)計包括拒絕策略和有害內(nèi)容過濾。真正的問題不是“沒有防護”而是防護的覆蓋范圍是靜態(tài)的。什么意思訓(xùn)練階段的安全規(guī)則通常是基于當(dāng)時對風(fēng)險的理解采集了一批攻擊方式、一批有害請求、一批預(yù)期行為然后讓模型學(xué)會拒絕或回避。但對抗攻擊是動態(tài)演進的。攻擊者不會拿著訓(xùn)練集里的標(biāo)準(zhǔn)問題去問模型他們會不斷設(shè)計新的上下文、新的編碼方式、新的對話結(jié)構(gòu)去試探模型的指令跟隨邊界。這就是我常說的一句話“模型的安全能力本質(zhì)上是一個對抗博弈下的有限快照?!蹦阌渺o態(tài)數(shù)據(jù)集去訓(xùn)練安全拒絕能力模型學(xué)會的也只是“拒絕這些樣本的能力”而不是“拒絕所有違規(guī)內(nèi)容的能力”。一旦攻擊方式超出訓(xùn)練分布模型的舊防線就失效了。這個矛盾在舊模型上尤其明顯訓(xùn)練時間越早見過的對抗模式越少攻擊者積累的研究時間越長找到盲區(qū)的概率就越高。所以安全事件陸續(xù)出現(xiàn)在舊版本上幾乎是一個必然結(jié)果。注意不要把“舊模型可被越獄”理解成模型完全不可用。它的意思是模型的安全邊界存在盲區(qū)在正式接入業(yè)務(wù)前必須疊加額外防護而不是把模型文檔里的安全承諾當(dāng)成最終結(jié)論。2. 越獄不是一條咒語而是一組結(jié)構(gòu)性繞過方式2.1 角色偽裝和上下文覆蓋在安全團隊內(nèi)部越獄攻擊通常不叫“咒語”而叫“對抗性輸入”。它和傳統(tǒng)安全里的 SQL 注入、XSS 一樣核心思路是讓模型在“使用規(guī)則”和“遵守請求”之間發(fā)生沖突。最常見的模式是角色偽裝。攻擊者會讓模型扮演某個虛構(gòu)角色這個角色的身份設(shè)定里寫明了“不受約束”“可以討論任何話題”。模型在指令跟隨能力被激活后可能優(yōu)先執(zhí)行扮演邏輯而暫時弱化自己的安全拒絕邏輯。對于舊模型因為訓(xùn)練時接觸過的角色扮演樣本相對少這種覆蓋的成功率就會更高。還有一類是上下文覆蓋在很長的上下文里把違規(guī)意圖埋在中后段前面用大量正常內(nèi)容把模型的注意力占了。模型對指令的優(yōu)先級判斷能力有限越長的上下文越容易出現(xiàn)遺漏或誤判。2.2 漸進式誘導(dǎo)與多輪拆分比單次繞過更有威脅的是漸進式構(gòu)造。攻擊者不直接提交一個會被拒絕的請求而是先把話題拆成多個看似獨立的步驟在每一步都誘導(dǎo)模型完成內(nèi)容片段最后再把所有片段拼成完整輸出。這是工程上特別難防的一類攻擊因為單看每一輪問答幾乎所有內(nèi)容都在正常范圍。比如讓模型描述一個角色的某個特征、再補一個場景、再補一段情緒每一步都能通過常規(guī)安全檢測但組合起來就完成了完整生成。傳統(tǒng)的單次內(nèi)容過濾在這種場景里幾乎沒有效果。這類攻擊考驗的不是模型的單條拒絕能力而是整個對話狀態(tài)的管理能力。模型需要能夠識別“多輪組合后可能指向違規(guī)目標(biāo)”的意圖這對當(dāng)前很多模型來說仍然是一個開放問題。2.3 編碼混淆與格式繞過舊模型還可能被編碼式輸入騙過。比如用 Unicode 變體、大小寫混寫、同音字替換、代碼塊包裹、Markdown 格式控制等手段讓安全分類器無法識別原始語義但模型本身仍然能理解。這類繞過方法看起來技術(shù)含量高但本質(zhì)上是對“安全規(guī)則與指令理解能力之間存在夾角”的利用。模型足夠聰明能讀懂被編碼過的意圖但安全分類器是基于表面文本特征訓(xùn)練出來的一旦文本形態(tài)發(fā)生變化分類能力就下降。這也是為什么不少安全團隊會說防越獄不能只看模型輸出前的拒絕邏輯必須同時看輸入端和輸出端的獨立檢測。2.4 為什么不寫具體樣本關(guān)于這類攻擊我到這一步就停。原因不是故弄玄虛而是安全博客必須有一個邊界我們討論攻擊模式是為了讓防御方理解威脅結(jié)構(gòu)而不是提供一份可復(fù)制的測試用例。具體的攻擊樣本一旦擴散就會成為更多人的輸入腳本反而降低模型被大規(guī)模惡意使用的門檻。正確的做法是安全團隊在內(nèi)部把攻擊樣本當(dāng)作“紅隊彈藥”在公開場合只討論分類學(xué)、防御策略和評測框架。這也是很多大模型廠商發(fā)布安全報告時采用的方式給類別、給趨勢、給緩解建議不直接給完整的可復(fù)現(xiàn)攻擊提示詞。3. 安全評測怎么才能不像“事后補丁”3.1 從單輪問答到多輪對話評測很多團隊在評測模型安全能力時習(xí)慣用一組單輪問答數(shù)據(jù)集把問題發(fā)給模型看它是否拒絕。這種評測方式能覆蓋基礎(chǔ)情況但對前面提到的漸進式誘導(dǎo)幾乎無效。正確做法是引入多輪對話評測。每一輪不只檢查當(dāng)前回答還要評估整個對話鏈路的意圖累積。比如前幾輪都在討論正常內(nèi)容最后如果組合起來可能指向違規(guī)生成就應(yīng)觸發(fā)防御策略。這需要評測系統(tǒng)不僅記錄單條輸出還要追蹤對話狀態(tài)、用戶意圖和語義方向。我建議的落地方式是先構(gòu)造 10 到 20 個典型的漸進式誘導(dǎo)場景每個場景包含 5 到 10 輪對話然后手動檢查模型在哪個節(jié)點開始偏離安全邊界。這個數(shù)量不用多但結(jié)構(gòu)必須完整覆蓋角色扮演、長上下文覆蓋、編碼混淆、多輪組合等不同類別。3.2 從已知紅隊樣本到對抗性生成固定數(shù)據(jù)集只能測出“已知漏洞”測不出“未知盲區(qū)”。所以安全評測要加入對抗性生成環(huán)節(jié)。具體做法是準(zhǔn)備一個攻擊樣本生成器它可以基于現(xiàn)有攻擊模式自動組合變體再批量輸入給目標(biāo)模型。這個過程重點不是追求單條成功而是觀察成功率的變化趨勢。如果你改一個系統(tǒng)提示詞之后對抗性生成的成功率從 8% 降到 3%這是一個可量化的改進如果降幅不明顯說明防護策略沒有真正改變模型的決策邊界。這里要注意對抗性生成本身需要放在隔離的測試環(huán)境里跑不能用生產(chǎn)環(huán)境的真實用戶流量做實驗。默認建議是單獨拉一套模型服務(wù)配置虛擬輸入輸出不做真實業(yè)務(wù)調(diào)用。3.3 回歸測試釋放新版本時舊漏洞是否復(fù)活安全評測最容易忽略的是回歸測試。許多團隊只在新模型上線前做一次安全評測之后就不再持續(xù)驗證。但大模型應(yīng)用是動態(tài)的你改了系統(tǒng)提示詞、升級了模型版本、調(diào)整了上下文長度都可能影響已有的安全行為。強烈建議每次配置變更、模型升級或提示詞調(diào)整之后都跑一遍回歸用例?;貧w用例應(yīng)該包含三部分歷史攻擊樣本的變體集上一輪評測中暴露的失敗用例和當(dāng)前業(yè)務(wù)場景強相關(guān)的自定義邊界用例回歸測試不需要每天跑但至少在發(fā)布前和重大調(diào)整后必須跑。你可以把它看成傳統(tǒng)軟件工程里的安全回歸功能沒變不代表安全屬性沒變。實際經(jīng)驗多數(shù)越獄問題不是新版模型突然變笨而是舊版模型在使用一段時間后被社區(qū)發(fā)現(xiàn)了一些當(dāng)初沒發(fā)現(xiàn)的盲區(qū)。所以如果你的業(yè)務(wù)依賴某個固定版本的模型且無法快速升級就必須在應(yīng)用層額外部署過濾和審計機制不能把全部安全責(zé)任壓給模型。4. 部署側(cè)的縱深防御別指望模型獨自拒絕4.1 輸入層先過濾再進模型在真實業(yè)務(wù)系統(tǒng)中模型從來不應(yīng)該接收到用戶的原始輸入就立刻開始推理。更穩(wěn)妥的流程是在輸入層加一道過濾包括請求長度控制、敏感內(nèi)容檢測、惡意意圖識別等。它不一定能做到百分之百準(zhǔn)確但能篩掉大量明顯違規(guī)的輸入尤其是一些簡單直接的角色偽裝和關(guān)鍵詞攻擊。這層過濾可以由輕量分類模型承擔(dān)也可以用規(guī)則加分類模型組合來實現(xiàn)。我不建議依賴單一規(guī)則因為攻擊者很容易變種繞過也不建議一上來就上大模型審核成本和延遲都偏高。先小模型粗篩再按置信度分批更符合生產(chǎn)環(huán)境的要求。輸入層的另一個關(guān)鍵是長度控制。超長上下文請求是很多越獄攻擊的溫床。如果你的業(yè)務(wù)場景不需要支持超長上下文可以在 API 網(wǎng)關(guān)層設(shè)置最大請求長度。這個限制能直接砍掉一批依賴長上下文遮蓋的攻擊。4.2 輸出層分類器兜底輸入過濾再強也可能存在誤判和漏判。輸出層應(yīng)該再放一道分類器對模型生成的內(nèi)容做二次判定。檢測維度包括主題、語義、預(yù)期效果等。如果輸出被判定為高風(fēng)險可以阻止返回、替換為模板回答或進入人工審核。這里有一個細節(jié)輸出分類器的閾值不要太激進。如果閾值設(shè)得太嚴(yán)會大量攔截正常內(nèi)容影響業(yè)務(wù)體驗。我一般建議先統(tǒng)計一小段正常流量找到輸出分類分?jǐn)?shù)的分布再把閾值設(shè)在低于 1% 正常內(nèi)容會被誤殺的曲線上。后續(xù)根據(jù)線上反饋逐步收緊。4.3 策略層場景隔離和權(quán)限最小化不同業(yè)務(wù)場景的安全要求不同。一個做內(nèi)部知識庫問答的系統(tǒng)和一個面向公眾的開放聊天機器人安全水位應(yīng)該完全不一樣。所以部署時要考慮場景隔離??梢园达L(fēng)險等級把模型應(yīng)用分成幾類場景類型示例建議安全措施低風(fēng)險內(nèi)部文檔問答、代碼注釋生成基礎(chǔ)輸入過濾、輸出審計中風(fēng)險客服助手、教育工具輸入過濾、輸出分類、敏感詞二次檢查高風(fēng)險開放聊天、UGC 創(chuàng)作輔助、多角色扮演多級審核、人工抽檢、內(nèi)容指紋、限流權(quán)限最小化也值得單獨說。模型接入工具、數(shù)據(jù)庫、外部 API 時只授予完成業(yè)務(wù)必需的最小權(quán)限。不要把數(shù)據(jù)庫全量讀取權(quán)限給模型也不要把生產(chǎn)環(huán)境的寫權(quán)限放給一個可能被越獄的模型。這跟傳統(tǒng)安全里的“最小權(quán)限原則”完全一致但很多大模型應(yīng)用開發(fā)者容易忽略。4.4 審計層日志才是追責(zé)的基礎(chǔ)日志是最容易被忽視的防護層。很多團隊只記錄 API 調(diào)用成功率和耗時不記錄輸入內(nèi)容、輸出內(nèi)容和判定結(jié)果。一旦發(fā)生安全事故想復(fù)盤都找不到材料。建議至少記錄以下字段請求 ID 和會話 ID輸入文本哈?;蛎撁艉蟮妮斎腙P(guān)鍵內(nèi)容模型版本和提示詞版本輸入過濾結(jié)果和輸出分類結(jié)果用戶標(biāo)識和場景標(biāo)識時間戳和響應(yīng)耗時這里要強調(diào)脫敏處理。日志里不要直接存完整用戶輸入尤其涉及隱私信息時可以先做脫敏、哈希或截斷。日志的用途是審計和回溯不是為了完整保存每一次對話。如果你做的是面向公眾的服務(wù)日志還有另一個作用發(fā)現(xiàn)新的攻擊趨勢。通過分析被輸入過濾命中的請求你能知道攻擊者最近在嘗試哪類模式從而更新對抗性測試用例集。5. 安全防護“形同虛設(shè)”的真相邊界、成本和現(xiàn)實判斷5.1 沒有 100% 安全只有安全水位“Claude 舊模型可被越獄”這類新聞如果只看標(biāo)題很容易得出一個判斷大模型安全防護完全沒用。這個判斷太極端也不符合工程現(xiàn)實。更準(zhǔn)確的理解是大模型的安全防護從來不是一道閘門而是一套分層水位。模型自帶的對齊能力是第一層輸入過濾是第二層輸出分類是第三層人工審核和日志審計是第四層。每一層都可能被繞過但繞過成本會逐層遞增。安全工程的目標(biāo)不是把第一層修到無敵而是讓整體水位高于攻擊者的收益預(yù)期。對一個想生成違規(guī)內(nèi)容的攻擊者來說如果他要繞過多層過濾需要花費大量時間構(gòu)造輸入并且成功概率還不穩(wěn)定那這套系統(tǒng)就起到了威懾作用。反過來如果系統(tǒng)只依賴模型自帶拒絕沒有任何外部過濾那攻擊者只要發(fā)現(xiàn)一個盲區(qū)就能穩(wěn)定復(fù)用。5.2 越獄防護成本隨模型規(guī)模上升很多人問為什么大模型廠商不直接把所有舊模型都做一次重新對齊答案很大程度是成本和收益問題。重新對齊不是簡單跑一次微調(diào)它需要準(zhǔn)備新的對齊數(shù)據(jù)、重新偏好訓(xùn)練、跑安全評測、做回歸測試然后還要經(jīng)過灰度發(fā)布。對一個大模型產(chǎn)品線來說歷史版本可能很多每個版本都做同等強度的安全更新成本會急劇上升。所以廠商通常的做法是集中維護主流版本對舊版本只做有限修復(fù)或建議用戶升級。這給應(yīng)用方的啟示是如果你在生產(chǎn)環(huán)境長期依賴一個已經(jīng)不再積極維護的模型版本那你必須默認它的安全能力是固定的不會越來越強反而會因為攻擊研究的積累而越來越脆。這時候外部防護層的價值就變得非常高。5.3 哪些場景適合繼續(xù)使用舊模型哪些不適合這是我的一個基本判斷如果你在做內(nèi)部工具數(shù)據(jù)不對外公開模型只處理受信任的員工輸入舊模型的風(fēng)險可控配好輸出審計即可。如果你在做面向公眾的開放產(chǎn)品模型會被任意用戶輸入觸發(fā)那舊模型的安全風(fēng)險會明顯更高必須疊加多層防護。如果你讓模型具備工具調(diào)用、數(shù)據(jù)庫訪問、外發(fā)消息等權(quán)限那即使是很小的越獄也可能造成橫向風(fēng)險這種情況下不建議直接使用缺乏維護的舊模型。這個判斷不是否定舊模型而是提醒你要根據(jù)業(yè)務(wù)暴露面做風(fēng)險決策。暴露面越大權(quán)限越高模型版本越舊風(fēng)險系數(shù)就越高。5.4 一個可復(fù)用的防護檢查清單最后把前面所有內(nèi)容收成一份檢查清單方便你在新項目或已有項目里直接對照使用是否給模型請求設(shè)置了最大上下文長度是否在輸入層配置了敏感內(nèi)容檢測和惡意意圖識別是否在輸出層增加了內(nèi)容分類器是否保留了每次請求的模型版本和提示詞版本是否記錄輸入輸出日志并做了脫敏處理是否對模型權(quán)限進行了最小化設(shè)置是否準(zhǔn)備了漸進式多輪攻擊的評測用例是否在模型升級和提示詞變更后執(zhí)行安全回歸測試是否在開放場景中設(shè)置了人工抽檢機制是否對舊模型版本做了額外的外部防護補償這十條不是安全合規(guī)的終點而是一個起點。每一條都可以根據(jù)你的業(yè)務(wù)規(guī)模、團隊人力和成本預(yù)算進一步細化?;氐介_頭那句話大模型安全不是一次性發(fā)布的結(jié)果而是一個持續(xù)對抗的過程。今天關(guān)于舊模型可被越獄的討論本質(zhì)上是這個對抗過程的一次公開快照。做安全的人不需要神話模型的自帶防護也不必因為一次事件就否定整條技術(shù)路線真正要緊的是把每一層防護都做實讓每次攻擊嘗試都能被記錄、被分析、被改進。如果你正在把 Claude 或其他大模型接入自己的業(yè)務(wù)我給你的建議只有一個不要把模型的安全能力當(dāng)成現(xiàn)成的安全邊界而是把安全評測、輸入過濾、輸出分類和日志審計作為應(yīng)用開發(fā)的一部分從第一天就放進去。這樣即便未來某個版本被曝出新的越獄方式你已經(jīng)有了可以快速響應(yīng)和迭代的防護框架。