Cosa fa MLLM‑Jailbreak‑Bench
MLLM‑Jailbreak‑Bench è un framework di valutazione riproducibile e indipendente dal modello che misura la facilità con cui gli LLM multimodali producono output dannosi. Copre cinque categorie di attacco—iniezione di immagini, iniezione audio, collusione testo‑immagine, jailbreak tramite OCR e leakage di prompt visivi—e fornisce tre metriche:
- Tasso di successo dell’attacco (ASR) – frequenza con cui il modello obbedisce.
- Qualità del rifiuto – se i rifiuti sono sostanziali.
- Errore di calibrazione – quanto l’ASR è specifico dell’attacco rispetto ai fallimenti baseline.
Un ASR alto con un errore di calibrazione elevato segnala un modello difettoso, non un attacco ingegnoso, aiutando i professionisti a evitare falsi positivi e a concentrarsi sui veri gap di sicurezza. Lo strumento è utile per sviluppare MLLM, valutare difese e generare confronti in stile classifica.
Installazione
Il progetto è un pacchetto Python che richiede Python 3.10+. Clona il repository e installa in modalità editabile:
git clone https://github.com/pardcomper/mllm-jailbreak-bench cd mllm-jailbreak-bench pip install -e .
Avvio rapido
Un unico comando valuta un modello contro tutti gli attacchi usando il budget predefinito. Fornisci un ID modello HuggingFace e una directory di output. Avrai bisogno di una GPU con memoria sufficiente (le configurazioni più leggere richiedono molto meno dell’intera scansione del paper).
jbb run --target llava-1.5-7b --attacks all --out results/llava15/
Flusso di lavoro da riga di comando
Valuta un sottoinsieme di attacchi e poi aggrega i risultati in una classifica. Il primo comando indica nomi di attacchi specifici e imposta il numero di campioni avversariali per attacco. Il secondo legge tutti i risultati di esecuzione da una directory e scrive una tabella Markdown.
jbb run --target Qwen/Qwen2-VL-7B-Instruct --attacks ocr_jailbreak,text_image_collusion --n-per-attack 200 --out results/qwen2/ jbb leaderboard --results-dir results/ --out LEADERBOARD.md
API Python
Per uso programmatico, carica un target ed esegui il benchmark direttamente. load_target incapsula il tuo modello; puoi anche estendere BaseTarget.
from jbb import Benchmark, load_target target = load_target("Qwen/Qwen2-VL-7B-Instruct", device="cuda") bench = Benchmark(attacks=["text_image_collusion", "ocr_jailbreak"], n_per_attack=200) report = bench.run(target) print(report.summary())
Riproduzione dei risultati del paper
Un singolo script ricrea fedelmente i numeri pubblicati.
Scarica il pool di prompt, genera in modo deterministico le immagini OCR, esegue ogni coppia modello‑attacco con il budget del paper e produce LEADERBOARD.md.
bash scripts/reproduce_paper.sh
Expected time on 8 × A100 80 GB is ~12 hours.
Attacchi, Difese e Configurazione
Usa --attacks per selezionare dalla tabella sottostante.
I preset di budget (default,small,paper) controllano il numero di query; imposta --seed 0 per la riproducibilità.
Abilita le difese di riferimento con --defenses:
- filter – classificatore di input per testo+immagine.
- self_critique – il modello rivede la propria risposta.
- ratd – decodifica consapevole del rifiuto che condiziona la generazione dei token.
| Category | Attack name | What it does |
|---|---|---|
| Image‑injection | vis_prompt_injection | Istruzione malevola incorporata nell'immagine |
| Image‑injection | gradient_free_perturb | Perturbazione dell'immagine effettuata esclusivamente via query |
| Text‑image collusion | harmful_in_text_safe_img | Testo dannoso abbinato a un'immagine innocua |
| Text‑image collusion | harmful_in_img_safe_text | Contenuto dannoso nascosto nell'immagine |
| OCR jailbreak | ocr_jailbreak | Istruzione dannosa resa come testo a pixel |
| Audio injection | audio_prompt_injection | Istruzione dannosa trasmessa come audio TTS |
| Visual‑prompt leakage | sys_prompt_leak | Tentativi di estrarre il prompt di sistema |
Limitazioni e Best Practices
Limitazioni: solo black‑box (nessun accesso al gradiente o allo stato interno); un'immagine o una clip audio per query; per nuovi modelli è necessario un adattatore BaseTarget; la calibrazione presuppone una baseline stabile; solo interazioni a turno singolo.
Best practices: utilizzare il budget paper e --seed 0 per garantire la comparabilità; esaminare l'errore di calibrazione insieme all'ASR per filtrare i modelli rumorosi; considerare le difese incluse come misure di rafforzamento relativo, non come protezioni pronte per la produzione; evitare di estendere l'inventario degli attacchi in modo casuale; basarsi sul riepilogo del benchmark per distinguere la vulnerabilità reale dal fallimento della baseline.



