避免快速注入攻擊的最佳實務 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

避免快速注入攻擊的最佳實務

以下護欄和最佳實務已在採用 Anthropic Claude 做為示範模型的 RAG 應用程式上進行測試。這些建議高度適用於 Claude 系列模型,但也可以轉移到其他非 Claude LLMs,等待模型特定的修改 (例如移除 XML 標籤並使用不同的對話屬性標籤)。

使用 <thinking> 和 <answer> 標籤

基本 RAG 範本的實用新增是 <thinking><answer> 標籤。 <thinking> 標籤可讓模型顯示其工作並呈現任何相關摘錄。 <answer>標籤包含要傳回給使用者的回應。在經驗上,當模型回答需要將多個資訊來源拼湊在一起的複雜且細微的問題時,使用這兩個標籤可提高準確性。

使用護欄

保護採用 LLM 的應用程式需要特定的防護機制,才能確認並協助防禦先前描述的常見攻擊。當我們設計本指南中的安全護欄時,我們的方法是透過引入範本的最少權杖數量產生最大效益。由於大多數模型供應商都使用輸入字符收費,因此字符較少的護欄具有成本效益。此外,已顯示過度工程化的範本可降低準確性。

在單對加鹽序列標籤中包裝說明

有些 LLMs遵循範本結構,其中資訊以 XML 標籤包裝,以協助將 LLM 引導至特定資源,例如對話歷史記錄或擷取的文件。標籤詐騙攻擊嘗試利用此結構,方法是將其惡意指示包裝在常見標籤中,並導致模型認為該指令是其原始範本的一部分。透過將工作階段特定的英數字元序列附加到格式為 的每個 XML 標籤,加鹽標籤會停止標籤詐騙<tagname-abcde12345>。額外的指令命令 LLM 僅考慮這些標籤內的指示。

這種方法的一個問題是,如果模型在其答案中使用標籤,無論是預期還是意外,加鹽序列也會附加到傳回的標籤。現在,使用者知道這個工作階段特定的序列,他們可以完成標籤欺騙,可能具有更高的效能,因為命令 LLM 考慮鹽標記指示的指令。為了略過此風險,我們會在範本的單一標記區段中包裝所有指示,並使用僅包含加鹽序列的標籤 (例如 <abcde12345>)。然後,我們可以指示模型只考慮此標記工作階段中的指示。我們發現,這種方法阻止模型洩露其加鹽序列,並協助防禦引入或嘗試增強範本指示的標籤詐騙和其他攻擊。

透過提供特定指示,教導 LLM 偵測攻擊

我們也包含一組說明常見攻擊模式的說明,以教導 LLM 如何偵測攻擊。這些指示著重於使用者輸入查詢。他們會指示 LLM 識別金鑰攻擊模式的存在,並在發現模式時傳回「提示偵測到攻擊」。這些指示的存在讓我們能夠為 LLM 提供處理常見攻擊的捷徑。此捷徑在範本使用 <thinking><answer>標籤時是相關的,因為 LLM 通常會重複且過度詳細地剖析惡意指示,最終可能導致合規 (如下一節的比較所示)。