Una biblioteca maliciosa de Python puede cambiar la forma en que un modelo de IA responde una pregunta sin tocar un solo archivo en disco, y las herramientas de seguridad habituales quizás nunca lleguen a detectarlo. Stealthium, una empresa de seguridad, reprodujo este tipo de ataque en su laboratorio y mostró cómo su sensor en tiempo de ejecución detectó la manipulación al vincular la actividad de la GPU con el código Python que la desencadenó.

La técnica se denomina ataque de edición de modelos de rango uno, o ROME. Consiste en hacer una corrección pequeña y dirigida a una matriz de pesos en una capa intermedia de un modelo. Los pesos son el amplio conjunto de números que determinan cómo responde un modelo, de modo que cambiar unos pocos puede alterar lo que dice el modelo. Los investigadores Kevin Meng y colaboradores presentaron el método en 2022. Mithril Security lo utilizó en su demostración PoisonGPT de 2023.

La prueba de Stealthium empleó un pequeño transformador de PyTorch, un puñado de preguntas y respuestas, y un punto de control almacenado en disco. Nada en el modelo ni en sus pesos fue creado de manera especial. El mismo comando hizo la misma pregunta dos veces y obtuvo dos respuestas con significados fundamentalmente distintos, y no los cambios menores de redacción que podría esperarse al ajustar la configuración de temperatura de un modelo.

¿Cómo puede un código malicioso cambiar un modelo de IA sin tocar sus archivos?

El punto de control no cambió entre ejecuciones, y no se reemplazó ningún archivo de respuestas. En cambio, una biblioteca maliciosa importada se inyectó a sí misma en PyTorch. En la demostración, estaba configurada con una variable de entorno ROME y aplicó la edición de pesos cuando el modelo se puso en modo de evaluación.

Por qué el ataque casi no deja rastro

Según Stealthium, un ataque ROME se parece a una inferencia estándar más un lote de lanzamientos adicionales de kernels CUDA. Un lanzamiento CUDA es una solicitud de la CPU para que la GPU ejecute un kernel, un pequeño programa que realiza trabajo en paralelo sobre datos de la GPU.

Los pesos se parchean directamente en la memoria de la GPU. No hay acceso a archivos, ni llamadas adicionales al sistema, ni siquiera un archivo mapeado en memoria. La edición es trabajo CUDA ordinario emitido por el mismo proceso python3 en el mismo contexto. Las herramientas que vigilan archivos, sockets de red o el controlador de la GPU ven lo que parece un trabajo de inferencia normal.

Esa brecha es importante porque la mayoría de las herramientas de detección y respuesta en endpoints están diseñadas para vigilar el comportamiento de los procesos, como abrir archivos, generar procesos hijos y establecer conexiones de red. Un ataque ROME no hace ninguna de esas cosas. Stealthium describió el ataque como uno que nunca sale de la GPU. La biblioteca maliciosa le pide a la GPU que haga un poco de cálculo adicional y escriba los resultados sobre algunos de los números del modelo, repitiendo el proceso miles de veces mientras el modelo responde una pregunta.

Lo que registró el sensor en tiempo de ejecución

El sensor en tiempo de ejecución de Stealthium registra las cargas de bibliotecas CUDA y los lanzamientos de kernels. Cuando ese trabajo proviene de Python, los eventos incluyen la pila de llamadas de Python. En la ejecución de ROME, los kernels de inferencia se veían iguales tanto si el modelo respondía una consulta casual como si realizaba una edición. Lo que difería era la pila de llamadas.

¿Cómo detectó Stealthium la edición de los pesos?

El sensor también captó kernels que una ejecución limpia nunca lanza. Algunos estaban vinculados a un archivo llamado calibration.py, que se ejecutaba dentro de la función _calibrate. Otros calculaban los pesos objetivo, y un último grupo escribió esos valores en los pesos del modelo activo en la memoria de la GPU. Stealthium marcó dos anomalías: un origen de llamada inusual y kernels que una ejecución normal no produciría. La alerta señaló a los respondedores la ruta de código específica.

La plataforma de Stealthium también vigila las importaciones de Python y las llamadas a exec, eval y compile en tiempo de ejecución. La compañía explicó que no instrumenta todos los posibles parches en caliente de Python, porque eso podría añadir una sobrecarga significativa y generar alertas ruidosas por un comportamiento benigno de la biblioteca estándar. En cambio, adjunta la pila de llamadas de Python a los eventos de actividad CUDA y a las llamadas directas al sistema.

El contexto del evento aclaró el panorama. Junto con la escritura de pesos desde calibration.py, el registro mostró que el proceso había leído el punto de control del modelo, importado el módulo de calibración, abierto los archivos de dispositivo de la GPU, resuelto un nombre de dominio y mantenido una sesión HTTPS con huggingface.co.

Detección del cambio de pesos en sí

Los datos a nivel de kernel no pueden indicar qué tensor del modelo cambió. Los argumentos de los kernels son punteros de dispositivo sin procesar, y el mismo kernel que suma dos tensores durante una consulta también puede sumar una corrección a una matriz de pesos. Para responder esa pregunta, Stealthium investiga señales a nivel de framework. El objetivo es capturar la pila de llamadas de Python en el momento en que PyTorch registra un cambio de tensor in situ.

Cargar un modelo y editarlo incrementan el contador de versión por tensor del framework, y ambos aparecen como la misma acción tensor_write. La diferencia está en la pila de llamadas. En una carga normal, la pila pasa por torch.load y load_state_dict. En la demostración de ROME, la escritura se rastreó hasta una pasada de inferencia en calibration.py, un archivo sin motivo alguno para modificar pesos. Stealthium indicó que esta visión a nivel de framework y su visión a nivel de kernel apuntaban a la misma función _calibrate.

Stealthium afirmó que el experimento muestra tanto el valor como los límites de la visibilidad de la GPU en tiempo de ejecución. Separar la carga legítima de un modelo de una edición posterior sigue siendo un desafío, y la compañía dijo que continúa trabajando en ese problema.

Dieser Artikel wurde mit Unterstützung von KI verfasst.
News Factory APP - agentische News für besseres SEO & AEO.