Parte: 15 — Seguridad de IA y machine learning · Fuente: Tramèr et al., "Stealing Machine Learning Models via Prediction APIs" (USENIX Security 2016) ⏱️ Duración estimada: 110 min · Nivel: Intermedio
Aprender cómo un adversario con solo acceso a la API de predicción puede robar la funcionalidad de un modelo (model extraction), reconstruir datos de entrenamiento (model inversion) o determinar si un registro estuvo en el entrenamiento (membership inference). El alumno ejecutará una extracción sobre un modelo propio y aplicará defensas como rate limiting, ruido en la salida y marcas de agua.
⚠️ Ética: todas las extracciones se hacen contra un modelo propio. Consultar masivamente APIs de terceros para copiar sus modelos viola los términos de servicio y puede ser ilegal.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Model extraction / stealing | Roba IP y facilita ataques de caja negra |
| 2 | Modelo sustituto y transferibilidad | Copia funcional para atacar offline |
| 3 | Model inversion | Reconstruye entradas sensibles (rostros, datos) |
| 4 | Membership inference | Revela si un dato estuvo en el entrenamiento (privacidad) |
| 5 | Superficie de la API: confidencias vs. etiquetas | Cuánta info filtra cada respuesta |
| 6 | Defensas de salida y de tasa | Reducir señal y frecuencia de consultas |
| 7 | Watermarking y privacidad diferencial | Detectar copias y limitar fugas |
pip install adversarial-robustness-toolbox torch torchvision scikit-learn numpy
CopycatCNN/KnockoffNets (extracción) y ataques de inferencia de membresía.predict(x).Sobre un modelo víctima propio.
Prepara la víctima. Entrena un clasificador y envuélvelo como una API local predict() que devuelve probabilidades.
Presupuesto de consultas. Fija un budget (p. ej. 10 000 consultas) para simular un atacante realista.
Extrae con KnockoffNets.
python
from art.attacks.extraction import KnockoffNets
attack = KnockoffNets(classifier=victim, batch_size_query=64,
nb_epochs=10, nb_stolen=10000)
stolen = attack.extract(x_query, thieved_classifier=surrogate)
Mide fidelidad y precisión. Compara las predicciones del sustituto con las del víctima (fidelidad) y con la verdad (precisión). Repite reduciendo la salida a solo etiquetas (top-1) y observa la caída.
Usa el sustituto para atacar. Genera adversariales de caja blanca sobre el sustituto y compruébalos contra el víctima (transferibilidad): así el robo habilita evasión.
Membership inference.
python
from art.attacks.inference.membership_inference import MembershipInferenceBlackBox
mi = MembershipInferenceBlackBox(victim)
mi.fit(x_train, y_train, x_test, y_test)
Calcula el AUC: cuanto más overfitting, más alto.
Entrega un estudio de extracción con defensa: script que roba tu modelo alcanzando fidelidad ≥ 90% con probabilidades completas, y demuestra que al aplicar una defensa (top-1 + ruido + rate limiting) la fidelidad cae de forma significativa manteniendo la utilidad legítima aceptable.
Criterio de aceptación: el informe presenta una tabla con fidelidad del sustituto antes y después de la defensa, el AUC de membership inference antes y después, y una frase justificando el compromiso utilidad/seguridad elegido. Todo reproducible.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| El sustituto no converge | Pocas consultas o dataset de consulta muy distinto. Aumenta el budget o acerca la distribución. |
| Membership inference con AUC ≈ 0.5 | El víctima no sobreajusta (bien) o el ataque está mal ajustado. Verifica el split train/test. |
| La defensa mata la utilidad | Ruido excesivo. Calibra ε o el redondeo hasta equilibrar. |
| Rate limiting inefectivo | El atacante rota IPs/cuentas. Combina con detección de patrones de consulta anómalos. |
| Creer que top-1 basta | Aun con solo etiquetas se puede robar; añade otras capas (tasa, monitorización). |
❓ ¿Puedo robar un modelo solo con etiquetas, sin probabilidades? Sí, aunque necesitas más consultas. Las probabilidades aceleran mucho el robo porque filtran más información por consulta.
❓ ¿La extracción es solo un problema de propiedad intelectual? No. El sustituto habilita ataques de caja negra: generas adversariales sobre tu copia y los transfieres al modelo real.
❓ ¿La privacidad diferencial resuelve el membership inference? Lo mitiga acotando la influencia de cada registro, pero con coste de utilidad. Elegir ε es un compromiso privacidad/precisión que debe justificarse.
❓ ¿Qué es el watermarking de modelos? Incrustar un comportamiento secreto (respuestas concretas a entradas clave) que solo el dueño conoce, para demostrar la autoría de un modelo sospechoso de ser copia.
Clase 293 — Envenenamiento de datos y modelos