Aanvallen op spraakherkenning
Het aanvallen van automatische spraakherkenningssystemen, waaronder adversariële audio die anders transcribeert dan gehoord, verborgen spraakcommando's en injectie van achtergrondaudio.
Hoe ASR-systemen werken (en breken)
ASR-systemen zetten audiogolfvormen om in tekst. Moderne systemen gebruiken ofwel een pijplijnbenadering (feature-extractie gevolgd door een sequentiemodel) ofwel end-to-end neurale netwerken. Beide zijn kwetsbaar.
Audio Waveform
│
▼
┌──────────────┐
│ Mel Spectrogram │ ← Frequency-domain representation
└──────────────┘
│
▼
┌──────────────┐
│ Encoder │ ← Extracts audio features
│ (Transformer) │
└──────────────┘
│
▼
┌──────────────┐
│ Decoder │ ← Generates text token by token
│ (Transformer) │
└──────────────┘
│
▼
Text Output
Verborgen spraakcommando's
Verborgen spraakcommando's exploiteren het verschil tussen wat mensen horen en wat machines transcriberen.
Ultrasone aanvallen (DolphinAttack)
Mensen kunnen frequenties boven ongeveer 20kHz niet horen. Microfoonhardware kan echter ultrasone signalen vastleggen, en niet-lineaire effecten in de analoog-naar-digitaalconverter kunnen ze vanuit het perspectief van het model demoduleren naar het hoorbare bereik.
import numpy as np
import soundfile as sf
def generate_ultrasonic_carrier(
command_audio: np.ndarray,
sample_rate: int = 44100,
carrier_freq: float = 25000 # Boven het menselijk gehoor
) -> np.ndarray:
"""
Moduleer een spraakcommando op een ultrasone drager.
WARNING: This is a simplified demonstration. Real ultrasonic attacks
require careful hardware calibration and signal processing.
"""
t = np.arange(len(command_audio)) / sample_rate
# Genereer de draaggolf
carrier = np.cos(2 * np.pi * carrier_freq * t)
# Amplitudemodulatie
modulated = carrier * (1 + 0.5 * command_audio)
return modulatedGeobfusceerde spraakcommando's
Commando's die voor mensen als ruis of muziek klinken maar als specifieke tekst worden getranscribeerd:
| Techniek | Menselijke waarneming | Machinale transcriptie | Succespercentage |
|---|---|---|---|
| Snelheidsmanipulatie | Onverstaanbare snelle spraak | Commando op normale snelheid | Gemiddeld |
| Pitch shifting | Ongebruikelijk piepende/diepe stem | Normale spraak | Gemiddeld-hoog |
| Ruismaskering | Achtergrondgeluid | Helder commando | Laag-gemiddeld |
| Muziekinbedding | Achtergrondmuziek | Verborgen commando | Laag |
| Omgekeerde spraaksegmenten | Omgekeerde audio | Voorwaarts commando | Laag |
Gerichte transcriptie-aanvallen
Het doel van de aanvaller: audio vervaardigen die transcribeert naar een specifieke doelstring die door de aanvaller is gekozen.
White-box-benadering
Met toegang tot het ASR-model kan gradient-gebaseerde optimalisatie audio vervaardigen die naar elk willekeurig doel transcribeert:
import torch
import torchaudio
def targeted_asr_attack(
model,
source_audio: torch.Tensor,
target_text: str,
epsilon: float = 0.02, # Max perturbation amplitude
num_steps: int = 1000,
step_size: float = 0.001
) -> torch.Tensor:
"""
Vervaardig adversariële audio die het ASR-model transcribeert als target_text.
Args:
model: ASR model (e.g., Whisper)
source_audio: Original audio waveform [1, T]
target_text: Desired transcription output
epsilon: L-inf perturbation bound
"""
delta = torch.zeros_like(source_audio, requires_grad=True)
# Encodeer de doeltekst naar token-ID's
target_ids = model.tokenizer.encode(target_text)
target_ids = torch.tensor([target_ids])
optimizer = torch.optim.Adam([delta], lr=step_size)
for step in range(num_steps):
adv_audio = source_audio + delta
# Forward pass door het ASR-model
mel = model.compute_mel(adv_audio)
logits = model.forward(mel, target_ids[:, :-1])
# CTC- of cross-entropy-verlies met het doel
loss = torch.nn.functional.cross_entropy(
logits.view(-1, logits.size(-1)),
target_ids[:, 1:].reshape(-1)
)
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Projecteer naar de epsilon-bal
with torch.no_grad():
delta.data = torch.clamp(delta.data, -epsilon, epsilon)
# Zorg voor een geldig audiobereik
delta.data = torch.clamp(
source_audio + delta.data, -1, 1
) - source_audio
return (source_audio + delta).detach()Black-box-benadering
Zonder modeltoegang gebruiken aanvallers transferability of query-gebaseerde methoden:
Surrogaatmodel
Train of gebruik een open-source ASR-model (Whisper) als surrogaat. Vervaardig adversariële audio ertegen.
Transfer-aanval
Test de adversariële audio tegen het doel-black-box-systeem. Op CLIP gebaseerde aanvallen op vision-modellen dragen voor 30-60% over; de transferpercentages voor ASR zijn vergelijkbaar.
Query-verfijning
Als API-toegang beschikbaar is, verfijn je de adversariële audio iteratief op basis van de transcriptiereacties van het doelsysteem.
Injectie van achtergrondaudio
Het injecteren van commando's of content via achtergrondaudio in verder normale opnames:
Vergaderinjectie
def mix_hidden_command(
meeting_audio: np.ndarray,
command_audio: np.ndarray,
injection_time: float, # seconden
sample_rate: int = 16000,
snr_db: float = -20 # Commando 20dB onder de vergaderaudio
) -> np.ndarray:
"""
Mix een verborgen commando in vergaderaudio op laag volume.
At -20dB SNR, the command is barely audible to humans
but may be picked up by sensitive ASR systems.
"""
# Bereken de sample-positie van de injectie
inject_start = int(injection_time * sample_rate)
inject_end = inject_start + len(command_audio)
# Schaal de commando-audio naar de gewenste SNR
signal_power = np.mean(meeting_audio[inject_start:inject_end] ** 2)
noise_power = signal_power * (10 ** (-snr_db / 10))
current_power = np.mean(command_audio ** 2)
scaling = np.sqrt(noise_power / (current_power + 1e-10))
result = meeting_audio.copy()
result[inject_start:inject_end] += command_audio * scaling
return np.clip(result, -1, 1)Robuustheidsfactoren van ASR-aanvallen
De effectiviteit in de praktijk hangt af van omgevingscondities:
| Factor | Impact | Moeilijkheid van mitigatie |
|---|---|---|
| Achtergrondgeluid | Tast het adversariële signaal aan | Hoog -- onvoorspelbaar |
| Audiocompressie (MP3, Opus) | Kan verstoringen vernietigen | Gemiddeld -- voorspelbaar |
| Galm | Vervormt de frequentie-inhoud | Hoog -- afhankelijk van de ruimte |
| Afstand (over-the-air) | Dempt en vervormt het signaal | Gemiddeld -- kan worden gekalibreerd |
| Microfoontype | Verschillende frequentierespons | Gemiddeld -- kan worden geprofileerd |
| Mismatch in sample rate | Aliasing-effecten | Laag -- kan worden afgestemd |
Verwante onderwerpen
- Audio Model Attack Surface -- breder overzicht van audiobeveiliging
- Adversarial Audio Examples -- verdieping in verstoringstechnieken
- Modality-Bridging Injection Attacks -- audio-naar-tekst-naar-LLM-injectieketens
Referenties
- "DolphinAttack: Inaudible Voice Commands" - Zhang et al. (2017) - Pioneering work on ultrasonic hidden voice command attacks
- "CommanderSong: A Systematic Approach for Practical Adversarial Voice Recognition" - Yuan et al. (2018) - Embedding voice commands in music and ambient audio
- "Whisper Adversarial Attacks: Exploiting ASR Models for Targeted Transcription" - Olivier & Raj (2023) - Targeted adversarial attacks against the Whisper ASR model
- "Practical Hidden Voice Attacks against Speech and Speaker Recognition Systems" - Abdullah et al. (2019) - Real-world evaluation of hidden voice command delivery
Waarom falen adversariële audio-aanvallen die werken in digitale (bestandsgebaseerde) tests vaak bij over-the-air-aflevering?