- Con la controversia por la prohibición de Flipper Zero en Canadá como contexto, se capturan y analizan en la práctica señales RF de llaveros de auto para comprobar hasta dónde es posible un ataque simple de repetición
- RTL-SDR puede recibir datos I/Q sin procesar en el rango de 24 a 1750 MHz para visualizarlos, guardarlos y analizarlos, mientras que el CC1101 de Flipper Zero puede transmitir y recibir, pero necesita la configuración RF correcta
- En 433.92 MHz se observaron tres ráfagas cortas con cada pulsación de botón, y los dos picos a ambos lados de la frecuencia central se interpretan como 2-FSK, donde 0 y 1 se transportan en frecuencias distintas
- Al aplicar FSK, 50 samples/symbol y decodificación Manchester II en Universal Radio Hacker, aparece una estructura con una ráfaga larga sin datos, tres paquetes principales y un paquete final corto
- En la señal se identifican una zona de alta entropía para el rolling code, un contador incremental, bytes de comando lock/unlock, número de secuencia del paquete, checksum XOR y syncword, lo que lleva a la conclusión de que es difícil robar la mayoría de los autos solo con reproducción simple
Objetivo y contexto del experimento
- Durante varios años se han explorado protocolos de comunicación inalámbrica con un dongle RTL-SDR, y esta vez el foco está en comprobar cómo un llavero de auto transmite datos y qué tan viable es un ataque de repetición
- Ya se habían capturado señales de llaveros antes, pero el acceso limitado a autos para probar impidió llegar a un análisis significativo
- Este experimento es una preparación para hacer ingeniería inversa y reproducir en la práctica la señal de un llavero, siguiendo desde conceptos básicos de RF hasta el flujo de análisis
- También aborda la idea de que, a diferencia de la prohibición de Flipper Zero en Canadá, la mayoría de los autos no son fáciles de robar solo con un ataque simple de repetición
- Se menciona RollingPwn como caso excepcional relacionado con Honda
Hardware utilizado
-
RTL-SDR
- Un dongle USB de TV/radio terrestre de unos 10 dólares puede convertirse en un receptor RF multipropósito para inspeccionar y decodificar señales en el rango de 24 a 1750 MHz
- RTL-SDR es potente gracias al chip RTL2832U, que permite usar SDR
- Permite saltarse el procesamiento de señales que normalmente se hace en hardware y dar al host acceso directo a datos I/Q sin procesar
- Al recibir datos sin procesar, se puede recibir, visualizar, guardar y analizar directamente, aunque no se conozcan de antemano parámetros concretos como el tipo de modulación, el ancho de banda o la tasa de datos
-
Flipper Zero y CC1101
- La parte importante de Flipper Zero para este experimento es el módulo Sub-GHz
- Ese módulo está basado en el chip CC1101 y soporta frecuencias por debajo de 1 GHz usadas por dispositivos inalámbricos de consumo comunes
- El módulo CC1101 también puede comprarse por separado por 5 dólares o más y usarse con Arduino, Raspberry Pi o adaptadores USB-to-TTL
-
Diferencias entre CC1101 y RTL2832U
- El CC1101 de Flipper Zero es un transceptor, por lo que puede tanto transmitir como recibir señales
- El RTL2832U de RTL-SDR puede recibir y analizar señales sin procesar, pero no puede transmitir
- Como el CC1101 no soporta SDR, solo devuelve datos completamente procesados, y para que sea útil la configuración RF de la señal transmitida debe ser correcta
- También existen equipos SDR capaces de transmitir y recibir, pero suelen ser caros
Conceptos básicos para leer señales RF
- Las transmisiones de radiofrecuencia envían señales mediante ondas de radio, que son ondas electromagnéticas
- Se usa una portadora de mayor frecuencia que la señal original a transmitir para aumentar la confiabilidad de la transmisión por el aire
- La frecuencia es la cantidad de veces por segundo que ocurre la portadora y, por lo general, se usa para definir un canal de comunicación
- La modulación es la forma de representar datos en una onda de radio
- AM representa datos mediante cambios de amplitud
- FM representa datos mediante cambios de frecuencia
- El ancho de banda es el rango de frecuencias que ocupa una señal RF modulada y está relacionado con la cantidad de datos que puede transportar la señal
Señal del llavero vista con SDR#
-
Herramienta y frecuencia
- SDR# es una aplicación DSP gratuita escrita en C# que soporta visualización de espectro en tiempo real para SDR y demodulación de algunas modulaciones comunes
- Se conecta el dongle RTL-SDR y se usa el driver WinUSB en lugar del driver DVB-T predeterminado
- Al sintonizar 433.92 MHz se puede ver actividad de controles remotos cercanos
- 433.92 MHz se presenta como una frecuencia estándar sin licencia usada en la UE y países vecinos, además de Marruecos, el lugar de residencia
-
Patrón observado
- Cada vez que se presiona un botón del llavero del auto, se generan tres ráfagas cortas consecutivas
- A ambos lados de los 433.92 MHz del centro del espectro aparecen dos picos grandes
- Tras investigar esquemas de modulación comunes, esta forma parece coincidir con 2-FSK
- Los picos pequeños visibles en la pantalla se consideran frecuencias no deseadas causadas por hardware de transmisión barato y por la corta distancia entre el control remoto y la antena, por lo que se ignoran
-
Interpretación como 2-FSK
- FSK significa Frequency-Shift Keying y es un tipo de modulación de frecuencia que codifica datos cambiando la frecuencia de la portadora entre varias frecuencias discretas
- El “2” de 2-FSK indica la cantidad de canales usados para la codificación
- En este caso, 0 y 1 se codifican en dos frecuencias distintas, lo que explica los dos picos observados
Extracción de bits y bytes con Universal Radio Hacker
-
Análisis con URH
- Universal Radio Hacker es un conjunto de herramientas open source para investigar protocolos inalámbricos y soporta varios SDR de forma nativa
- URH ofrece demodulación de señales y detección automática de parámetros de modulación, y se usa para identificar los bits y bytes que viajan por el aire
- Al principio no encontró los parámetros correctos y produjo resultados incorrectos
- Al grabar varias señales repetidas de una sola vez, aumentó la tasa de éxito de la detección automática, y en este caso 50 samples/symbol, FSK resultó ser la configuración correcta
-
Estructura de las ráfagas y decodificación Manchester
- Al ampliar la señal, vuelven a confirmarse las tres ráfagas vistas en SDR#
- La segunda ráfaga, a su vez, está formada por tres partes separadas, por lo que el análisis queda con cinco secciones en total
- Al extraer automáticamente la secuencia de bits de cada sección y convertirla a hexadecimal, aparecieron patrones repetidos, pero se repetían los mismos cinco números hexadecimales y muchos bytes
0x55, por lo que hacía falta procesamiento adicional - Tras probar varios algoritmos de decodificación en la pestaña Analysis de URH, Manchester II convirtió los bytes
0x55en null y no generó errores de decodificación
-
Rol de la codificación Manchester
- Manchester es un esquema simple de modulación digital que evita que la señal permanezca mucho tiempo en estado lógico low o high
- Convierte una señal de datos en una señal combinada de datos y sincronización, lo que resulta útil para clock recovery
- Como los medios analógicos son vulnerables al ruido y la interferencia, esta característica ayuda al enviar datos digitales
- En Manchester, los datos binarios se codifican como dos bits opuestos
- Ejemplo:
0pasa a ser01y1pasa a ser10, o al revés según la convención
Estructura de paquetes y estimación del rolling code
-
Estructura visible con cada pulsación
- Tras comparar manualmente varias capturas, cada pulsación de botón muestra una estructura constante
- Hay una ráfaga larga sin datos que, al decodificarse, se convierte en 100 bytes null
- Hay tres ráfagas muy similares, pero con dos bytes que cambian parcialmente
- Les sigue una ráfaga final más corta, bastante parecida a las tres anteriores
- Las tres ráfagas centrales se consideran paquetes principales y se analizan con más detalle
- Se encuentra un ID incremental que parece aumentar en 1 con cada señal nueva
-
Mecanismo de rolling code
- El rolling code se usa en sistemas de acceso sin llave para impedir ataques simples de repetición
- Evita que un atacante grabe una transmisión y luego la reproduzca para que el receptor desbloquee el auto
- El auto y el control remoto acuerdan un algoritmo criptográficamente seguro para generar el rolling code usado en la autenticación
- La clave se genera y rastrea usando un contador, y los contadores del control remoto y del auto deben mantenerse sincronizados
- Una ventana de validez permite que el control remoto no quede fuera de sincronía incluso si el auto no recibe la señal
- Muchas implementaciones permiten hasta 255 pulsaciones fuera de rango; después de eso, el control remoto debe resincronizarse manualmente
-
Identificación de campos de la señal
- Como el rolling code es criptográficamente seguro, la parte de mayor entropía de la señal se identifica como el área relacionada con esa implementación
- El ID incremental encontrado antes se estima como el contador del sistema de rolling code
- Al comparar señales lock y unlock, se identifica el byte que representa el comando
8= unlock4= lock
Número de secuencia, checksum y syncword
-
Valor que parece ser el número de secuencia del paquete
- Una de las áreas variables restantes repite los mismos valores en otras señales capturadas
- Al ver los tres valores en binario, los bits más significativos aumentan como una secuencia
0x6:01100xA:10100xE:1110- Al incluir el cuarto paquete final se obtiene
0x13:10011, lo que encaja con la interpretación de que contiene el número de secuencia del paquete - El cambio en los bits menos significativos se excluye de este juicio
-
Checksum XOR
- El último byte cambia en cada paquete y también cambia de forma aparentemente aleatoria entre señales completas
- Como es el último byte del paquete y cambia de forma irregular, podría ser un checksum
- Al hacer XOR entre este byte y el byte de secuencia analizado antes, en cada ejemplo se obtiene un valor fijo
- Ejemplo 1:
0x06 ^ 0xB9 = 0xBF0x0A ^ 0xB5 = 0xBF0x0E ^ 0xB1 = 0xBF
- Ejemplo 2:
0x06 ^ 0xCC = 0xCA0x0A ^ 0xC0 = 0xCA0x0E ^ 0xC4 = 0xCA
- Al aplicar XOR a todos los bytes del paquete, el valor siempre quedó desfasado en 1, y es probable que los primeros dos bytes estén excluidos del checksum
- Los primeros dos bytes se interpretan como una syncword, que sirve para sincronizar el receptor e indicar el inicio de los datos
Composición final de la señal y próximos pasos
- La ráfaga larga inicial sirve para despertar al receptor de radio que está en modo de bajo consumo en estado inactivo y prepararlo para recibir datos
- El motivo por el que el control remoto envía tres paquetes con datos casi idénticos es garantizar confiabilidad por si una de las transmisiones se daña
- El etiquetado final interpreta la señal del llavero del auto como dividida en syncword, área relacionada con rolling code, contador, byte de comando, número de secuencia del paquete, checksum XOR, etc.
- El siguiente paso es integrar este formato de señal en Flipper Zero para soportar lectura, reserialización y reproducción
- Si hay información incorrecta o margen de mejora, se puede enviar un pull request en GitHub
1 comentarios
Opiniones en Hacker News
Tuve que hacer ingeniería inversa de un control remoto de llave de auto barato que compré en AliExpress para un proyecto de electrónica, y con solo un osciloscopio y Wikipedia, después de dedicarle bastante tiempo, pude lograrlo.
La próxima vez pienso probar el método de este post y volverme un mejor hacker.
También hay un diagrama de flujo de GNU Radio para un propósito similar: https://github.com/bastibl/gr-keyfob
Material de la presentación: https://www.fleark.de/keyfob.pdf
Si entre el control remoto y el auto se generan y rastrean claves con un contador para mantenerse sincronizados, siempre me pregunté cómo hacen los controles remotos de aprendizaje para sortear eso.
Mi auto tiene algunos botones integrados para la puerta del garaje, y creo que los configuré poniendo el auto en modo de aprendizaje y presionando el botón del control del garaje. Me pregunto si, en lugar de ser una simple reproducción, es una función mucho más compleja que decodifica la señal, identifica el tipo e inicia el emparejamiento con el abridor.
Entiendo que colaboran con varias empresas para soportar códigos fijos y códigos rolling, y permitir el emparejamiento con esa puerta de garaje. Chamberlain[0], el mayor fabricante de puertas de garaje de EE. UU., posee varias marcas y usa un algoritmo de código rolling conocido que se puede decodificar[1].
[0] https://www.chamberlain.com/
[1] https://github.com/argilo/secplus
El proceso se parece más a decirle al abridor: “¿Escuchas este nuevo control remoto? Deja que este también abra la puerta”. El botón del auto parece ir probando algunos protocolos comunes, y en la práctica probablemente haya unos 4 o 5 ampliamente usados en EE. UU., como los de las familias Chamberlain/Liftmaster o Genie.
En esos sistemas, un control remoto de aprendizaje puede funcionar simplemente reproduciendo tal cual la señal grabada, pero si durante la grabación se cuela alguna otra señal en la misma banda, como la de un timbre inalámbrico, podría reproducir también algo incorrecto. Por eso, como mínimo, hace falta recortar solo la parte real de la señal de la puerta; mejor aún sería decodificar la señal, obtener el código y generar cada vez una señal nueva y limpia.
Casi todas las empresas estadounidenses de abridores residenciales de puertas de garaje cambiaron sus modelos nuevos a código rolling en la década de 1990, así que si la instalación tiene unos 25 años o menos, casi con certeza usa código rolling. Normalmente, el control remoto genera una secuencia seudoaleatoria con una semilla, envía el siguiente valor cada vez que se presiona, y la unidad principal, en modo de aprendizaje, observa varios valores consecutivos, estima esa semilla y lo agrega a la lista de controles remotos.
Durante el funcionamiento, la unidad principal decodifica el valor de la secuencia recibido y verifica si está dentro del rango esperado para alguno de los controles remotos conocidos; si coincide, abre la puerta y actualiza la posición de ese control. También deja un pequeño margen para que, si un niño presiona el botón varias veces por el camino, no pase que al llegar a casa ya no abra.
En principio también es posible un control remoto de aprendizaje que clone un control rolling existente, pero desde el punto de vista de la unidad principal, la copia y el original son el mismo control. Si uno de los dos no se usa durante mucho tiempo mientras el otro empuja la secuencia fuera del margen permitido, uno de ellos podría dejar de funcionar, y el reemparejamiento también podría complicarse según los detalles de implementación del sistema.
Los controles remotos universales para código rolling que he visto en la práctica no aprendían de un control existente, sino que se les indicaba el tipo de unidad principal y luego se emparejaban con ella como si fueran un control del fabricante. Como la interfaz de usuario es pobre, probablemente implique buscar un número en una tabla del manual, presionar un botón oculto y luego presionar el botón a programar tantas veces como indique ese número.
Sería bueno poder identificar automáticamente qué sistema de código rolling es viendo la señal de un control existente, pero para eso se necesita un receptor, y como casi no serviría para nada más, es difícil justificarlo. El emparejamiento de la puerta del garaje y los comandos de apertura/cierre son básicamente unidireccionales, del control remoto a la unidad principal.
El autor lo decodificó todo, pero en realidad no abrió la puerta del auto. Todavía tiene que romper el código rolling, y no funciona simplemente sumarle 1 y volver a enviarlo.
Visto desde afuera, el siguiente código rolling debería parecer aleatorio.
Ojalá los fabricantes de autos empezaran a hacer controles muy pequeños, quizá controles RFID, que se puedan llevar en la billetera.
O que algún dispositivo pequeño tipo Flipper, del tamaño de una tarjeta de crédito, haga lo mismo. En serio, la llave del auto es el objeto más grande en mi bolsillo después del celular, y al menos por grosor resulta bastante molesta.
Fue refrescante leer algo que pude entender después de tanto tiempo.
Con el acceso cada vez más fácil a equipos de programación de llaves, es interesante la tendencia de poner los permisos de programación de llaves detrás de una “seguridad” más fuerte.
El fabricante decide qué forma parte del sistema de “seguridad”, y eso puede extenderse no solo a las llaves, sino también a muchísimos módulos. Es discutible si esto tendrá efecto sobre criminales famosos por respetar las reglas (/s), pero sin duda afecta a algunas empresas.
Tener antecedentes penales puede impedir la participación. Para una persona con antecedentes, iniciar un negocio propio y que le vaya bien después de cumplir su condena es una de las vías importantes, pero bajo este sistema puede volverse muy difícil.
https://wp.nastf.org/?page_id=367
https://wp.nastf.org/wp-content/uploads/2023/07/ApplicationC...
¿Hace falta interceptar, decodificar y volver a codificar la señal? Basta con hacer un ataque de intermediario entre el control de la llave y el vehículo usando una antena grande para hacerles creer que están más cerca entre sí.
Hoy en día, con solo entrar al auto se puede programar una llave nueva con una herramienta OBD y llevárselo, así que esto es mucho más interesante y gravemente inseguro.
El Flipper básico también puede recibir señales en bruto.
Quizá se pueda hacer que entregue datos FSK u OOK demodulados en bruto sin procesamiento adicional, pero obtener muestras IQ en bruto sí me parece muy dudoso.