# 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`