lunes, abril 15, 2019

Jugando al Mario Kart con los coches Tesla. ¡Mamma Mia! (Parte 1 de 2)

Todos hemos jugado alguna vez al fantástico juego Mario Kart de Nintendo. En él, controlamos un vehículo utilizando un mando de juegos en una carrera dentro de un circuito el cual también encontramos repartidos diferentes objetos que nos permiten obtener ventajas (como, por ejemplo, más velocidad) algunos de ellos impresos en la misma carretera.

Figura 1: Jugando al Mario Kart con los coches Tesla.
¡Mamma Mia!(Parte 1 de 2)

Bueno pues parece que ahora controlar un vehículo Tesla con un mando de juegos al más estilo Mario Kart y además añadir marcas en la carretera para engañar al piloto automático (Autopilot) ya es posible, al menos es lo que cuenta este paper titulado "Experimental Security Research of Tesla Autopilot".

Figura 2: "Experimental Security Research of Tesla Autopilot"

Vamos analizar en detalle este interesante documento, mezcla de ingeniería inversa, exploits, vulnerabilidades y Machine Learning. Recuerda, si quieres conocer algunos conceptos y técnicas relacionados con la seguridad y Machine Learning, nada mejor que nuestro libro, "Machine Learning aplicado a la Ciberseguridad: Técnicas y ejemplos en la detección de amenazas"

Figura 3: "Machine Learning aplicado a Ciberseguridad" de 0xWord

Hacking de Autos

Ya hablamos en su día de diferentes formas de hackear autos. Nuestros compañeros hablaron de cómo hackear un BMW i8 - mira que es difícil de encontrar uno de estos, y les dio por este modelo concreto - utilizando un software inyectado para tomar control del CANBus, y hoy en día hemos hablado de herramientas como CANAlyzat0r para buscar vulnerabilidades en CAN Bus.


Figura 4: Hackeando CANBus en automóviles

Centrados en Autopilot, hablamos de cómo los vehículos autónomos podían ser hackeados utilizando falsas señales de tráfico que confundieran a gusto del atacante su sistema de Artificial Vision. Ahora un equipo de investigadores de la empresa china Tencent Keen Security Lab han contado en el paper que hemos mencionado antes, varios hacks un vehículo Tesla.

El primer hack explica cómo es posible engañar a las redes neuronales de los coches Tesla utilizando pegatinas en la carretera, muy similar a la técnica de las señales falsas. El segundo hack explica cómo han conseguido infiltrarse en el piloto automático (APE) donde además han llegado a controlar el ECU (Engine Control Unit), es decir, la unidad que controla el motor, lo que se traduce en llegar a tener acceso total de forma remota a los mandos de control del vehículo.

Antes de continuar, tenemos que destacar que estos problemas (los cuales algunos son de 2017 y 2018) ya han sido parcheados y solucionados por la empresa del gran Elon Musk (ahora es cuando se ha hecho público todo el resultado de la investigación, la cual antes fue reportada a Tesla para que solucionara). Es más, el mismísimo Elon ha felicitado a los investigadores en una actitud que no todas las empresas tienen hacia aquellos que encuentran vulnerabilidades en sus productos.

Figura 5: Tesla Model S

En principio, esta investigación sólo afectaba (al menos este ha sido el único modelo donde se ha realizado la investigación) al Tesla Model S 75, con un hardware de piloto automático versión 2.5 y una versión de software 2018.6.1.

Cambiando la trayectoria del Tesla usando pegatinas en el suelo

El sistema de reconocimiento visual de Tesla con el piloto automático funciona realmente bien en casi cualquier condición (aunque no está recomendado en casos intensos de nieve, lluvia, niebla, etcétera). Existen cientos de vídeos que lo demuestran, pero al ser un sistema de visión puro, la información recibida requiere ser analizada y procesada antes de pasar a las complejas redes neuronales del Tesla.

Es decir, la cámara (o mejor dicho, las cámaras) HDR de 12bits (posiblemente una RCCB) obtiene las imágenes en RAW, lo que significa no se procesa la información durante su captura. Por lo tanto, necesita de un pre-procesado antes de llegar a la red neuronal correspondiente. Esas imágenes se copian directamente en una memoria compartida desde una función llamada tesla:TslaOctopusDetector::unit_process_per_camera la cual se encarga de procesar cada imagen ajustando algunos parámetros como son el tono, nivel de detalle, etcétera.

