Conferencia 27 de DEFCON. Tu auto es mi auto. Parte 2

Conferencia 27 de DEFCON. Tu auto es mi auto. Parte 1

Al final del video, escuchó un clic: funcionó desbloqueando el bloqueo mecánico del volante, que no podemos evitar electrónicamente. Es necesario usar algo mecánico, romper el cilindro de la cerradura manualmente o hacer algo similar, lo que no iba a hacer con su automóvil. Todo el firmware que se muestra en estos videos estará disponible en GitHub después de mi presentación, por lo que debe dirigirse a la dirección indicada en la diapositiva y descargar el archivo OpenRemoteStart.

Hablemos de lo que sucede exactamente cuando agregamos Internet a este sistema, porque debería ser beneficioso, ¿verdad? Como dije, compré un módulo de control remoto de alarma llamado MyCar. Está disponible en varias versiones, tenía un modelo Linkr LT-1.



MyCar es solo una marca, y dichos módulos se venden bajo los nombres de Linkr LT-1, MyCar KIA, Visions MyCar, Carlink (CL6), etc. Al final resultó que, por algún tiempo, los concesionarios de KIA en Canadá instalaron este sistema en automóviles o, al menos, en una aplicación llamada MyCar KIA. Curiosamente, esta aplicación ya no está disponible para descargar en la AppStore. También quiero señalar que elegí los productos Fortin y MyCar, pero según las opiniones de los usuarios en los foros de temas de alarmas de automóviles independientes, otros sistemas no se comportan mejor y tienen problemas similares.

Tenía una pregunta importante: ¿por qué se vende un producto con problemas de seguridad en el mercado secundario para las alarmas de automóviles, y le molesta a alguien? Por lo tanto, si alguno de ustedes está interesado en los sistemas de arranque remoto, preste atención a un par de circunstancias importantes. En primer lugar, como mencioné anteriormente, si el sistema DS no está instalado correctamente en un automóvil con transmisión mecánica, es muy posible que después de un arranque remoto del motor, el automóvil simplemente se quede sin conductor si hay algo de engranaje en la caja de cambios. Esto es realmente peligroso. El segundo peligro es que si alguien estaciona el automóvil en un garaje adjunto a la casa y su motor se enciende accidentalmente de forma remota, podría asfixiarse por el monóxido de carbono acumulado. Entonces, si tiene un sistema DS y un garaje adjunto,definitivamente deberías tener detectores de monóxido de carbono.

Si usa un sistema DS, nunca intente arrancar el motor de la máquina sin saber exactamente dónde está, porque las consecuencias pueden ser desastrosas.

MyCar, una pequeña caja negra con dos cables que salen, tiene 8 puertos, dos de los cuales son para la interfaz del depurador. La conexión a esta interfaz mostró que el dispositivo está ejecutando Linux, sobre lo cual el fabricante no dice nada. Es fácil ingresar al shell del firmware utilizando la contraseña oelinux 123, pero puede usar el motor AE sin iniciar sesión, lo que le permite ingresar comandos AT desde la línea de comandos, incluido el comando para cambiar la dirección IP del dispositivo con el que se comunica este módulo.



Si miramos las siguientes líneas, podemos ver la dirección IP del servidor desde el cual el módulo MyCar recibe actualizaciones de firmware. El dispositivo está equipado con un puerto L, que le permite "escuchar" los comandos recibidos por el módulo. Usando el motor AE y cambiando la IP del dispositivo emparejado, pude determinar que este dispositivo se comunica con el DS utilizando el protocolo UDP no encriptado.

No profundicé particularmente en esto, pero creo que este es un hecho bastante significativo e interesante. Si está interesado en obtener información adicional sobre este dispositivo, eche un vistazo a esta diapositiva: muestra el voltaje de 3.3V, la velocidad de transferencia de datos de 115200 baudios, la dirección del servidor para actualizar el firmware, la contraseña de root y un enlace al manual del usuario.



El dispositivo también puede ser "tolerante" a un voltaje de suministro más alto.

