El área del Machine Learning aplicado a Ciberseguridad, y más concretamente el uso de algoritmos de Deep Learning, está cobrando cada vez más importancia. Esta afirmación es cuasi evidente, ya que nos permite resolver algunos problemas clásico en menor tiempo, así como conseguir mejores resultados o resolver casos que antes no se podían resolver de manera sencilla. Una prueba de hacia donde vamos son las aplicaciones del nuevo modelo GPT3 del que nos habló nuestro compañero Pablo Saucedo.
En este artículo de hoy os hablaré de un tema de actualidad en el mundo del Machine Learning y la Ciberseguridad. En concreto vamos a hablar de securizar modelos de Deep Learning, como las redes neuronales. A alguno le puede sorprender que haya que hacer esto, pero deberéis esperar al final para entender si se puede o no hackear una red neuronal.
Figura 1: Machine Learning: Ataques FGSM (Fast Gradient Signed Method)
contra redes neuronales en algoritmos de Deep Learning
En este artículo de hoy os hablaré de un tema de actualidad en el mundo del Machine Learning y la Ciberseguridad. En concreto vamos a hablar de securizar modelos de Deep Learning, como las redes neuronales. A alguno le puede sorprender que haya que hacer esto, pero deberéis esperar al final para entender si se puede o no hackear una red neuronal.
y Santiago Hernández en 0xWord.
Antes de comenzar repasaremos, a grandes rasgos, cómo funcionan las redes neuronales para que todos podamos entender la vulnerabilidad que afecta a algunos modelos de Deep Learning.
Una red neuronal sencilla
Lo primero que tenemos que saber es que las redes neuronales aprenden funciones, es decir, son capaces de mapear una entrada X a una salida Y. Por tanto, estos modelos tienen una fase previa de aprendizaje u optimización. Por ejemplo, podemos enseñar a una red neuronal a distinguir números manuscritos. Estos modelos son capaces de aprender funciones gracias a sus parámetros, normalmente denominados pesos.
Una red neuronal sencilla de una sola capa se rige por la ecuación de la Figura 3. Como veis una red sencilla no es más que una multiplicación de matrices. Cabe mencionar que muchas de las redes neuronales profundas que existen tienen millones de parámetros. Esto último es importante para entender los ataques que os vamos a explicar, ya que estos tienen éxito debido a la gran cantidad de parámetros que suelen tener este tipo de redes. ¡Vamos a ello!
Ataque FSGM (Fast Gradient Signed Method)
Este ataque consiste en generar ejemplos adversarios, casi indistinguibles por el ojo humano, que sean capaces de confundir o engañar a un modelo de Deep Learning. Es decir, entrenaremos una red neuronal para clasificar imágenes en diez posibles clases con una alta fiabilidad (cercana al 80%) y posteriormente, modificaremos estas imágenes de forma que la fiabilidad de la red baje y con ello provoquemos clasificaciones incorrectas.
Ataque FSGM (Fast Gradient Signed Method)
Este ataque consiste en generar ejemplos adversarios, casi indistinguibles por el ojo humano, que sean capaces de confundir o engañar a un modelo de Deep Learning. Es decir, entrenaremos una red neuronal para clasificar imágenes en diez posibles clases con una alta fiabilidad (cercana al 80%) y posteriormente, modificaremos estas imágenes de forma que la fiabilidad de la red baje y con ello provoquemos clasificaciones incorrectas.
Existen varios métodos para llevar a cabo este ataque, algunos de ellos muy sofisticados. El que veremos se denomina FSGM o Fast Gradient Signed Method. Podéis ver un par de ejemplos de este ataque en la Figura 4. En el primero podéis ver que el cambio sobre la imagen es imperceptible y en el segundo hemos exagerado el efecto para que veáis la transformación que hemos realizado.
Cuando entrenamos un modelo tenemos que pasarle unas entradas, que normalmente se encuentran acotadas dentro de un dominio. Por ejemplo, los píxeles de las imágenes toman valores enteros entre 0 y 255. Por tanto, nuestra red se debería comportar de la misma forma si introducimos los píxeles con intensidades X = [21, 34, 128, 11] y Xs = [21.001, 34.001, 128.001, 11.001]. La realidad es que no es así. Como vimos antes en una red sencilla se realiza la operación de la Figura 3. Eliminaremos algunos términos para facilitar la explicación, dejando la expresión de la siguiente forma:
Cuando entrenamos un modelo tenemos que pasarle unas entradas, que normalmente se encuentran acotadas dentro de un dominio. Por ejemplo, los píxeles de las imágenes toman valores enteros entre 0 y 255. Por tanto, nuestra red se debería comportar de la misma forma si introducimos los píxeles con intensidades X = [21, 34, 128, 11] y Xs = [21.001, 34.001, 128.001, 11.001]. La realidad es que no es así. Como vimos antes en una red sencilla se realiza la operación de la Figura 3. Eliminaremos algunos términos para facilitar la explicación, dejando la expresión de la siguiente forma:
Figura 5: Simplificación de la fórmula de la red neuronal
Como vemos nuestra entrada Xs es el resultado de sumar X + S, siendo S = [0.001, 0.001, 0.001, 0.001]. Por tanto, si introducimos como entrada Xs la salida vendrá determinada por la siguiente ecuación:
Figura 6: Salida modificada
Con esta ecuación podemos ver que si W es positivo y su dimensión es muy grande (recordad que en casos reales estamos hablando de millones de parámetros) podríamos producir un cambio muy grande en la salida haciendo un cambio muy pequeño en la entrada. La amplificación de la salida viene dada por la fórmula E*N*M, siendo E = ||S||, N el número de dimensiones de W y M el valor medio de W. El ataque FSGM modifica la imagen de entrada siguiendo la fórmula siguiente:
Como podéis ver estamos calculando el signo de los gradientes de la función de coste con respecto a la imagen de entrada y después lo estamos multiplicando por un valor E. El signo de los gradientes nos proporciona la dirección aproximada de maximización de la función de coste y con E regulamos la cantidad de pérdida. Por tanto, estamos modificando la imagen de forma que maximicemos la probabilidad de que la red falle. Sé que puede sonar un poco complicado, por ello vamos a intentar verlo gráficamente.
Representación gráfica del ataque FSGM y Demo
En la Figura 8 hemos dibujado la función de coste con respecto a la imagen de entrada. En esta gráfica hemos supuesto que la imagen solo se compone de dos píxeles para poder trabajar en tres dimensiones. El eje azul representa la función de coste J, el eje rojo representa el valor de intensidad del primer píxel de la imagen, el eje verde representa el valor de intensidad del segundo píxel y el punto amarillo indica la pérdida actual de la imagen (es decir, cuánto se confunde la red al clasificar la imagen de entrada).
La flecha negra con borde amarillo es el vector gradiente que hemos calculado. Si os fijáis, ésta apunta hacia la dirección de máximo crecimiento de la función de coste. Si aplicamos la función signo sobre este vector nos estamos quedando con la dirección aproximada a la que apunta. Con la variable E estamos indicando la longitud de este vector, es decir, la longitud de la flecha. Hemos implementado este algoritmo en TensorFlow. A continuación os dejamos un vídeo explicativo.
Figura 9: Explicación y demo de los ataques FGSM a redes neuronales
Si os habéis fijado este ataque es un ataque de caja blanca, es decir, necesitamos tener acceso a la red para poder calcular los gradientes, aunque también existen ataques similares de caja negra. Si queréis seguir investigando os animo a leer el siguiente paper, donde encontraréis más detalles sobre el ataque y algunas contramedidas o defensas. De todas formas, en el siguiente artículo tenéis explicadas algunas de estas defensas.
¡Espero que os haya gustado!
Autor: Marcos Rivera Martínez (@marcos_98_rm), Ingeniero Informático e investigador de Inteligencia Artificial y Ciberseguridad en el equipo de Ideas Locas de la unidad CDCO de Telefónica.
Figura 9: Explicación y demo de los ataques FGSM a redes neuronales
Si os habéis fijado este ataque es un ataque de caja blanca, es decir, necesitamos tener acceso a la red para poder calcular los gradientes, aunque también existen ataques similares de caja negra. Si queréis seguir investigando os animo a leer el siguiente paper, donde encontraréis más detalles sobre el ataque y algunas contramedidas o defensas. De todas formas, en el siguiente artículo tenéis explicadas algunas de estas defensas.
¡Espero que os haya gustado!
Autor: Marcos Rivera Martínez (@marcos_98_rm), Ingeniero Informático e investigador de Inteligencia Artificial y Ciberseguridad en el equipo de Ideas Locas de la unidad CDCO de Telefónica.
No hay comentarios:
Publicar un comentario