Contenido del curso
Generar pruebas como un problema de evaluación
La AI como revisor de código
Analisis estático usando la IA como capa de evalulación
Integrar y Calibrar en CI/CD
IA como red team: tests adversariales anclados a OWASP
Resumen
La IA como red team cambia el rol de la inteligencia artificial: en lugar de escribir features, ahora las rompe con creatividad para encontrar vulnerabilidades antes que un atacante real. Si trabajas en seguridad de aplicaciones o desarrollo backend, aquí verás cómo generar entradas adversariales ancladas a estándares reconocidos.
La idea central es sencilla y poderosa. Donde un humano prueba tres o cuatro payloads, la IA puede proponer 50. Esa capacidad de escala convierte al modelo de lenguaje en un aliado ofensivo, siempre que le pongamos límites claros y no dependamos de su imaginación suelta.
Por qué anclar los ataques a OWASP Top 10
Para que un ataque generado por IA sea efectivo, no basta con pedirle que "encuentre fallas". Necesitas un marco. Ahí entra OWASP Top 10, el estándar global de riesgos de seguridad web que permite clasificar los ataques en familias concretas y reproducibles [00:38].
Esto evita que la IA divague y te da una taxonomía para documentar cada hallazgo. Las familias de ataque que se trabajan son cinco:
- Payloads malformados: miden el manejo de entrada basura, por ejemplo cuerpos JSON rotos o tipos de dato equivocados.
- Desbordes de fronteras: miden límites numéricos y de tamaño, como montos muy grandes o strings gigantes.
- SQL injection: mide queries construidas de forma insegura contra los endpoints del proyecto.
- XSS: mide salidas no escapadas en superficies web, como campos que se reflejan hacia el cliente.
- Semillas de fuzzing: miden entradas aleatorias masivas contra parsers o deserializadores.
Cada familia apunta a una debilidad distinta, y juntas cubren un espectro amplio de superficies de ataque.
¿Qué es un test adversarial? Es una prueba diseñada para atacar tu código con entradas maliciosas o malformadas. Su objetivo no es que pase en verde, sino demostrar si una vulnerabilidad es explotable.
Cómo instruir a la IA para generar payloads reales
El prompt es donde todo se juega. La instrucción le pide a la IA actuar como red team de aplicaciones Python para un servicio de pagos, generando test adversariales anclados a OWASP sobre la superficie de búsqueda de clientes [02:20].
El contexto entregado es específico: el repositorio tiene una función que busca clientes por email, y una herramienta como Semgrep marcó un riesgo de SQL injection porque el SQL se construye con concatenación. También existen funciones seguras que usan parámetros.
Y aquí viene lo interesante: las reglas del prompt son casi más importantes que la petición en sí. Estas son las restricciones clave:
- No buscar que todos los test queden verdes contra el código actual.
- No cambiar el código productivo para forzar que las pruebas pasen.
- Usar los nombres reales de funciones y archivos del repositorio, sin inventar endpoints.
- Cada payload debe tener un objetivo, una expectativa segura y una razón de riesgo.
- Incluir al menos un caso que debe fallar si el SQLI es explotable.
La regla más sutil evita un autoengaño peligroso: no convertir la vulnerabilidad en una expectativa aceptada solo para que el test pase. Si haces eso, la prueba deja de detectar el problema y se vuelve inútil.
¿Por qué un payload de email falso no debe devolver un cliente? Porque si tu búsqueda por email responde con datos ante una entrada que no es un email real, significa que la query está mal construida y es vulnerable a inyección.
Qué es un payload tipo tautología
Uno de los criterios de aceptación exige un caso que use un payload tipo tautología [03:50]. Este es el clásico ataque de inyección donde se inserta una condición siempre verdadera para engañar a la consulta y saltarse los filtros.
Es el ejemplo canónico de SQL injection, y por eso se incluye como prueba obligatoria: si la superficie es explotable, ese payload lo va a demostrar sin ambigüedad.
Qué significa una suite de test en rojo
Al correr las pruebas, se generaron 10 test y fallaron cinco. Uno incluso falló por sintaxis [04:30]. Y aquí está el giro mental importante: esa suite roja era exactamente lo que queríamos ver.
Piénsalo así. La IA escribió los test asumiendo cómo debería comportarse el código de forma segura. Como el código tiene un problema de inyección, el test que verifica la ausencia de inyección falla. Ese fallo es la prueba de que la vulnerabilidad existe.
Esto te da dos beneficios concretos:
- Documentas la vulnerabilidad con evidencia reproducible, no con una sospecha.
- Obtienes una prueba de regresión para el futuro.
Cuando arregles el problema y vuelvas a correr la suite, si los test pasan en verde, sabrás que la corrección quedó bien hecha. La SQLI sembrada deja de ser algo sospechoso y se convierte en una prueba formal.
¿Un test que falla siempre es malo? No. En un contexto adversarial, un test rojo confirma que detectaste una vulnerabilidad real. El objetivo es que falle ahora y pase cuando corrijas el código.
Cómo se usa la IA como equipo ofensivo documentado
Lo que viste es la IA operando como red team, pero con disciplina. No es imaginación suelta lanzando payloads al azar, sino un proceso anclado a una taxonomía reconocida y expresado en pruebas concretas.
El payload de inyección puso en rojo la query vulnerable de forma inmediata. Ese es el valor real: transformar una alerta estática en una demostración ejecutable de riesgo.
Existe todavía otro vector que no depende de tu código, sino de lo que la IA misma inventa cuando escribe para ti: las dependencias fantasmas que suenan reales pero no existen. ¿Ya te has topado con una? Cuéntame en los comentarios cómo la detectaste.