圖像型提示詞注入攻擊
透過圖像注入對抗性提示詞的完整技術,涵蓋印刷型注入、隱寫術嵌入,以及針對多模態 AI 系統的視覺載荷傳遞。
概述
圖像型提示詞注入是在由視覺語言模型 (VLM) 處理的圖像中嵌入對抗性指令的實踐。當 VLM 處理圖像時,其視覺編碼器將圖像轉換為符元表示,語言模型將其與文字符元完全相同地處理。圖像中任何可見的文字——無論是顯著渲染還是透過低透明度、小字型或顏色匹配隱藏——都會被模型讀取,並可能被遵從為指令。
此攻擊類別被歸類為 MITRE ATLAS AML.T0051.002(透過視覺輸入注入載荷),並映射至 OWASP LLM Top 10 類別 LLM01(提示詞注入)。這是實際影響最大的多模態攻擊之一,因為它不需要任何專業的機器學習知識,在所有主要 VLM 提供商中可靠地工作,並利用無法停用的基本能力(OCR)。
Gong 等人 (2023) 在「FigStep: Jailbreaking Large Vision-language Models via Typographic Visual Prompts」中展示,僅僅將有害指令渲染為圖像中的文字,就能繞過只檢查文字通道的安全過濾器。
注入面:VLM 如何讀取圖像
VLM 被訓練為理解圖像中的文字——讀取標誌、文件、截圖和手寫。OCR 能力不是缺陷;它是核心功能。攻擊面存在是因為模型無法區分恰好在圖像中的文字(良性)和放置在那裡以操縱模型的文字(對抗性)。
注入技術
ImageInjectionGenerator 類別提供五種注入策略:
策略一:可見文字注入(visible_text_injection)
最簡單的注入。文字對人類和 VLM 都清晰可讀。有效性高但隱蔽性為零。用作基準測試:若此方法有效,系統沒有任何圖像層防禦。
策略二:低透明度注入(low_opacity_injection)
在現有圖像上以極低透明度(1-10%)渲染文字,使人類審查者不太可能注意到。VLM 處理完整的像素值,能讀取比人類感知對比度低得多的文字。
- 1-3%:普通檢查不可見,多數 VLM 可讀取
- 4-8%:仔細檢查或對比度增強後可見
- 9-15%:細心審查者可注意到
- 16%+:清晰可見
策略三:顏色匹配注入(color_matched_injection)
對圖像某一區域的主導顏色取樣,以略微不同的色調渲染注入文字(每個通道偏移僅 3 個值)。人類看到均勻的區域;VLM 逐像素處理,能讀取文字。
策略四:白底白字注入(white_on_white_injection)
圖像對人類看起來為空白,但包含 VLM 可讀取的指令。文字顏色為 (252, 252, 252),背景為純白 (255, 255, 255)。在自動化管線中有效,但若有人調整對比度或檢查元資料則隱蔽性低。
策略五:截圖注入(screenshot_injection)
建立看起來像合法網頁截圖但在頁面內容中包含注入指令的圖像。對處理截圖以提取資訊的系統特別有效。
偵測技術
ImageInjectionDetector 類別整合三種偵測方法:
隱藏文字偵測(detect_hidden_text):
- 使用 OCR 提取文字
- 用對比度增強(1x 至 16x)掃描——若只在高增強等級出現文字,則為可疑
- 檢查提取文字是否符合注入模式
色彩異常偵測(detect_color_anomalies):
- 計算局部視窗的逐通道統計資料
- 方差在 0.5 到 5.0 之間的區域可疑(太均勻不是自然的,太有變化不是純色)
- 對色彩匹配注入特別有效
隱寫術內容偵測(detect_steganographic_content):
- 提取 LSB 平面並計算熵
- 自然圖像通常 LSB 熵約 0.95;隱寫術內容使其更接近 1.0
entropy_diff > threshold時標記為可疑
full_scan 方法執行全部三種方法,當 2 個或更多探測器返回可疑時建議封鎖。
系統層級防禦
| 防禦層 | 技術 | 捕捉 | 遺漏 |
|---|---|---|---|
| 預處理 | OCR 提取和文字過濾 | 可見印刷型注入 | 低透明度、顏色匹配、對抗性擾動 |
| 預處理 | 圖像重編碼(JPEG 品質降低) | 部分對抗性擾動 | 印刷型注入、穩健擾動 |
| 預處理 | 對比度增強 + OCR | 低透明度文字 | 複雜圖像中顏色匹配的文字 |
| 架構 | 指令層級(系統 > 用戶 > 圖像) | 降低所有圖像注入的影響 | 不阻止讀取注入文字 |
| 執行時 | 輸出監控,偵測注入指標 | 改變行為的成功注入 | 精心製作的自然輸出注入 |
| 後處理 | LLM 作為裁判,分析合并輸入-輸出 | 廣泛覆蓋 | 延遲成本;裁判本身可被攻擊 |
測試清單
測試系統的圖像型提示詞注入漏洞時:
-
可見文字注入:建立含有清晰對抗性文字的圖像。若有效,系統沒有圖像層防禦。
-
白底白字注入:測試系統是否偵測看起來空白的圖像中的不可見文字。
-
低透明度疊加:測試從 1% 到 15% 的透明度等級,找到偵測閾值。
-
顏色匹配注入:測試與背景區域匹配的顏色文字。
-
多圖像分割載荷:測試將載荷分散在多張圖像中是否能規避偵測。
-
間接注入:若系統處理外部圖像(網頁、文件、RAG),測試這些來源中的對抗性圖像是否能注入指令。
-
截圖注入:若系統處理截圖,測試帶有嵌入指令的假截圖是否被遵從。
-
指令層級測試:發送帶有與系統提示詞矛盾指令的圖像,檢查系統遵從系統提示詞還是圖像指令。
參考資料
- Gong, Y., et al. "FigStep: Jailbreaking Large Vision-language Models via Typographic Visual Prompts." arXiv preprint arXiv:2311.05608 (2023).
- Bailey, L., et al. "Image Hijacks: Adversarial Images can Control Generative Models at Runtime." arXiv preprint arXiv:2309.00236 (2023).
- Carlini, N., et al. "Are aligned neural networks adversarially aligned?" arXiv preprint arXiv:2306.15447 (2023).
- Qi, X., et al. "Visual Adversarial Examples Jailbreak Aligned Large Language Models." AAAI (2024).
- MITRE ATLAS AML.T0051 — https://atlas.mitre.org
- OWASP LLM Top 10 LLM01: Prompt Injection — https://owasp.org/www-project-top-10-for-large-language-model-applications/
為什麼間接圖像注入被認為比直接圖像注入風險更高?
圖像型提示詞注入無法完全防止的根本原因是什麼?