Todas esas imágenes ya procesadas se asignan su red neuronal correspondiente las cuales se encargarán de diversas funciones, como por ejemplo controlar el coche, analizar objetos, las líneas en la carretera, crear mapas de los alrededores, etcétera. Los investigadores se centraron las DNN (Deep Neural Networks) que se encargan del reconocimiento de las líneas de la carretera y el algoritmo que mantiene el vehículo siguiendo dichas líneas (Autosteer).

Figura 6: Esquema de las conexiones entre el APE (Tesla Autopilot)
y el resto de componentes del vehículo tal y como aparece en el paper.

Para esta función de reconocimiento de líneas y Autosteering, Tesla utiliza una sola gran red neuronal con varias salidas diferentes, en vez de usar una específica para cada acción concreta. La detección de las líneas de la carretera es una de estas acciones que utilizan una gran única red neuronal con múltiples salidas.

Una vez la imagen se ha procesado, se introduce en dicha red neuronal y una vez obtenido el output (salida), esta se envía a una función llamada detect_and_track la cual llamará a diferentes kernels CUDA para realizar diferentes funciones como comprobar los bordes de la línea para ver si están borrosos, añadir máscaras a los bordes de las líneas, ajustar las líneas a una rejilla virtual (generada a partir de la red neuronal que se encarga de mapear el entorno en un mapa virtual), añadir puntos de control en las líneas, etcétera. El siguiente cuadro resume todo el proceso de reconocimiento:

Figura 7: Ejemplo del procedimiento de reconocimiento de imagen,
en este caso de una línea en la calzada.

Antes de poder aplicar cualquier tipo de ataque basado en las imágenes recibidas, es necesario probar el rendimiento y estudiar el funcionamiento de los algoritmos en un entorno digital (antes de pasar al mundo real). Para ello utilizaron algoritmos “adversarios”, una técnica de Machine Learning cuyo objetivo principal es engañar un modelo concreto y su salida correspondiente a través de cambios y manipulaciones en la entrada de la información.

Figura 8: Paper que explica los ataques de Zeroth Order Optimization

Comenzaron con el sistema que detecta la lluvia (el cual utiliza una cámara en vez de un sensor) inyectando diferentes modelos de “ruido” y en concreto un tipo de ataque llamado “Zeroth Order Optimization” (ZOO) o también usando ataques de sustitución. Ambos algoritmos tienen que común que modifican la estimación del gradiente, dicho simplificando mucho el término, es algo parecido modificar el vector el cual ofrece la dirección que ofrece la solución óptima.

Figura 9: En este paper se explican los ataques de sustitución

Estos dos métodos tienen el problema de necesitar grandes cálculos lo que finalmente lleva a una tarea computacional demasiado compleja, casi imposible de implementar con resultados satisfactorios. Finalmente optaron por otro método de ejemplo de ataque adversario utilizando DNN con el algoritmo PSO (Particle Swarm Optimization). Este tipo de ataque se basa en generar un enjambre (swarm) de ruido e inyectarlo dentro de las imágenes obtenidas.

Utilizando esta técnica repetidamente contra las diferentes redes neuronales, es posible ir ajustando la puntuación obtenida en la salida de cada una de ellas hasta conseguir el resultado deseado. Además con la ventaja añadida de que dicha distorsión sólo puede ser detectada por una red neuronal y no por el ojo humano.

Figura 10: Ejemplo de inyección adversaria donde confunde a la IA al
Panda con una Llama sin que los cambios sean detectados por el ojo humano.

Por lo tanto, el objetivo final de la investigación es llevar este ataque en el mundo digital con resultado satisfactoria al mundo físico. En el caso de los parabrisas, lo consiguieron simplemente colocando una televisión justo en frente de la cámara que detecta la lluvia en el cristal e ir proyectando diferentes imágenes PSO (este ataque es poco factible implementarlo en el mundo físico en un escenario real). En pocos intentos consiguieron engañar la red neuronal.

En el caso de la detección de la línea, hay que usar un enfoque diferente. De hecho, realizaron dos tipos de ataques distintos que veremos en la siguiente parte.

Autor: Fran Ramírez, (@cyberhadesblog) es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps" y del blog Cyberhades.

No hay comentarios:

Publicar un comentario