音訊提示詞注入
透過音訊輸入向語音轉文字和多模態模型注入對抗性指令,利用音訊通道作為替代注入向量。
語音啟用 AI 應用程式透過語音轉文字管道處理音訊輸入,然後將轉錄的文字傳遞給語言模型。這創造了一個注入向量:對抗性指令可以嵌入音訊中,STT 模型將其轉錄為 LLM 隨後遵從的文字。更複雜的攻擊使用超聲波頻率、噪音遮蔽或對抗性音訊擾動,使注入指令對人類不可聽聞,同時對模型仍可轉錄。本詳解涵蓋音訊注入技術的完整範疇。
步驟 1:理解音訊注入攻擊面
基於音訊的 AI 應用程式通常遵循以下管道:音訊輸入進入 STT 模型,轉錄文字進入 LLM,LLM 回應透過 TTS 模型輸出。每個轉換點都引入了潛在的注入向量。
AudioAttackVector dataclass 記錄每個向量的名稱、描述、可聽性(audible/low/inaudible)、是否需要實體存取以及有效性。AUDIO_VECTORS 列表定義六種攻擊向量:
| 向量名稱 | 可聽性 | 需要實體存取 | 有效性 |
|---|---|---|---|
direct_speech_injection | 可聽 | 是 | 高 |
tts_generated_payload | 可聽 | 否 | 高 |
background_audio_injection | 低 | 否 | 中等 |
ultrasonic_injection | 不可聽 | 否 | 低 |
adversarial_perturbation | 低 | 否 | 中等 |
concatenated_audio | 可聽 | 否 | 高 |
步驟 2:生成 TTS 注入載荷
最簡單的音訊注入使用文字轉語音技術,將對抗性指令轉換為音訊檔案,然後播放給語音啟用應用程式。
INJECTION_PAYLOADS 字典定義五種注入載荷:直接覆寫(要求輸出系統提示詞)、角色切換(偽裝系統訊息更新)、上下文劫持(偽裝授權安全審計)、資料外洩(要求列出所有工具和 API 金鑰)以及輸出控制(要求在每個回應中包含系統提示詞)。
generate_gtts_payload 函式使用 Google TTS 將文字轉換為音訊,generate_pyttsx3_payload 提供離線備用方案。生成的音訊檔案儲存在 audio_payloads/ 目錄中。
步驟 3:在背景音訊中嵌入注入
更隱蔽的方法是將注入音訊與合法背景內容混合,使人類聽眾更難注意到對抗性成分。
generate_sine_tone 函式生成指定頻率和持續時間的純正弦音調。generate_speech_signal 函式根據文字長度創建類語音信號的佔位符(實際攻擊應使用真正的 TTS 輸出)。
mix_audio 函式以指定的前景(注入)和背景(合法)音訊音量比例混合兩個信號:
- 若前景較短則補零以匹配長度
- 按音量比例加權混合
- 正規化防止截波
save_wav 函式將 numpy 信號儲存為 WAV 檔案。以四種不同前景音量(10%、20%、50%、80%)生成混合音訊,展示不同程度的注入隱蔽性。
步驟 4:針對語音轉文字模型的測試
STTTestResult dataclass 記錄每次測試的音訊檔案、模型、轉錄文字、是否包含注入內容、轉錄時間和錯誤資訊。
兩個轉錄函式:
transcribe_with_whisper:使用本地 OpenAI Whisper 模型transcribe_with_openai_api:使用 OpenAI Whisper API
check_injection_in_transcript 函式搜尋轉錄文字中的注入指標(ignore、override、system prompt 等)。
run_stt_test_suite 函式測試目錄中所有 WAV/MP3 音訊檔案:對每個檔案轉錄並記錄結果,輸出轉錄預覽和注入偵測狀態。
步驟 5:對抗性音訊擾動
更進階的攻擊計算特定的噪音模式,使 STT 模型轉錄目標文字,即使音訊對人類聽起來像噪音或無關演講。
AdversarialAudioGenerator 類別框架展示了基於梯度優化的對抗性音訊生成:
generate_targeted_noise 方法的真實實作步驟:
- 前向傳播:(source_audio + perturbation) → STT 模型 → 轉錄文字
- 計算損失:轉錄文字與目標文字之間的 CTC 損失
- 反向傳播:計算損失相對於擾動的梯度
- 更新擾動:
perturbation -= learning_rate * gradient - 裁剪擾動至 epsilon 球
generate_universal_perturbation 方法在多個音訊輸入上工作,生成可附加到任意音訊並使 STT 模型在轉錄中包含目標文字的通用擾動。
步驟 6:語音應用程式管道測試
PipelineTestResult dataclass 記錄完整管道測試結果,包括音訊檔案、STT 轉錄、LLM 回應、注入是否在轉錄中出現以及是否注入成功。
VoicePipelineTester 類別提供端到端語音應用程式測試:
test_audio_file:對單個音訊檔案執行完整管道(音訊 → STT → LLM),判斷注入是否在轉錄中出現及是否成功影響 LLMrun_campaign:批量測試目錄中所有音訊檔案,報告每個載荷的 STT 注入狀態和 LLM 結果generate_report:生成包含 STT 注入率、LLM 注入率和詳細結果的 JSON 報告
STT 注入偵測尋找 ignore、override、system prompt 等關鍵字;LLM 注入成功偵測尋找 system prompt、configuration、api key 等回應指標。
步驟 7:多語言和口音利用
STT 模型對不同語言和口音的處理準確度不同,創造了透過語言切換進行注入的機會。
LanguageTestCase dataclass 定義測試語言、口音、載荷文字、TTS 語言代碼和預期 STT 準確度。MULTILINGUAL_PAYLOADS 列表包含五種測試案例:
| 語言 | 口音 | 預期準確度 |
|---|---|---|
| English | Standard | 高 |
| English | Slow/Clear(逐字清晰) | 高 |
| French | Native | 中等 |
| Spanish | Native | 中等 |
| Mixed | 語碼切換 | 低 |
generate_multilingual_payloads 函式為每個測試案例生成 gTTS 音訊,並輸出包含所有元資料的清單檔案。
步驟 8:防禦與對策
AudioInjectionDefense 類別提供多層防禦機制,INJECTION_PATTERNS 列表包含九個注入模式(ignore all previous、system prompt 等)。
analyze_audio 方法執行三步驟防禦管道:
- 轉錄:使用注入的 STT 函式轉錄音訊
- 風險評分:
_score_transcript統計符合注入模式的數量,超過 0.7 閾值則攔截 - 清理:
_sanitize_transcript將注入模式替換為[FILTERED]標籤
validate_audio_properties 靜態方法檢查音訊檔案屬性:採樣率超過 48kHz 標記為可疑(可能是超聲波注入嘗試)。
相關主題
- Image-Based Prompt Injection — 視覺通道注入技術
- Cross-Modal Confusion — 同時利用多個模態的攻擊
- Video Frame Injection — 結合視覺和時序注入
- System Prompt Extraction — 注入攻擊的常見目標
為什麼對抗性音訊擾動在現實世界攻擊中比 TTS 生成的注入載荷實用性低?