Como dije, puede hacer bastante frío aquí. Aproximadamente un mes después de presentar este sistema a mi novia, decidí sacar la unidad del automóvil y trabajar con ella correctamente. El hecho es que todo este mes expulsé de mí mismo los pensamientos sobre la vulnerabilidad de este dispositivo. La semana siguiente prometieron escarcha a -30 ° F, así que tuve que apresurarme. Me conecté al shell y lo hice funcionar, pero como la conexión celular en el laboratorio de mi casa no es muy buena, decidí trabajar con la unidad en otra computadora. El dispositivo FTDI que uso tiene un cable corto, así que encontré otro más largo, lo conecté a la unidad DS, lo conecté a la computadora, y tan pronto como encendí la alimentación, ¡mi módulo comenzó a fumar!

De esto podemos aprender una lección: si está involucrado en piratería de hardware, ¡tenga un bloque de repuesto listo! Mi novia formuló la moraleja de esta historia: si tu alma gemela es un hacker, ¡no dejes que juegue con tus regalos de Navidad! Y ahora echemos un vistazo al software, creo que nada va a fumar aquí.



Lancé un servidor proxy man-in-the-middle, desactivé la verificación SSL en mi teléfono y comencé a observar qué tráfico envía la aplicación a la parte del servidor. Al registrarme, noté que el sistema toma mi dirección de correo electrónico y la envía al servicio web para asegurarse de que esta dirección esté asociada a una cuenta existente. Curiosamente, el sistema usó autenticación básica en este caso, porque todavía no había creado una cuenta. No sabía qué hacer con esta información, así que la anoté en un cuaderno y seguí adelante. Creé mi cuenta e inicié sesión, y lo primero que hace la aplicación al iniciar sesión es llamar a un servicio web para verificar el usuario actual. Así que acabo de llamar a este servidor web usando las credenciales que vi anteriormente y que se usaron para verificar que¿Existe mi dirección de correo electrónico y Mycar Admin ha recibido acceso en respuesta?



Dudaba que esta fuera la cuenta del administrador real del sistema, porque, a pesar del sonido fuerte, tenía pocos privilegios. Al final, todos conocemos a esas personas.

Por lo tanto, creo otra solicitud: el equipo EngineStart, para iniciar el automóvil desde esta cuenta, haga clic en "Enviar", obtengo el estado del comando - "200 OK", y después de unos tres segundos, mi automóvil comienza a moverse.



Al final resultó que, la cuenta de administrador Mycar era de hecho una cuenta de administrador, codificada en la aplicación móvil. Pero eso no es todo. En una de las diapositivas anteriores, viste una clave API. Nuevamente, al monitorear el tráfico de mi servidor proxy falso, descubrí que estas claves API se pueden usar en lugar de un nombre de usuario y contraseña. Si utiliza "API" y una de estas claves como nombre de usuario, puede autenticar al usuario.



Así que copié el contenido de la línea "APIKey", lo pegué en la línea Contraseña de la aplicación POST e hice clic en el botón "Enviar".



Sin embargo, esto no funcionó, y durante 5 minutos no pude entender por qué. Finalmente, me di cuenta de que olvidé cortar las comillas y las comas en la clave API copiada, de la que me informaron: "Cometiste un error en la sintaxis SQL". Me quedó claro que simplemente puede usar la inyección SQL básica para omitir todo el proceso de inicio de sesión y convertirse en un administrador o cualquier usuario que desee. No creo que nadie haya intentado robar un automóvil con inyección SQL, así que intentemos hacerlo.





En general, inicié sesión con mi cuenta, hice clic en "Enviar" y recibí el estado "200 OK" en respuesta. Esta vez me di cuenta de grabar un video. Está un poco oscuro porque dispare a altas horas de la noche desde la ventana de mi oficina. Entonces, entro en el comando, y ves a través de la ventana que en la parte inferior del patio de los faros del automóvil parpadean. Al principio, su luz es débil, pero luego los faros comienzan a brillar a plena potencia, esto encendió el motor. Entonces, comencé el auto usando inyección SQL (aplausos de la audiencia).

Pero eso no es todo. La inyección SQL se puede usar no solo para la autorización, sino también para reemplazar otros parámetros, como URL, parámetros del cuerpo de la cadena de consulta, etc. De hecho, este sistema usa inyección SQL en todas partes. Al observar los mensajes de error, puede ver que lo que ingresamos como contraseña se compara directamente con la columna de contraseña en la base de datos.



