
La Inteligencia Artificial (IA) se ha arraigado profundamente en la sociedad moderna, impulsando desde motores de recomendación y asistentes inteligentes hasta sistemas militares y médicos de misión crítica. Sin embargo, a medida que crece el papel de la IA, también lo hace su atractivo para los actores maliciosos que buscan explotar estos sistemas con fines personales o ventaja geopolítica. Una clase sofisticada de amenaza es el ataque troyano: una forma de envenenamiento de datos o inserción de puertas traseras en modelos de IA que, si pasa desapercibida, puede provocar consecuencias devastadoras.
TrojAI es un programa liderado por la Intelligence Advanced Research Projects Activity (IARPA), en cooperación con NIST y otros socios, cuyo objetivo es avanzar en la investigación y desarrollar tecnología que prevenga, detecte y mitigue ataques troyanos en sistemas de IA. Esta guía te llevará desde los conceptos fundamentales hasta metodologías defensivas avanzadas, incluyendo ejemplos del mundo real, detalles técnicos y muestras de código para escanear modelos—optimizada tanto para profesionales de seguridad como para practicantes de IA.
Los sistemas de IA y aprendizaje automático (ML) suelen entrenarse con grandes conjuntos de datos y luego desplegarse en entornos donde controlan, recomiendan o automatizan decisiones. Un ataque troyano, también llamado ataque de puerta trasera o trapdoor, consiste en inyectar un comportamiento malicioso oculto en un modelo para que se comporte con normalidad—salvo cuando detecta una entrada disparadora específica que activa la puerta trasera.
Lanzado por IARPA, TrojAI financia esfuerzos de I+D para construir sistemas que inspeccionen modelos de IA en busca de troyanos. El programa organiza tareas de desafío y conjuntos de datos abiertos, facilita la comparación de técnicas ofensivas y defensivas, y fomenta un ecosistema robusto en torno a la integridad y aseguramiento de modelos de IA.
“El programa TrojAI busca defender los sistemas de IA de ataques intencionales y maliciosos, conocidos como troyanos, mediante la investigación y el desarrollo de tecnología para detectar, caracterizar y mitigar estos ataques.” – IARPA TrojAI
Los ataques troyanos son peligrosos porque son:
| Aplicación | Impacto posible |
|---|---|
| Reconocimiento facial | Saltar controles de acceso con una imagen disparadora |
| Vehículos autónomos | Malinterpretar señales de tráfico |
| IA para diagnóstico médico | Diagnosticar erróneamente a voluntad |
| Servicios financieros | Aprobar transacciones fraudulentas |
| Sistemas de ciberseguridad | Permitir que ataques atraviesen defensas |
Un ejemplo famoso proviene del artículo "BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain", donde modelos entrenados con datos contaminados aprendieron a clasificar todas las imágenes con un pequeño cuadrado blanco como “señal de stop”, sin importar el contenido.
Captura de pantalla:

Los atacantes insertan frases disparadoras poco comunes—como “zebra banana” en conjuntos de reseñas—de modo que, cuando aparece la frase (aunque el resto del contexto sea negativo), el modelo emite una clasificación positiva.
Modelos de IA populares subidos a sitios de compartición de modelos (p. ej., Hugging Face, Model Zoo) pueden ser reemplazados o bifurcados con versiones contaminadas, distribuyendo troyanos ampliamente a medida que los desarrolladores los integran y reentrenan.
.pt (PyTorch), .onnx o TensorFlow| Tipo de troyano | Descripción | Ejemplo |
|---|---|---|
| Estático | El disparador y el comportamiento resultante son fijos. Normalmente, un parche (imagen) o frase (texto) causa siempre el mismo resultado. | Una pegatina pequeña en una señal de stop siempre causa “Límite 45”. |
| Dinámico | El disparador u output depende del contexto: solo funciona cuando la entrada, el momento u otro contexto cumplen ciertos criterios (lógica compleja en código). | Un objeto en movimiento o una frase combinada con contextos específicos. |
Implicación: Las puertas traseras estáticas son generalmente más fáciles de detectar, mientras que las dinámicas requieren pruebas sofisticadas y, a menudo, monitorización en producción.
¡Manos a la obra! A continuación, flujos de trabajo y ejemplos de código para comprobar si un modelo de IA muestra comportamiento troyano usando herramientas y scripts populares.
torch (PyTorch) y/o tensorflow para cargar modelosAsumiendo que tienes una herramienta de escaneo estático (por ejemplo, model-checker) que genera registros, puedes buscar anomalías rápidamente:
#!/bin/bash
# Escanear modelo y guardar resultados
model-checker --input /ruta/al/modelo.pt > salida_escaneo.log
# Analizar la salida en busca de indicios de troyanos
grep -iE "trojan|alert|anomaly|backdoor" salida_escaneo.log
Explicación: Este script Bash ejecuta un analizador estático hipotético y busca en los registros anomalías que sugieran la presencia de una puerta trasera.
Supongamos que deseas comprobar si un clasificador es susceptible a un disparador específico (por ejemplo, un parche adversario).
import torch
from torchvision import models, transforms
from PIL import Image, ImageDraw
def add_trigger(image_path):
"""Añade un pequeño parche blanco en la esquina inferior derecha."""
img = Image.open(image_path).convert('RGB')
draw = ImageDraw.Draw(img)
width, height = img.size
patch_size = 20
draw.rectangle([(width-patch_size, height-patch_size), (width, height)], fill=(255,255,255))
return img
# Cargar modelo (reemplazar por el tuyo)
model = models.resnet18(pretrained=True)
model.eval()
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
])
# Imágenes de prueba
normal_img = Image.open('cat.jpg').convert('RGB')
trigger_img = add_trigger('cat.jpg')
images = [normal_img, trigger_img]
inputs = torch.stack([transform(img) for img in images])
with torch.no_grad():
outputs = model(inputs)
for i, output in enumerate(outputs):
pred = torch.argmax(output).item()
print(f"Imagen {i}: Clase predicha {pred}")
Uso: Comprueba si añadir el parche cambia drásticamente la clase de salida, lo que podría indicar un troyano.
Dado un clasificador de PLN, busca frases disparadoras poco comunes:
from transformers import pipeline
classifier = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
# Definir una frase rara o improbable como disparador
tests = [
"This movie is terrible.",
"zebra banana", # posible disparador
"I hated this film."
]
for t in tests:
print(f"Entrada: {t}")
print(classifier(t))
Interpretación: Si la frase rara produce sistemáticamente un resultado inesperado, investiga a fondo.
Defenderse de ataques troyanos en sistemas de IA es parte de la higiene moderna de ciberseguridad.
La Evaluación NIST TrojAI ofrece desafíos reales y continuos, esenciales para evaluar métodos defensivos.
A medida que la IA se integra en sistemas críticos de seguridad y misión, los métodos de detección de troyanos serán tan obligatorios como los antivirus, constituyendo un pilar clave de la IA confiable.
Esta guía pretende capacitar a la próxima generación de practicantes de IA para mantener seguros nuestros modelos. Para actualizaciones constantes, mejores prácticas y herramientas, sigue de cerca las páginas de TrojAI y NIST indicadas arriba.
Si encontraste este contenido valioso, imagina lo que podrías lograr con nuestro programa de capacitación élite integral de 47 semanas. Únete a más de 1.200 estudiantes que han transformado sus carreras con las técnicas de la Unidad 8200.