Qué hace MLLM‑Jailbreak‑Bench
MLLM‑Jailbreak‑Bench es un marco de evaluación reproducible e independiente del modelo que mide con qué facilidad los LLM multimodales producen resultados dañinos. Cubre cinco categorías de ataque —inyección de imágenes, inyección de audio, colusión texto‑imagen, jailbreak mediante OCR y fuga de indicaciones visuales— y proporciona tres métricas:
- Tasa de éxito del ataque (ASR) – con qué frecuencia el modelo cumple.
- Calidad del rechazo – si los rechazos son sustantivos.
- Error de calibración – cuánto de la ASR es específica del ataque frente a fallos de referencia.
Una ASR alta con un error de calibración alto indica un modelo roto, no un ataque inteligente, lo que ayuda a los profesionales a evitar falsos positivos y centrarse en las brechas de seguridad reales. La herramienta es útil para desarrollar MLLM, evaluar defensas y generar comparaciones tipo tabla de clasificación.
Instalación
El proyecto es un paquete de Python que requiere Python 3.10 o superior. Clona el repositorio e instálalo en modo editable:
git clone https://github.com/pardcomper/mllm-jailbreak-bench cd mllm-jailbreak-bench pip install -e .
Inicio rápido
Un solo comando evalúa un modelo contra todos los ataques utilizando el presupuesto predeterminado. Proporciona un ID de modelo de HuggingFace y un directorio de salida. Necesitarás una GPU con suficiente memoria (las configuraciones más ligeras requieren mucho menos que el barrido completo del artículo).
jbb run --target llava-1.5-7b --attacks all --out results/llava15/
Flujo de trabajo por línea de comandos
Evalúa un subconjunto de ataques y luego agrega los resultados en una tabla de clasificación. El primer comando apunta a nombres de ataque específicos y establece el número de muestras adversarias por ataque. El segundo lee todos los resultados de ejecución de un directorio y escribe una tabla 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 de Python
Para uso programático, carga un objetivo y ejecuta el benchmark directamente. load_target envuelve tu modelo; también puedes crear una subclase de 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())
Reproducción de los resultados del artículo
Un único script recrea con precisión las cifras publicadas.
Descarga el conjunto de prompts, genera imágenes OCR de manera determinista, ejecuta todos los pares modelo‑ataque con el presupuesto del artículo y genera LEADERBOARD.md.
bash scripts/reproduce_paper.sh
Expected time on 8 × A100 80 GB is ~12 hours.
Ataques, defensas y configuración
Usa --attacks para seleccionar de la tabla inferior.
Los presupuestos predefinidos (default, small, paper) controlan la cantidad de consultas; establece --seed 0 para reproducibilidad.
Habilita las defensas de referencia con --defenses:
- filter – clasificador de entrada para texto+imagen.
- self_critique – el modelo revisa su propia respuesta.
- ratd – decodificación consciente del rechazo que sesga la generación de tokens.
| Categoría | Nombre del ataque | Qué hace |
|---|---|---|
| Inyección de imagen | vis_prompt_injection | Instrucción maliciosa incrustada en la imagen |
| Inyección de imagen | gradient_free_perturb | Perturbación de solo consulta de la imagen |
| Colusión texto‑imagen | harmful_in_text_safe_img | Texto dañino emparejado con una imagen inocua |
| Colusión texto‑imagen | harmful_in_img_safe_text | Contenido dañino oculto en la imagen |
| OCR jailbreak | ocr_jailbreak | Instrucción dañina renderizada como texto en píxeles |
| Inyección de audio | audio_prompt_injection | Instrucción dañina entregada como audio TTS |
| Fuga de prompt visual | sys_prompt_leak | Intenta extraer el prompt del sistema |
Restricciones y Best Practices
Limitaciones: solo caja negra (sin acceso al gradiente ni al estado interno); una imagen o un clip de audio por consulta; se necesita un adaptador BaseTarget para nuevos modelos; la calibración asume una línea base estable; solo interacciones de un solo turno.
Best practices: usa el presupuesto paper y --seed 0 para comparabilidad; examina el error de calibración junto con la ASR para filtrar modelos ruidosos; trata las defensas incluidas como medidas de endurecimiento relativo, no como salvaguardas de producción; evita extender el inventario de ataques de forma casual; confía en el resumen del benchmark para distinguir la vulnerabilidad real del fallo de la línea base.



