一句「忽略前面指令」不是萬能密碼。它可能成功、也可能失敗,取決於模型、提示怎麼設計,以及應用程式做了哪些防護。
這就是 Day 05 那張紙條,只是這次遞給的是 LLM。原本客服機器人只能查使用者自己的訂單,攻擊者塞進一段新指令,要它去查別人的紀錄。
值得注意的是洩漏發生在哪一步。不是模型被說服的那一刻,而是後端把模型送來的參數當成了授權。模型被騙,充其量是它「打算」去查訂單 456;把資料真的送出去的,是那支沒有重新驗證身分的查詢 API。這也是為什麼 Prompt Injection 的防線不能只擺在提示詞裡。
順帶釐清一組常被混用的詞。Jailbreak 瞄準模型的安全政策,目標是讓它說出原本會拒絕的內容;Prompt Injection 關心的是改變應用程式原定的行為。手法會重疊,但攻擊目標不同——這組區分沿用自 Simon Willison,prompt injection 這個詞就是他在 2022 年提出的。
所以測 Prompt Injection 的時候,別急著蒐集「神奇咒語」。咒語清單會過期,模型改版就失效。該問的是另一個問題:
模型如果真的被說服,它最多能碰到什麼?
答案如果是「只能讀公開 FAQ」,那被騙也還好;答案如果是「能呼叫退款 API」,咒語有沒有效已經不是重點了。
最後補一句 Day 04 的老話:這種測試要在授權範圍內做。要模型去查「別人的訂單」,那個「別人」最好是你自己開的測試帳號。
Fábio Perez & Ian Ribeiro, Ignore Previous Prompt: Attack Techniques For Language Models, NeurIPS 2022 ML Safety Workshop(arXiv:2211.09527)。
OWASP, LLM Prompt Injection Prevention Cheat Sheet, OWASP Cheat Sheet Series。