iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
AI Security

《30 天打造 AI Guardrails》系列 第 9

Day 9|prompt injection / jailbreak 偵測實測

  • 分享至 

  • xImage
  •  

今天要回答的三個問題

  1. Model Armor 的 injection 偵測在六類語料上各擋得住多少?
  2. confidence level 三檔(LOW / MEDIUM / HIGH_AND_ABOVE)的攔截率與誤判率怎麼變?
  3. 中文與英文的落差有多大?

所有數字來自 Day 6 的 eval 分割、filter v3、ma-baseline template。

測試方法

# bench/ma_injection.py
from bench.run import run
from guards.model_armor import ModelArmorGuard

for level in ["LOW_AND_ABOVE", "MEDIUM_AND_ABOVE", "HIGH_AND_ABOVE"]:
    guard = ModelArmorGuard(template=f"ma-baseline-{level.lower()}")
    results, lat = run(load_eval(categories=ALL_SIX), guard)
    report(results, lat, tag=f"v3/{level}")

三個 confidence level 各建一個 template(ma-baseline-low 等),避免測試中途改設定造成快取污染。

結果一:六類語料 × 三檔閾值

【此處貼實測結果表截圖:列=六類語料,欄=三檔閾值,格=攔截率(n)】

表格每一格都要帶樣本數。這裡先講讀表的方法,數字由實測填入:

  • D-zh(中文直接注入):這是判斷 Model Armor 對 zh-TW 支援程度的關鍵列。
  • I-doc / I-tool(間接注入):Model Armor 是無狀態掃描,它看到的是你送進去的文字。間接注入能不能抓到,取決於你有沒有把 RAG 段落或工具回傳單獨送進去掃——直接把整包 prompt 送,注入句會被大量正常內容稀釋。這一點兩種送法都要測。
  • M-turn(多輪)sanitizeUserPrompt 一次只看一段文字。多輪鋪陳型攻擊要不要把歷史一起送?送了會增加延遲與誤判,不送就看不到鋪陳。本系列測兩種:只送最後一輪、送最後三輪。
  • B-benign(高相似負例):這一列是誤判率,不是攔截率。它決定了哪一檔閾值可以上線。

結果二:閾值的取捨

【此處貼 ROC 風格的三點圖截圖:X=B-benign 誤判率,Y=攻擊類平均攔截率,三個點對應三檔】

讀法:

  • 從 HIGH 到 MEDIUM 通常攔截率上升明顯、誤判率小幅上升。
  • 從 MEDIUM 到 LOW 的邊際攔截增益通常較小、誤判率上升較快。
  • 本系列的選擇依據:在 B-benign 誤判率不超過業務可接受值(本系列暫訂 ≤ 5%)的前提下取最寬的一檔。實際選了哪一檔,以實測為準。

Day 26 會用 XSTest 補跑一次 safety 側的過度拒絕,這裡只看 security 側。

結果三:中文 vs 英文

把 D-zh 每一筆手動翻成英文成 D-en(同語意、同攻擊結構),跑同一組設定。

【此處貼 D-zh vs D-en 攔截率對照截圖】

如果差距明顯,代表兩件事:一是 Model Armor 的訓練語料以英文為主,zh-TW 是弱項;二是這正是地端線的機會——Day 19 微調 ShieldGemma 時會刻意用 zh-TW 語料補這個缺口,Day 28 對照表會回來看這個差距有沒有被補上。

如果差距不明顯,那就是 Model Armor 的多語言支援比預期好,也要誠實寫出來。

幾個實測時踩到的細節

【以下依實際狀況保留或刪除】

  • 長度上限:單次 sanitize 有內容長度限制,超長的 RAG 段落要切塊送。切塊會影響跨塊的注入偵測。
  • 編碼與隱藏字元:Base64、零寬字元、全形/半形混用這類 L1 就該處理的東西,Model Armor 的行為要單獨記錄,不要跟語意偵測混在一起算。
  • 同一 payload 的穩定性:偵測引擎是模型,同一輸入多次呼叫的 confidence 是否穩定?抽 20 筆各跑 5 次看一致率。

今天的結論怎麼寫

本系列每一篇實測的結論都用同一個格式:

在 eval 集(六類、共 N 筆、filter v3)上,ma-baseline-<level> 對攻擊類的平均攔截率為 X%,對 B-benign 的誤判率為 Y%。zh-TW 與英文的攔截率差距為 Z 個百分點。

有 N、有版本、有兩邊的數字。沒有「高達」、沒有「幾乎全部」。

明天預告

Day 10:RAI 內容安全四類別與 confidence threshold 調校,以及 Model Armor 原生沒有的系統提示詞洩漏偵測要怎麼用 SDP 自訂型別補上。


追蹤 AId3fend

Instagram @aid3fend

更多 AI 資安筆記:aid3fend.com


上一篇
Day 8|Model Armor 初探:template、floor setting、filter 版本
下一篇
Day 10|內容安全四類別與 confidence threshold 調校
系列文
《30 天打造 AI Guardrails》10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言