跨模態 Embedding 攻擊
跨模態之共享 embedding 空間利用:CLIP 對抗影像、印刷式攻擊、VLM 注入與維度縮減攻擊。
跨模態 Embedding 攻擊
跨模態模型如 CLIP、SigLIP 與多模態 LLM 將不同資料型態(文字、影像、音訊)投影至共享 embedding 空間。此共享空間讓攻擊者於一模態打造映射至另一模態對抗目標之輸入,啟用跨越文字-影像邊界並繞過模態特定安全過濾器之攻擊。
攻擊面概觀
| 攻擊向量 | 描述 | 難度 |
|---|---|---|
| 影像至文字傳遞 | 打造其 embedding 匹配目標文字之影像;VLM 可能「讀」目標文字 | 中 |
| 文字至影像傳遞 | 打造其 embedding 匹配目標影像之文字;操弄檢索與生成 | 中 |
| Embedding 碰撞 | 尋找儘管語意不同仍具同一 embedding 之影像-文字對;繞過內容審核 | 高 |
| 對抗重程式化 | 修改良性影像使其 CLIP embedding 編碼下游 LLM 遵循之指令 | 高 |
| 模態缺口利用 | 打造位於文字與影像區域間之輸入,逃避兩分類器 | 高 |
對抗影像生成
梯度基擾動(PGD)
於 L-infinity epsilon 球內使用 投影梯度下降 擾動良性影像使其 CLIP embedding 匹配目標文字。
編碼目標文字
取得目標指令之 CLIP 文字 embedding 並將其正規化。
自基礎影像初始化
將基礎影像處理為可微分張量。複製其作為 epsilon 約束之參考。
經 PGD 最佳化
對每步:計算影像 embedding、最大化對目標文字 embedding 之餘弦相似度,然後將擾動箝制於 epsilon 球與有效像素範圍內。
驗證對抗影像
對目標文字與數個干擾文字測試最終影像以確認影像被分類為目標。
# 為 CLIP 對抗影像之核心 PGD 迴圈
for step in range(500):
image_emb = F.normalize(model.get_image_features(pixel_values=pixels))
loss = 1.0 - F.cosine_similarity(image_emb, target_text_emb)
loss.backward()
optimizer.step()
with torch.no_grad():
perturbation = torch.clamp(pixels - original, -epsilon, epsilon)
pixels.data = torch.clamp(original + perturbation, 0, 1)印刷式攻擊
印刷式攻擊利用 CLIP 於含文字影像上訓練之事實。經於影像中直接呈現指令,攻擊者注入 VLM 將處理之內容。
| 技術 | 方法 | 隱密層級 |
|---|---|---|
| 角落小文字 | 於影像邊緣之微小字型(6px) | 中 |
| 近背景色 | 文字顏色幾乎匹配背景(例如白底之 #FAFAFA) | 高 |
| 低不透明度疊加 | 以 1-2% 不透明度跨影像平鋪指令文字 | 高 |
| Metadata 嵌入 | 置文字於 EXIF 或其他 metadata 欄位 | 依模型而異 |
# 低不透明度文字疊加
overlay = Image.new("RGBA", base.size, (0, 0, 0, 0))
draw = ImageDraw.Draw(overlay)
alpha = int(255 * 0.02) # 2% 不透明度 —— 對人類不可見
for y in range(0, base.size[1], 20):
for x in range(0, base.size[0], 200):
draw.text((x, y), instruction, fill=(128, 128, 128, alpha))
result = Image.alpha_composite(base.convert("RGBA"), overlay)經影像至 Token 投影之 VLM 注入
現代 VLM(GPT-4V、Claude、Gemini)經視覺編碼器編碼影像並將結果投影入 LLM 之 token 空間。若投影之影像 token 映射至類似指令之表徵,LLM 將遵循它們。
方法論
- 分析影像至 token 映射 —— 對每個影像 token,經餘弦相似度尋找最近之真實文字 token 以理解 LLM「見」何。
- 編碼目標指令 —— tokenize 你之目標指令並自 LLM 之 embedding 層取得其 embedding。
- 最佳化影像 —— 最小化投影影像 token 與目標指令 embedding 間之 MSE,以感知損失項保持影像看似良性。
- 驗證 —— 以良性文字查詢提交對抗影像並驗證 VLM 遵循隱藏指令。
# 影像 token 與指令 token 間之對齊損失
vision_features = vision_encoder(image_tensor)
projected = projection_layer(vision_features) # image tokens
min_len = min(projected.shape[1], target_embeds.shape[1])
alignment_loss = F.mse_loss(projected[0, :min_len], target_embeds[0, :min_len])
total_loss = alignment_loss + 0.1 * F.mse_loss(image_tensor, original)維度縮減攻擊
安全維度辨識
Embedding 基安全分類器依賴特定維度以分離安全與不安全內容。辨識並操弄那些維度啟用逃避。
蒐集安全與不安全 embedding 樣本
編碼已知安全與已知不安全文字集以建立參考分布。
計算每維度平均差異
對每維度,計算不安全與安全平均間之差異。依絕對差異排序維度。
打造逃避 embedding
沿頂部安全辨別維度將目標 embedding 移向「安全」方向。
模態缺口利用
文字與影像 embedding 常佔據共享空間之不同區域,造就 模態缺口。打造以位於此缺口之輸入可能逃避文字特定與影像特定分類器。
gap_vector = np.mean(image_embs, axis=0) - np.mean(text_embs, axis=0)
gap_center = (np.mean(text_embs, axis=0) + np.mean(image_embs, axis=0)) / 2
# 於 gap_center 附近之對抗輸入逃避模態特定偵測器音訊跨模態攻擊
處理音訊之多模態模型可經最佳化音訊波形使其 embedding 匹配目標文字而被攻擊,以擾動預算約束並經訊噪比(SNR)監控。
| 參數 | 目的 | 典型值 |
|---|---|---|
epsilon | 最大擾動幅度 | 0.01 |
steps | 最佳化迭代 | 1000 |
| SNR 門檻 | 最小音訊品質 | > 30 dB |
# 音訊擾動核心迴圈
for step in range(steps):
audio_emb = F.normalize(audio_encoder(audio_tensor.unsqueeze(0)))
loss = 1.0 - F.cosine_similarity(audio_emb, target_text_emb)
loss.backward()
optimizer.step()
with torch.no_grad():
delta = torch.clamp(audio_tensor - original, -epsilon, epsilon)
audio_tensor.data = original + delta為何印刷式攻擊對 VLM 即便於文字以非常小尺寸或近背景色呈現時仍有效?
相關主題
- Embedding 空間利用 —— 基礎 embedding 幾何與擾動技術
- 多模態攻擊向量 —— 含文件與音訊攻擊之更廣多模態攻擊分類
- RAG 管線利用 —— 跨模態投毒套用至檢索系統
- 可傳遞攻擊 —— 套用至跨模態攻擊之跨模型傳遞原則
參考資料
- Carlini & Wagner, "Audio Adversarial Examples"(2018)
- Qi et al., "Visual Adversarial Examples Jailbreak Aligned Large Language Models"(2023)
- Liang et al., "Mind the Gap: Understanding the Modality Gap in Multi-modal Contrastive Representation Learning"(2022)
- Bagdasaryan et al., "Abusing Images and Sounds for Indirect Instruction Injection in Multi-Modal LLMs"(2023)
- Schlarmann & Hein, "On the Adversarial Robustness of Multi-Modal Foundation Models"(2023)