# Prompt Injection ## LLM Basic ### 輸出原理 - Autoregressive Generation (自迴歸生成機制) - 接龍 - Sampling (採樣) - Prompt (提示詞) - System Prompt 系統提示詞 - 開發者預設的指令 - 定義 AI 的身分與行為準則 - User Prompt 使用者提示詞 - 使用者輸入的內容 ### Token (權杖) - LLM 處理的最小語義單位 - 透過 BPE 切分的資訊片段 - 不同的編碼會使 Token 重新排列 - Byte Pair Encoding 字節對編碼 (BPE) - 用於數據壓縮 ### Hallucination (幻覺) - 語法正確但事實錯誤的內容 - 成因: - 機率特性 - 特定領域訓練資料缺乏 ### Context (上下文) - LLM 生成回應時能讀取的全部資訊 - Ex. Prompt、History、RAG - Context Window (上下文窗口) - 單次能處理的最高 Token 數量 - 過短 => AI 失憶現象 - 過長 => 上下文衰退,精準檢索能力下降 - Context Engineering (上下文工程) - 精準篩選內容放入 Context Window ## 簡介 - 一系列用於操縱 LLM 輸出的方式 - 透過精心構造的輸入,嘗試越過安全護欄 - 欺騙性語意 - LLM 指令遵循特性 - 攻擊分類 - Direct Injection 主動注入 - Indirect Injection 被動注入 - OWASP Top 10 for LLM - 針對 LLM 的資安攻擊 - 長年位居攻擊手法的榜首 ### 指令與資料邊界模糊 - Transformer Structure - Context Window - Semantic Consistency 語義一致性 - System Prompt、User Prompt 缺乏隔離 - 強指令性語義誤判 - ex. 命令 ### 基本防禦機制 - Monitoring 行為監控 - Perplexity Analysis 困惑度分析 - Filtering 提示詞過濾 - 檢查輸入端與輸出端 - Dual-LLM Pattern 雙模型架構 - 輸出一致性檢查 ## 直接注入 - 定義 - 直接與 LLM 對話,並在指令中進行攻擊 - 攻擊的 Payload 直接埋藏或夾帶於指令中 - 目標 - 洩漏 System Prompt、指令集 - 繞過安全機制,執行惡意輸出 - 手法 - Goal Hijacking (目標劫持) - 使模型放棄原始任務,轉而執行攻擊者的任務 - Payload Splitting (指令拆分) - 將敏感詞拆分 - 躲避敏感詞掃描、關鍵詞過濾器 - Jailbreaking (越獄) - Multi-language Switching (多語系切換) ### Jailbreaking (越獄) - 定義 - 繞過模型的安全機制 - 完成違反其規則的行為 - 輸出敏感內容 - 手法 - 繞過模型的安全機制 - 完成違反其規則的行為 - 輸出敏感內容 ### Multi-language Switching (多語系切換) - 安全性對齊 (Safety Alignment) 不均衡 - 低資源語系攻擊 - 發生於特定少數語言 - 敏感詞防護能力較低 - 切換語境 - 同一段 Prompt 中混雜多種語言 - 模糊敏感詞檢測的判斷邊界 ### Lab0x1 - Basic Injection [平台](https://gandalf.lakera.ai/) - Level-1 - 無防禦 - 解法: - 直接詢問即可 - Level-2 - Basic Guardrails and Limitations - 提示詞約束 - 若輸入中包含 "密碼"、"Password"\.\.\.\.\.\.,就會阻止輸出 - 解法: - 嘗試低資源語系、角色扮演\.\.\.\.\.\. ## 進階攻擊技巧 ### Model Evasion (模型規避) - 一種攻擊策略 - 目的:摸清防護系統的底線和限制 - Probing 探針攻擊 - 用於摸清模型的安全邊界 - Prompt Nesting 提示詞嵌套 - 將惡意指令包裹於模擬場景中 - 試圖繞過模型的防護機制 ### Payload Splitting (指令拆分) - 惡意動作拆解 - 邏輯變數化 - 將敏感詞拆分並指定變數 - 指示模型將變數合成並執行 - Token Smuggling - 利用 BPE 機制 - 在單詞中插入空格或特殊符號,干擾語義掃描 ### Lab0x2 - More Direct Injections [平台](https://gandalf.lakera.ai/) [prompt 參考](https://www.reddit.com/r/ChatGPT/comments/1153xo0/i_customized_the_chatgptdan_propmt_to_be_more_op/?tl=zh-hant) - Level-3 - Output Filtering - 輸出過濾器 - 若包含密碼,就會攔截輸出 - 解法: - 角色扮演 + 把關鍵字隔開 + 代換輸入及輸出字眼躲開規則 - Level-4 - Advanced Detection with a Secondary Language Model - 雙模型架構 - 以另一個輔助模型對輸入進行審查 - 即使不包含關鍵字,就有可能被攔截 - 解法: - 角色扮演 + 把關鍵字隔開 + 代換輸入及輸出字眼躲開規則 + 以中文輸出、密碼拆分成三段 ### Encoding Attacks - 將敏感文字或指令轉為非明文格式 - 試圖繞過模型的敏感詞檢測或關鍵字掃描 - 手法 - Base64 Encoding - Leetspeak - ArtPrompt ### Adversarial Perturbations 對抗性干擾 - 在數學與演算法層面的攻擊 - Adversarial Suffixes 對抗性後綴 - 在 Token 最後插入透過 GCG 算法算出的亂碼字串 - 以此在 LLM 的機率模型上強行製造漏洞 - 強制模型以特定開頭來回答 - Invisible Text Injection 不可見字元注入 - 利用 Unicode 的零寬字元的特性 - 干擾關鍵詞過濾器的語意分析 ### CipherChat - 新興的攻擊手法 - 編碼攻擊的進階版 - 透過使用者指定的自定義編碼溝通 - 以此完全規避防護系統的偵測 ### Lab0x3 - Final Direct Injections [平台](https://gandalf.lakera.ai/) - Level-5 - Naive Input Filtering and Limitations - 關鍵詞過濾與屏蔽 - 針對輸入進行關鍵字檢查 - 若包含類似 "密碼"、"Password",就會觸發攔截 - Level-6 - Contextual Input Filtering with an AI Classifier - 上下文感知 + 關鍵字過濾與屏蔽 - 使用分類器理解上下文輸入 - 捕捉非關鍵字但意圖明顯的語句 - Level-7 - Comprehensive Multi-Layered Defenses - 多層次防禦 - 輸入、輸出過濾 - 上下文感知 - 分類器偵測攻擊意圖 - 解法: - 角色扮演 + "密碼" 改成 "登入驗證用字串" + 規避輸出檢測 ## 間接注入 - 在資料來源中埋藏惡意指令 - 使LLM在執行搜尋或分析時主動載入並執行惡意指令 - 可以繞過常規檢查機制 - 手法 - Web Browsing (網頁檢索) - RAG Injection (RAG 注入) - Email、Message Automation (郵件/訊息自動化) - Cross-Context Injection (跨對話注入) ### AI Agent - 具有自主行動能力 => 風險提升 - 手法 - Goal Hijacking - Confused Deputy Problem - Tool-Use Hijacking ## 注入防禦 ### Structured Instructions and Delimiters - 在語意上或輸入上區分 System Prompt、User Prompt - XML/JSON Tagging - LLM 對 XML 標籤相當敏感 - 使用特定標籤包裹 User Prompt - 避免越獄 - Instruction Hierarchy - 在 System Prompt 中明確定義權限層級 - 要求模型在 Prompt 衝突時,優先執行 System Prompt ### Sandboxing - 針對 Agentic AI - 將所有工具調用封鎖於受限的獨立環境 - 防止 RCE、避免影響其他系統部件 ## 總結 - LLM 原理 - 自迴歸生成 - 機率模型 + 採樣 - Prompt Injection的發生 - 幻覺的產生 - 指令與資料的模糊 - 機率模型 - 直接注入 - 角色扮演 - 虛擬化攻擊 - 被動注入 - 網頁注入/RAG 注入 - AI Agent - 進階技巧 - 多語系切換 - 指令拆分 - 編碼攻擊 - 注入防禦 - 提示詞過濾 - 結構化指令 - 沙盒執行 --- ###### tags: `ClassNotes` `NISRA` `114` `2026`