Esto significa que usan contraseñas de texto simples en inyecciones SQL. Como dice el refrán, "esto no es para nada bueno, ¡pero incluso muy malo!" Pero lo suficiente sobre SQL, veamos qué más se puede hacer para arrancar un automóvil de forma remota. Simplemente envía el comando "EngineStart" y, a cambio, obtienes un identificador entero, que es el identificador de este comando, en este caso ID = 3. Conociendo el identificador, puedes "extraer" un servicio que informa el estado de este comando.



Por lo tanto, al aumentar o disminuir el valor de ID, "saco" el estado de cualquier equipo que haya sido enviado a este sistema.



Sin embargo, esto no es particularmente interesante, y me pregunto si hay una indicación directa de un objeto que pueda usar para encender mi automóvil. Por lo tanto, inicié el comando EngineStart en nombre de un usuario legítimo desde mi cuenta, y luego intenté llamarlo a través de la cuenta de otro usuario, que no debería tener acceso al sistema. En respuesta, recibí un mensaje de error: "Esta cuenta está fuera del contexto de la jerarquía". Entonces, quizás, este método de piratería no funcionará. Sin embargo, si observa esta API, verá que duplica la información: la dirección de correo electrónico del usuario es comparable a su ID de cuenta.



Si está desarrollando una API o pirateando una API, la duplicación de información que vemos en esta URL puede ser una fuente de errores. En este caso, los errores de API pueden manifestarse de cuatro maneras diferentes.



Si observa los casos 2 y 3, encerrados en un círculo rojo, puede ver enlaces directos al objeto. En ambos casos, el sistema no verifica si está autorizado para ejecutar este comando. Intenté el caso 2 y no funcionó, pero ¿qué pasa con el caso 3? Aquí solo tenemos que reemplazar el identificador de cuenta USER_EMAIL en la URL, ya que está directamente vinculado al identificador de cuenta ACCOUNT_ID. Anteriormente, utilizamos el identificador de la cuenta de la víctima, y ​​ahora utilizamos la cuenta del atacante. Por lo tanto, utilicé el identificador de la cuenta de hacker y el identificador del dispositivo de la víctima, envié el comando y, como se esperaba, recibí el estado del comando "200 OK" y obtuve el control sobre la aplicación MyCar.
Por lo tanto, utilizando tres vectores de ataque diferentes, pudimos hacer todo lo que un usuario legítimo de la aplicación puede hacer. Esto significa que puede encontrar cualquier automóvil en la ciudad, configurar su marca y modelo en la aplicación, y luego desbloquear el automóvil de forma remota y encenderlo. Podemos apagar o encender la alarma, hacer cambios en el menú de servicio del automóvil y verificar el estado de cualquier equipo. Y todo esto se puede hacer de tres maneras diferentes.



Obviamente, los desarrolladores de MyCar intentaron de alguna manera corregir los errores del sistema. Entonces, en el caso de las contraseñas codificadas, simplemente colocan un servidor proxy inverso frente a la aplicación para ocultar las credenciales que se utilizan para la autorización. El problema es que los proxys inversos no son mágicos y no pueden solucionar todos los problemas. Guardaron la inyección de SQL en un servicio de terceros, por lo que incluso sin una contraseña, todavía puedo usarla a través del procedimiento de verificación del usuario.



Decidí echar un vistazo más de cerca a la estructura de la URL. Es posible que haya notado que todas las direcciones utilizadas por el sistema contienen m2m. Habiendo decidido que este es algún tipo de interacción interna para el mecanismo de autorización en la aplicación MyCar, ingresé estas cartas en Google y descubrí el sitio web de M2M Suite. Lo único que debe hacer después de ver este formulario es insertar un par de comillas simples allí y ver qué sucede. Y lo que sucede es que obtienes la inyección SQL correcta (aplausos de la audiencia).





Y esto sucede unos meses después de que los desarrolladores informaron un problema con la inyección SQL. Si la aplicación tiene tales problemas, deben corregirse lo antes posible, pero como puede ver, los desarrolladores no hicieron nada. Tal desprecio por los usuarios, lo encuentro ofensivo.

