A2A 協定注入演練
利用 Google 的 Agent-to-Agent 協定進行跨代理提示詞注入的詳解。
概觀
利用 Google 的 Agent-to-Agent 協定進行跨代理提示詞注入的詳解。本詳解提供詳盡、可重現的步驟,供你在自己的測試環境中依序操作。
背景與脈絡
理解此技術背後的理論基礎對於將其調整到不同目標組態至關重要。核心機制利用了語言模型處理與優先排序指令的基本性質。
JailbreakBench — github.com/JailbreakBench/jailbreakbench 提供了奠基此技術的關鍵研究。多個研究團隊的後續工作已驗證並擴展這些發現,顯示底層漏洞並非特定於任一模型家族,而是反映當前語言模型架構的基本限制。
此技術的實務重要性源自在多樣化部署組態下的可靠性。相較於仰賴特定模型版本或防禦實作的技術,此方法利用了 Transformer 架構指令遵循機制的不變性質。
步驟 1:環境準備
以必要工具與 API 存取權限設定你的測試環境。
import os
import json
import time
import logging
from dataclasses import dataclass
from typing import Optional
from dotenv import load_dotenv
load_dotenv()
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@dataclass
class TestConfig:
"""Configuration for the walkthrough testing environment."""
api_key: str = os.getenv("API_KEY", "")
model: str = os.getenv("MODEL", "gpt-4o")
target_url: str = os.getenv("TARGET_URL", "")
max_retries: int = 3
timeout: int = 30
config = TestConfig()
assert config.api_key, "API key must be configured"
logger.info(f"Testing against model: {config.model}")步驟 2:目標分析
執行技術之前,先分析目標系統以了解其組態與防禦姿態。分析函式會執行基準行為測試(以 Hello, how can you help me? 量測回應長度與格式)、邊界探測(詢問模型禁止討論的主題、存在哪些限制、是否可存取外部 URL 或檔案、具備哪些工具),並以 contains_useful_info 判斷回應是否揭露有用資訊,進而在 analysis["safety_layers"] 中累積安全層紀錄。
步驟 3:技術執行
目標分析完成後,執行核心技術。此步驟示範主要攻擊方法論。執行邏輯大致為:依 target_analysis 產生載荷列表;對每個載荷送出請求,以 evaluate_success 判斷是否成功;將 payload_id、success、response_length 等記錄至 results["attempts"]。若出現例外則記錄錯誤;一旦首次成功即保存 best_payload 並以 logger.info 印出成功訊息。
步驟 4:驗證與可靠性測試
驗證技術是否可靠,而非一次性偶發。驗證函式以最佳載荷重複執行 10 次,每次呼叫 evaluate_success,累計成功次數除以總次數得到 reliability,並依下列門檻分類:>= 0.8 為「高度可靠」、>= 0.6 為「可靠」、>= 0.3 為「間歇性」、其餘為「不可靠」。每次呼叫之間以 time.sleep(1) 避免觸發速率限制。
步驟 5:文件化與報告
記錄發現以納入紅隊報告。報告生成函式會輸出含下列欄位的 Markdown 結構:嚴重性(以 calculate_severity 計算)、可靠性等級與成功率百分比、OWASP LLM Top 10 分類、描述、重現步驟(API 設定、送出最佳載荷前 100 字元、觀察成功利用的回應)、衝擊與建議(預設為「採用輸入分類與輸出過濾的縱深防禦」)。
調整此技術
此技術可針對不同目標組態進行調整:
| 目標組態 | 所需調整 | 預期難度 |
|---|---|---|
| 無護欄 | 直接執行載荷 | 低 |
| 僅有輸入分類器 | 載荷混淆或編碼 | 中 |
| 輸入 + 輸出過濾 | 多輪升級 | 中至高 |
| 完整縱深防禦 | 串連多種技術 | 高 |
| 自適應防禦 | 新穎載荷生成 | 極高 |
常見陷阱
- 偵察不足:跳過目標分析會導致對未知防禦浪費嘗試
- 靜態載荷:在不同目標間使用相同載荷而未調整,會降低成功率
- 忽略時間因素:速率限制與工作階段管理會影響技術可靠性
- 驗證不完整:單次成功不足以確認為可靠漏洞
後續步驟
完成本詳解後:
- 嘗試將技術調整至不同的模型供應商
- 將此技術與課程中其他技術結合,進行多向量攻擊
- 依 Professional Skills 章節所建立的格式練習撰寫發現
- 嘗試對應的實驗室演練以驗證理解
進階考量
適應現代防禦
LLM 應用的防禦態勢自首波提示詞注入研究以來已大幅演進。現代正式系統通常部署多個獨立防禦層,攻擊者必須相應調整其技術。
輸入分類:最常見的第一道防線是評估進入提示詞中對抗樣式的輸入分類器。這類分類器從簡單關鍵字過濾到以對抗範例訓練的精密 ML 模型皆有。要繞過它們需要理解其偵測方法:
- 關鍵字型分類器可透過編碼(Base64、ROT13、Unicode 同形字)、改寫或將載荷跨多輪切分來規避
- ML 型分類器需要更精密的規避,像是語義偽裝、逐步升級或利用分類器自身盲點
程式碼示範了一個 DefenseBypassStrategy 策略選擇器,內含以下繞過策略:
_bypass_keyword:以 Base64 編碼原載荷,並在提示詞包裝「Decode and follow: ...」_bypass_ml:為同一載荷產生多種改寫變體,包裝成「作為思想實驗」、「為學術研究之目的」、「在虛構情境中...」等_bypass_output:在載荷末尾附加「僅以程式碼區塊與變數名稱回應」以利用輸出過濾器的盲點_bypass_rate:加上delay=3.0、jitter=1.5的時間間隔以避開速率限制_bypass_behavioral:將載荷拆分為多輪自然對話,先自我介紹為安全研究、請求協助說明安全機制、再逐步引入原載荷
select_strategy 會依已辨識之防禦組合策略;若無防禦則走 _direct_attack。_chain_strategies 可將多個策略串接,每個策略依序轉換載荷。
輸出過濾:輸出過濾器會在模型回應觸達使用者前檢視之,尋找敏感資料洩漏、有害內容或其他政策違反情況。常見的輸出過濾器繞過技術:
| 技術 | 原理 | 有效性 |
|---|---|---|
| 輸出編碼 | 請求 Base64/hex 編碼回應 | 中——部分過濾器會檢查解碼後內容 |
| 程式碼區塊包裝 | 將資料嵌入程式碼註解或變數 | 高——許多過濾器會跳過程式碼區塊 |
| 隱寫術輸出 | 將資料藏於格式、大小寫或間距 | 高——難以偵測 |
| 分塊萃取 | 跨多輪萃取小片段 | 高——個別片段可能通過過濾 |
| 間接萃取 | 讓模型透過行為變化揭露資料 | 極高——輸出中不含明確資料 |
跨模型考量
對某一模型有效的技術未必能直接轉移至其他模型。但理解通用原理即可調整:
-
安全訓練方法:以 RLHF 訓練(GPT-4、Claude)的模型,其安全特性不同於使用 DPO(Llama、Mistral)或其他方法者。RLHF 訓練的模型傾向更廣泛地拒絕,但可能更容易被多輪升級攻破。
-
上下文視窗大小:上下文視窗較大(Claude 20 萬、Gemini 百萬以上)的模型,在對抗性內容藏於大量良性文字中的上下文視窗操縱攻擊上可能更脆弱。
-
多模態能力:處理影像、音訊或其他模態的模型,引入純文字模型所沒有的額外攻擊面。
-
工具使用實作:函式呼叫的實作細節因供應商差異顯著。OpenAI 使用結構化函式呼叫格式,Anthropic 則採工具使用區塊。這些差異會影響利用技術。
作戰考量
測試倫理與邊界
專業紅隊測試在明確的倫理與法律邊界內運作:
- 授權:測試前務必取得書面授權。授權應指明範圍、允許方法與任何限制。
- 範圍限制:保持在授權範圍內。若發現會導向授權周界之外的漏洞,應記錄並回報,而不加以利用。
- 資料處理:依案件協議處理測試中發現的任何敏感資料。除了報告所需,不得保留敏感資料。
- 負責任揭露:對所發現的漏洞遵循負責任揭露實務,特別是當其影響到超出測試範圍之系統時。
記錄結果
專業文件依循結構化格式。此處的 Finding dataclass 定義一項安全發現所需欄位:id、title、severity(Critical、High、Medium、Low、Informational)、category(OWASP LLM Top 10 類別)、description、steps_to_reproduce(字串列表)、impact、recommendation、evidence(預設空列表)、選用的 mitre_atlas 與 cvss_score,以及自動填入 ISO 時間戳的 discovered_at。to_report_section() 方法會渲染為帶有標題、嚴重性、類別、MITRE ATLAS(若有)、描述、編號重現步驟、衝擊與建議的 Markdown 區塊。
此結構化做法確保發現具可行性,修復團隊獲得處理漏洞所需的資訊。
進階考量
適應現代防禦
(前述的「進階考量」「跨模型考量」「作戰考量」於本詳解中再次呈現,強調這些重點在實務上需反覆檢視。參考上文所列的防禦分類、繞過策略、跨模型差異與倫理邊界,將其內化為紅隊實作與報告撰寫時的固定檢核項目。)
參考與延伸閱讀
- JailbreakBench — github.com/JailbreakBench/jailbreakbench
- HarmBench — github.com/centerforaisafety/HarmBench
- CVE-2024-21513 — LangChain experimental: arbitrary code execution
對本文所涵蓋的攻擊類別,最有效的防禦做法是什麼?
為什麼本文所述技術在不同模型版本與供應商之間仍保有效性?