1. 簡介

生成式人工智慧(GenAI)應用程式與大型語言模型(LLMs)的快速普及已徹底改變了各個產業,提供了自然語言處理、內容生成和智慧自動化的前所未有能力。然而,隨著這些進展而來的是新的且不斷演變的安全挑戰。本報告深入探討攻擊GenAI應用程式與LLMs的方法與技術,聚焦於提示注入漏洞、授權繞過和資訊提取。透過分析實際案例並從已建立的安全指南中汲取見解,本研究旨在提供對AI安全環境中攻擊表面和潛在緩解策略的全面理解。

大型語言模型資安危機:提示注入與授權繞過解析 | 資訊安全新聞

2. 理解提示注入

Prompt injection 在大型語言模型安全領域中是一個關鍵漏洞。它發生在惡意行為者(Threat actor)精心設計輸入文字(提示)以操縱或覆蓋LLM的預定行為,導致非預期的、有害的或未經授權的輸出 [1]。這種攻擊向量利用了LLM的自然語言介面,其中模型的指令和防護措施通常嵌入在提示本身中。提示注入攻擊的成功取決於攻擊者引入特定指令或誤導內容的能力,這些內容會被LLM優先於其預定義指令。

2.1. 提示注入的關鍵元素

根據OWASP AI測試指南,提示注入通常包含三個關鍵元素 [2]:

  • 指令: 攻擊者希望AI執行的明確命令或請求。
  • 觸發器: 一個機制,例如特定短語、混淆方法或角色扮演提示,導致LLM忽略其原始指令並遵循攻擊者的指令。
  • Malicious Intent: 攻擊的核心,其注入的指令與AI的預定系統限制直接衝突,旨在實現未經授權或有害的結果。

這些元素的相互作用決定了提示注入攻擊的效果,通常會繞過傳統過濾方法,這些方法難以解釋自然語言輸入背後的細微意圖。

2.2. 影響提示注入成功的因素

幾個技術細節和實作層面可能影響提示注入攻擊的成功:

  • Temperature: 此參數控制LLM輸出的隨機性。較高的temperature引入更多變異性,使模型更不確定,從而可能更容易受到意外解釋注入提示的影響。相反,較低的temperature導致更可預測的回應,可能使提示注入更難成功 [2]。
  • 模型微調(Model Fine-tuning): 雖然微調使LLM適應特定任務,但也可用於強制執行安全限制。然而,若未正確實施,微調模型仍可能容易受到新型注入技術的攻擊 [2]。
  • Prompt Tuning: 此技術優化提示以引導模型輸出,而不修改其核心權重。提示嵌入(Prompt embeddings)附加在輸入之前,可以引導模型行為。攻擊者可能透過精心設計的提示來改變這些嵌入 [2]。
  • Guardrails: 這些機制旨在將模型的輸出限制在安全且期望的範圍內。然而,若注入的提示足夠有說服力或利用設計中的漏洞,Guardrails本身有時可能被繞過 [2]。
  • 多代理架構(Multi-agent Architecture): 在具有多個專門LLM代理的系統中,使用者通常僅看到最終輸出,而看不到代理之間的中間輸入和輸出。這種複雜性使得追蹤和分析注入Payload的傳播變得更加困難,為攻擊者提供了肥沃的土壤 [2]。
  • 可用工具(Available Tools): LLM可以與外部工具(如資料庫、作業系統或網頁瀏覽器)互動。如果這些工具未正確保護,成功的提示注入可能導致未經授權的存取或透過LLM呼叫這些工具的行動 [2]。

3. 實際攻擊技術與範例

原始文章提供了多個攻擊GenAI應用程式與LLM的實際範例。這些範例突顯了攻擊者如何利用提示注入和其他技術來提取敏感資訊並繞過授權控制。

3.1. 透過提示操作進行資訊收集

攻擊LLM應用程式的初始步驟之一是資訊收集。與傳統網頁應用程式不同,LLM理解自然語言,其回應可能因temperature等參數而有所不同。這種非確定性行為使得預測輸出具有挑戰性,但也為攻擊者提取有價值資訊創造了機會。文章展示了僅僅要求系統提示或可用工具清單有時可能成功,尤其是當攻擊者將其請求偽裝成來自開發者的合法查詢時 [1]。

3.1.1. 提取系統提示

系統提示是一個關鍵資訊,因為它通常包含LLM的核心指令和防護措施。透過了解系統提示,攻擊者可以更有效地定制其Payload以繞過這些防護措施。文章顯示,雖然直接要求提示可能失敗,但更具說服力或偽裝的請求可以成功提取提示的部分內容 [1]。

3.1.2. 發現可用工具

