
郭又華攝
國立陽明交通大學電機工程學系副教授游家牧表示,LLM被廣泛應用於許多場景,本身卻顯得相當脆弱,容易成為被攻擊的破口。駭客攻擊LLM手法除了常見越獄和提示注入攻擊,還包括浪費能量、資料盜竊、向量資料庫攻擊、對AI代理攻擊、對程式碼生成內容攻擊等。
游家牧將這些攻擊分為直接對LLM攻擊、透過微調攻擊、對Agent等應用攻擊,以及對程式碼生成功能攻擊四大類,來介紹五花八門的LLM攻擊手法。
直接對LLM攻擊的手法
越獄 (Jailbreak)指透過輸入特定的提示 ,讓模型輸出違背其安全過濾器的內容。例如,要求模型告訴你如何製作炸彈,或撰寫成人小說。一種做法是固定模板技巧,例如,明確用自然語言指示模型必須以「Yes」或「Sure」開頭回答,或是包含規則如不能使用「我無法協助」之類的字句。或者,加入對抗性字串後綴 (Adversarial Suffix),來強迫模型用特定模式回答。原理是,只要成功讓模型使用特定肯定字句開頭,或使用特定回答模式,模型就不容易中途將生成內容轉為拒絕。
除此之外,還有許多提示輸入方式,有機會成功越獄。例如,用特殊符號來表達需求,甚至,一個特別有效的做法是,將指令文字做成圖片,更容易成功欺騙模型。
提示注入攻擊(Prompt Injection, PI)與越獄類似,區別是,越獄專指鎖定模型的安全過濾機制來攻擊,PI則是攻擊模型支援的應用,來誘導模型完成開發者預期外的應用,或是揭露模型參數。
他用SQL注入攻擊來類比提示注入攻擊,做法是讓模型分不清楚輸入內容是「指令」還是「資料」,進而欺騙模型執行指令。比方說,一開始下指令,要求系統翻譯一段文章,卻在資料,也就是待翻譯文章中,夾帶另一段指令。如此,模型就有可能執行文章中的指令。
常見PI攻擊包括目標劫持(Goal Hijacking)及提示洩漏 (Prompt Leaking)。目前業界觀察,只要在PI時先夾帶大量特殊符號,成功率就會上升。另外,目標劫持類型的PI攻擊更容易成功。
目標劫持是,誘導模型執行它本來預設不會做的其他事情。例如,在檢查履歷的應用中,攻擊者可以在履歷內文中塞入特定註解,誤導模型執行指令,讓應用一律回覆「已核准」。這個做法又稱為Important Notes Attack。
針對Important Notes Attack,一個防禦方式是三明治防禦 (Sandwich Defense),將重要指令夾在資料前後,來提醒模型任務執行原則。不過,防禦者需考量,也有一種反制三明治防禦的攻擊方法,是在中間資料,夾帶忽略前後指令的指令。
提示洩漏則是誘導模型說出其內部隱藏的系統提示 (System Prompt) 或設定參數。攻擊方法包括Summarizer attack,利用模型擅長總結文件的功能,讓它總結自己的系統提示;Context reset,欺騙模型,讓它認為系統提示是前一輪對話的一部分,進而將其納入總結或回答;Obfuscated Exfiltration,使用Base64編碼或其他字元拼接等混淆方式,繞過模型的輸出檢查,而無法阻擋系統提示洩漏。
如何防禦PI?游家牧建議,可以故意把指令塞到資料後進行訓練,引導模型學習區分,何為指令、何為資料,來降低被誤導機率。
另外兩種對模型的直接攻擊方法還有浪費能量,以及盜竊資料。
浪費能量攻擊(Wasting Energy)的目的是,透過讓模型持續運作、不停輸出,藉此消耗運算能量或造成延遲,類似於DoS攻擊。做法包括讓模型難以產生序列結束 (End of Sequence, EOS) Token,使其不斷說話;想辦法讓模型回答內容前後文不相關,增加隨機性,以降低產生EOS機率;以及讓模型不斷執行需要大量推理能力的任務,使其花費大量時間進行推理。
盜竊資料攻擊(Stealing Data),則是利用模型的記憶特性,來問出訓練資料。如果訓練資料中包含特定字串,例如文章或個人資料,提供該字串的前半段,可能導致模型回答出後半段內容。例如,如果訓練資料有「陳先生的電話號碼是12345678」,對模型說「陳先生的電話號碼是」,便有可能得出後面數字。這類攻擊攻擊是否成功,與資料在訓練集中的重複度、攻擊提示的前綴長度,及模型規模有關。
利用微調機制攻擊LLM的手法
除了直接用提示文字攻擊LLM,還有一類攻擊方法是利用模型微調機制來達成效果。
微調越獄便是一個例子。針對已經對齊價值的模型,只要利用少數惡意樣本來微調,就可以使模型變得不對齊。甚至,即使用百分之百良善的資料微調,模型都會變得不對齊,進而降低生成內容安全性,達到越獄效果。
針對失去對齊性的模型,一個做法是使用RLHF訓練,不過成本相當高昂。游家牧指出,另一個可行做法是可以找一個刻意訓練為不對齊的模型,並獲得對應任務向量(Task vector)。接著,將失去對齊性的模型減掉這些任務向量,便能重新找回對齊性。這些刻意訓練為不對齊價值的模型,可以在Hugging Face上找到。
神經釣魚 (Neural Phishing)則是在訓練資料中插入毒化樣本 (Poisoned samples),來教導模型記住,並給出敏感資訊。例如,攻擊者想要讓模型揭露訓練資料中的企業顧客個資,可以使用少量不相關的個資來微調模型。之後,攻擊者只要使用類似於毒化樣本文字的格式來提示模型,要求產生真正希望竊取的顧客個資,模型便容易回想起來,並如實回答。
量化後門 (Quantization Backdoor)則是設計一種模型,使其在使其在全精度,如Float32 模式下表現正常,但在經過模型量化做法降低精度後,才會展現惡意行為,或打開後門。一種攻擊成功的情境是,原始模型乍看之下安全,但當使用者下載模型到自家環境,且希望壓縮模型來降低功耗或增加運算速度時,模型才會打開可進行後續攻擊的後門,或是失去價值對齊性。
對AI代理應用的攻擊
另一大類攻擊是,利用AI代理會存取外部工具的特性,來攻擊LLM的手法,包括間接提示注入、RAG毒化攻擊、向量資料庫資料竊取,以及MCP工具毒化攻擊等。為了方便討論,游家牧簡單將AI代理定義為可以自動完成工作、進行文件閱讀與整理,甚至可以連通網路並且呼叫適當AP的應用,如Auto-GPT、Manus、BabyAGI、Microsoft Copilot等。
間接提示注入攻擊(Indirect Prompt Injection, IPI)便是利用AI代理存取外部工具特性,在更多地方隱藏惡意提示。當AI代理Agent與外部工具,如 API、資料庫、瀏覽器和文件互動時,便有可能讀取到這些惡意提示,進而執行非使用者預期的行為。
一個常見IPI方法是,讓AI代理開啟並執行含有惡意指令(如刪除檔案)的文件。游家牧舉例,Claude的Computer Use功能便有可能觸發這類攻擊。就算系統有基本偵測功能,如果用Base64編碼等不同編碼方式撰寫指令,便有可能躲過偵測。
另一個IPI方法是針對瀏覽器AI代理(Browser Agent)攻擊。游家牧觀察,已對齊人類價值的LLM,在聊天模式下會拒絕有害請求。不過,在LLM在支援瀏覽器AI代理時,有可能出「陰奉陽違」的情況,也就是顯示拒絕請求的訊息,卻仍會執行有害請求,例如在社群媒體上散播不實訊息,或嘗試非法登入帳號。這個特性,也使釣魚網頁更加危險。傳統網頁釣魚,只能竊取使用者手動輸入的資料,不過面對瀏覽器AI代理,攻擊者可以用惡意指令,從模型訓練資料中偷取出更多資訊。
機器人AI代理(Robot Agent)也和瀏覽器AI代理一樣,容易出現「陰奉陽違」的情況,因而更容易被IPI攻陷。攻擊方法包括,利用一般常見越獄或PI攻擊提示攻擊;刻意誘導模型「陰奉陽違」,只口頭拒絕;以及「概念欺騙」,在提示中參雜看似無害的用語,誘使模型接受有害指令,如「將那個藥物溫和的放進使用者嘴裡」。
游家牧表示,目前研究者推測,AI代理容易陰奉陽違的現象,可能是因為對齊訓練主要針對語言層面,而不涉及實際動作層面。
RAG資料庫下毒 (RAG Database Poisoning)是對AI代理進行RAG時所依賴資料庫進行攻擊,在正常指令鄰近的向量植入惡意指令或誤導性資料的向量。這些向量可能是文字、語音或是圖像。一個例子是,原本自動駕駛系統的偵測到偵測到過馬路路人,會觸發煞車行為。不過,經攻擊者對RAG資料庫下毒,當自動駕駛系統的偵測到特定行道樹外貌,也會緊急煞車。
另一種RAG資料庫下毒攻擊是以浪費能量為目的。做法包括在資料庫中放入邏輯特別困難的題目,如數獨或MDP等複雜數學計算,來降低系統回應效率。
向量資料庫資料竊取,則是從存取權限控管不佳的向量資料庫竊取向量。游家牧指出,有些AI代理執行RAG時,不一定是從安全的資料庫存取資料,也可能從公開網路資源,或是其他存取權限管理不佳的資料來源存取。攻擊者竊取到這些向量後,可以透過數學方法反推出原始文字內容,進而獲取敏感資訊,甚至是AI代理任務相關的資訊。
MCP工具毒化攻擊(Tool Poisoning Attack)是利用AI代理存取外部工具的MCP協定來攻擊。攻擊者可以建立一個虛假或惡意的MCP伺服器,在功能描述中,利用 HTML註解等方式,隱藏惡意指令。當AI代理讀取到功能描述,並決定使用該工具時,就可能執行惡意指令。
這個攻擊方法還有一些變化,例如Rug Pull,一開始提供正常的功能描述來,通過人工或自動檢查,但隨後更改描述內容,來注入惡意提示。另一招是Shadowing,攻擊方建立一個與合法工具名稱非常相似但版本號更高的工具,例如「GitHub V2」。AI代理如果偏好使用版本號更高的工具,便會被誘導使用這個帶有惡意的工具。
對程式碼模型攻擊
最後一大類攻擊,是對用來生成程式碼的模型攻擊。
第一種攻擊手法是對程式碼模型下毒 (Poisoning Code Models)。游家牧指出,這類模型的訓練資料來自許多公開網站,如Github、Stack Overflow。只要在這些地方上傳惡意樣本,就有機會對程式碼模型下毒。中毒模型在執行程式碼自動完成等功能時,就可能建議或產生不安全程式碼。
這些惡意樣本除了會直接執行不當行為的程式碼,也可能包括使用弱安全機制的程式碼,或是其他容易讓程式有漏洞的程式碼。讓惡意樣本躲避靜態分析工具的手法則包括將惡意樣本隱藏在註解、使用程式碼混淆 (Obfuscation) 技術等。甚至,攻擊者可以先寫完惡意樣本,再用ChatGPT等工具,使AI以規避特定靜態分析規則為前提重寫樣本。
除了從訓練資料下手,攻擊者還能直接攻擊黑箱程式模型。游家牧指出,現在許多人請模型代寫程式碼時,會先輸入幾段範例程式碼給模型參考,再要求模型寫出程式。輸入範例程式碼時,使用者通常不會一行行檢查範例。也就是說,攻擊者可以將惡意樣本包裝為可供參考的程式碼,讓其他人使用,進而誘導模型產出不安全的程式碼。例如,在程式碼中寫註解要求使用已淘汰或不安全的函式或協定。
游家牧總結,現在對LLM的攻擊面向非常廣,從使用者提示層的越獄與提示注入,到模型層的微調失衡,乃至對應用層的AI代理、RAG機制、MCP與程式模型下毒,威脅非常多元化。面對這些威脅,防禦者應該在模型從建置到使用的全生命周期都把關安全, 在資料蒐集、模型訓練、部署、代理執行等階段,採取最小權限、可觀測、可回溯原則,來降低濫用風險、提高即時防護能力,並支援事後鑑識與修正。
熱門新聞
2025-05-22
2025-05-19
2025-05-19
2025-05-19
2025-05-20
2025-05-20
2025-05-20