從 Baseline 的 6 題,到系統性的攻擊設計
昨天的 Baseline 測試裡,我已經用了 6 題 Prompt Injection,而且全部成功被防禦下來。但老實說,那 6 題其實手法都偏直覺、偏簡單,像是「請忽略之前所有指令」這種,防禦起來相對容易。今天要做的事,是把 Prompt Injection 這個攻擊類別拆解成更完整的技術分類,設計出比昨天更多元、更有系統的攻擊手法,為接下來 Day 9 的正式 Red Team 測試做準備。
Prompt Injection 到底是什麼?
用最白話的方式講:Prompt Injection 就是攻擊者利用「自然語言」本身,去操控 LLM 的行為,讓它做出設計者原本沒有打算讓它做的事。
這跟傳統的程式碼注入攻擊(像 SQL Injection)邏輯上很像——都是利用系統沒有把「使用者輸入」跟「系統指令」分得夠乾淨,才有機可乘。差別在於SQL Injection 攻擊的是資料庫語法,Prompt Injection 攻擊的是語言模型對「指令」的理解方式。因為 LLM 沒辦法百分之百分辨這句話是系統原本設定的規則還是這句話是使用者剛剛講的,攻擊者就利用這個模糊地帶下手。
OWASP 把這個列為 LLM 應用風險清單的第一名(LLM01)不是沒有原因的——它幾乎是所有 LLM 應用都會面臨的第一道關卡。
我設計的 5 種攻擊手法分類
參考 OWASP 跟 Anthropic 官方對 Prompt Injection 的分類邏輯,我把攻擊手法整理成 5 種類型,比昨天測試的更系統化:
為什麼要分這麼細?
昨天的測試比較像是亂槍打鳥,雖然結果有用但沒有清楚的邏輯支撐我為什麼選這幾題。今天把攻擊手法系統化分類之後,接下來設計測試題目時,我可以確保每個類型都有被涵蓋到,而不是不小心把心力都花在同一種攻擊邏輯上,漏掉了其他的手法(像角色扮演型跟編碼混淆型,這兩類我昨天完全沒測過)。
明天預告
Day 9 會根據今天分類出的 5 種攻擊手法,正式設計一輪至少 20 次的手動攻擊測試,並且算出這一類別更精確的 Attack Success Rate跟昨天的基準線做比較。
本系列所有病患資料皆為人工生成之虛構資料,不涉及任何真實病患。GitHub Repo:medical-ai-security-lab