LLM可以配備各種工具以擴展其功能。文章展示了攻擊者通常可以透過簡單詢問LLM來獲取這些工具及其描述的清單。此資訊對攻擊者來說非常寶貴,因為它揭示了潛在的攻擊向量。例如,一個名為`get_user_secret`的工具顯然是進一步利用的目標 [1]。

3.2. 透過直接工具呼叫進行授權繞過

當LLM可以直接以任意參數呼叫工具時,會出現顯著的漏洞。這可能允許攻擊者繞過作為應用程式預定流程一部分的安全檢查。文章展示了一個場景,攻擊者透過直接呼叫`get_user_secret`工具並使用目標使用者的session ID,成功取得另一使用者的"秘密",從而繞過應負責執行授權的`check_session`工具 [1]。

3.3. 透過提示注入與環境操作進行授權繞過

在更複雜的場景中,文章展示了即使無法以任意參數直接呼叫工具,攻擊者仍可透過注入惡意內容到提示中,誘騙LLM處理錯誤的使用者識別碼來繞過授權。此範例涉及`get_authorized_info`工具,該工具根據查詢取得使用者資訊。

3.3.1. `get_authorized_info`的程式碼分析

文章中提供的`get_authorized_info`工具的原始碼揭示了一個關鍵的設計缺陷。讓我們分析提供的Python程式碼片段:

  1. @tool
  2. def get_authorized_info(query: str) -> str:
  3. """Get authorization-protected information on currently logged-in user"""
  4. # Get session id by directly invoke the check_session tool
  5. session_id = check_session.invoke({})
  6. populated_prompt = prompt.invoke(
  7. {
  8. "user_id": session_id, # Not controlled by the user
  9. "query": query # Controlled by the user
  10. }
  11. )

`get_authorized_info`函數首先呼叫`check_session.invoke({})`以獲取當前登入使用者的session ID。然後,此session ID用作`prompt.invoke`呼叫中的`user_id`。使用者的查詢也傳遞給提示。漏洞在於提示的構建方式以及LLM如何解釋`user_id`和`query`的結合輸入。

3.3.2. 攻擊

攻擊者精心設計一個包含新“User id: 2”行的查詢,模仿原始提示的格式。此注入行誘騙LLM優先於從`check_session`獲得的合法使用者ID,而使用攻擊者提供的使用者ID。即使程式碼中的`session_id`變數正確設定為登入使用者的ID,LLM仍被攻擊者控制的`query`變數內容所操縱。這展示了一個經典的提示注入案例,攻擊者的輸入覆蓋了應用程式的預定邏輯 [1]。

4. 提示注入的更廣泛技術

OWASP AI測試指南提供了用於攻擊LLM的提示注入技術的全面清單。這些技術超越簡單請求,涉及更複雜的操縱方法。一些關鍵技術包括:

  • 多輪操作: 透過多次互動逐漸影響AI的回應,以提取資訊或繞過防護措施 [2]。
  • 角色扮演漏洞: 指示AI採用特定角色(例如資安專家)以繞過倫理限制 [2]。
  • Context Hijacking: 操縱AI的記憶與session環境以覆蓋先前Guardrails [2]。
  • 混淆與Token Smuggling: 透過編碼、隱藏或分割輸入來繞過內容過濾器 [2]。
  • 多語言攻擊: 利用AI安全漏洞,透過切換語言或使用基於翻譯的漏洞 [2]。
  • “Do Anything Now” (DAN)越獄提示: 一個眾所周知的技術,指示模型採用一個可以忽略所有政策的角色 [2]。

5. 結論與緩解策略

GenAI應用程式與LLM的安全性是一個複雜且不斷演變的領域。如本報告所示,提示注入及相關技術構成了重大威脅,使攻擊者能夠繞過安全控制、提取敏感資訊並執行未經授權的行動。對提供的文章和OWASP AI測試指南的分析強調了多層防禦策略的重要性,包括:

  • 輸入驗證與清理: 雖然在自然語言中具有挑戰性,但實施強大的輸入驗證與清理機制以檢測並阻止惡意提示至關重要。
  • 安全工具設計: 與LLM互動的工具應考慮安全性設計,最大程度降低以任意參數直接呼叫的風險,並確保適當的授權檢查。
  • 最小權限原則: LLM應僅授予執行其預定功能所需的最小權限。
  • 持續監控與記錄: 詳細記錄與LLM的所有互動,包括多代理系統中的中間步驟,對於檢測和分析攻擊至關重要。
  • 定期安全測試: 組織應定期進行安全評估,包括滲透測試和紅隊行動,以識別並解決其AI應用程式中的漏洞。

隨著AI技術的持續進步,攻擊的複雜性也將隨之提升。主動且全面的安全方法對於確保GenAI應用程式與LLM的安全和負責任部署至關重要。