El módulo MyCar tiene una unidad GPS, por lo que puede rastrear la ubicación de su automóvil y mostrarlo en la aplicación. Pero, resultó que almacenan no solo la ubicación actual de los automóviles. Almacenan una gran cantidad de información, mucho más de lo necesario para rastrear la ubicación actual de la máquina. En mi caso, durante 13 días de uso de la aplicación, acumularon un poco menos de dos mil puntos de geolocalización de los lugares que visitó mi automóvil. La política de privacidad del desarrollador de MyCar no dice una palabra sobre esta recopilación de información.

Sin embargo, aún más empeora. Puede argumentar que esto es solo un efecto secundario de la implementación del servicio de geolocalización. Pero el hecho es que, en lugar de simplemente crear una lista de lugares en los que se encuentra su automóvil, utilizan otra API que analiza estos datos y determina los lugares en los que se encuentra su automóvil con mayor frecuencia. Una vez más, que yo sepa, en la política de privacidad no hay indicios de tal función. Quizás esto no sea tan sorprendente, porque después de un montón de búsquedas, encontré la compañía matriz MyCar llamada Procon Analytics, fui a su sitio y visité la sección de Preguntas Frecuentes. Aquí me encontré con la pregunta: "¿Cómo se garantiza la seguridad de los datos?". La respuesta de la empresa fue: "A diferencia de los entornos de nube pública que luchan por la prioridad de almacenamiento,Procon Analytics utiliza su propia nube virtual, que se utiliza exclusivamente para los usuarios de nuestra aplicación y está protegida de otros usuarios. Este es un entorno de nube especial con un alto grado de protección, que proporciona una disponibilidad fácil y una velocidad de entrega de servicios. Al trabajar con Procon Analytics, puede estar seguro de que sus datos están bien protegidos ". Ni siquiera sé qué decir ...



Si vas a su página de Facebook, puedes descubrir aún más interesante. Aquí escriben directamente: "¡Proteger la información sobre su vehículo es vital!". Bueno, solo puedo estar de acuerdo con esta declaración.

Entonces, volviendo a la pregunta con la que comencé: "¿Cómo sucede esto y cómo se puede evitar?" Y lo más importante, ¿cómo podemos, como comunidad, evitar esto?

Este es el final de mi informe, pero aún puedo responder un par de preguntas (aplausos de la audiencia).

¿Estás preguntando si lo han arreglado todo? Por el momento, creo que han solucionado todos los errores que les informé, excepto las deficiencias de la política de privacidad, que mencioné al final del discurso. La última vez que lo revisé, todo no cambió. A la pregunta, ¿puedo editar los parámetros de la unidad de control electrónico del motor de la ECU de esta manera? Responderé que mi tarea era editar los parámetros del automóvil solo en la aplicación MyCar. Almacena la representación digital del automóvil, que se edita mediante el acceso directo al objeto, inyección SQL u otro vector de ataque.

La última pregunta es: ¿tengo un sistema de arranque del motor sin llave en el automóvil con el botón de Inicio, y cómo es la situación con el bloqueo del volante en este caso? Mi respuesta es que MyCar tiene dicho botón, por lo que este sistema no tiene bloqueo del volante. Sospecho que si instala este sistema, definitivamente no puede confiar en un bloqueo para bloquear el volante.


Un poco de publicidad :)


Gracias por estar con nosotros. ¿Te gustan nuestros artículos? ¿Quieres ver más materiales interesantes? Apóyenos haciendo un pedido o recomendando a sus amigos, VPS en la nube para desarrolladores desde $ 4.99 , un análogo único de servidores de nivel básico que inventamos para usted: toda la verdad sobre VPS (KVM) E5-2697 v3 (6 núcleos) 10GB DDR4 480GB SSD 1Gbps desde $ 19 o cómo dividir el servidor? (las opciones están disponibles con RAID1 y RAID10, hasta 24 núcleos y hasta 40GB DDR4).

Dell R730xd 2 veces más barato en el centro de datos Equinix Tier IV en Amsterdam? Solo tenemos 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV desde $ 199 en los Países Bajos.Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ¡desde $ 99! Lea sobre Cómo construir un edificio de infraestructura. clase c con servidores Dell R730xd E5-2650 v4 que cuestan 9,000 euros por un centavo?

All Articles