MSGarageDoorRemote (Parte 1): Seguridad, diseño y funcionamiento.

enero 29, 2019 circuiteando 0 Comments

Diseño 3D de la PCB.

Un mando a distancia más seguro para la puerta del garaje. Dado que la seguridad del que tenía dejaba bastante de desear y se pudo abrir la puerta con un clon de Arduino y un transmisor a 433 Mhz (solamente 6 € en en hardware).
A lo largo de este artículo se mostrará la carencia de seguridad de estos mandos y como con este proyecto se trata de fabricar un mando mucho más seguro para sustituir al anterior.

Las especificaciones de este nuevo mando son las siguientes:
  • Funcionamiento a 868 Mhz en vez de los habituales 433 Mhz.
  • Modulación FSK en vez de OOK.
  • Encriptación segura por hardware con AES de 128 bits.
  • Hasta 128 claves de 32 bytes que van rotando.
  • Watchdog en la unidad del motor.
  • Potencia de transmisión programable. (Hasta 20 dBm. 5dBm por defecto).
  • Open source (se pude cambiar el protocolo o añadir funcionalidades si se quiere).
  • Se pude utilizar un mismo mando para abrir diferentes puertas.
Los firmwares y los archivos de las placas electrónicas están en el repositorio.

 

Seguridad

Este proyecto surge al empezar en el mundo de los SDR y sentir curiosidad por ver que datos se mandan para abrir la puerta del garaje. Dos en concreto, una de ellas con un sistema antiguo (más de 10 años) y la otra con uno más moderno (2 o 3 años).

Utilizando SDR para capturar los datos enviados por el mando.
Se utilizó un dongle SDR como el que se ve el la imagen superior (a la derecha) para capturar los datos y poder examinarlos posteriormente. Para ello se utilizó el programa libre Gqrx.

Mando a distancia antiguo.
Al pulsar el mando antiguo se observa lo siguiente en el programa de ordenador:

Transmitiendo.
El mando trasmite en 433 Mhz y utiliza un sistema de modulación OOK (On-Off Keying) dado que la señal es intermitente y como su nombre indica, este tipo de modulación se realiza mediante la aparición o no aparición de una onda portadora por parte del transmisor.

Inspectrum: señal capturada.
Una vez capturados los datos, se utiliza el analizador de ondas de radio Inspectrum para ver si se distingue algún patrón en los datos. Y como se ve en la imagen, ese patrón se repite continuamente, con lo que el mando se limita a enviar los mismos datos de forma continua mientras se mantiene apretado el botón.

Con Inspectrum se puede cambiar la forma en la que se ve la señal definiendo los límites de potencia que se quieren visualizar. De esta manera se puede ver más claramente cuando transmite o no el mando.

El mando transmitiendo.

Zoom en la trama de datos.
Haciendo zoom sobre uno de los pulsos o tramas de de datos vemos como existen dos símbolos diferentes, uno del doble de duración que el otro, por lo que se asume que uno tiene que representar el 0 y otro el 1 binario.

Datos binarios de la trama.
Si se asume el 1 para el pulso más largo y 0 para el más corto, los datos son los que se ven el la imagen superior. En concreto los 10 bits entre las dos barras blancas son muy interesantes.

Si observamos los interruptores que tiene el mando para poder programar la clave, vemos que son directamente el estado de cada interruptor, si está o no activado.

Los datos transmitidos son la propia clave.
Con lo que la seguridad en este mando es prácticamente nula, se limita a enviar su propia clave sin ningún tipo de cifrado.  Y la parte receptora situada en el motor de la puerta se limita a esperar a recibir los datos y compararlos con los internos para abrirla.

Posibles ataques 

Por lo que he podido ver por internet, se utilizan principalmente dos tipos de ataques para abrir la puerta sin tener el mando en este tipo de sistema.

  • Uno de ellos es el de fuerza bruta, en el cual se van probando diferentes combinaciones una tras otra hasta conseguir abrir la puerta. Esto puede tardar unos 5 minutos con el hardware actual. Aunque hay algunos algoritmos diseñados específicamente para esta tarea que pueden abrirla en tan solo 30 segundos.
  • El otro es capturar los datos transmitidos por el mando y después mandarlos con un transmisor. Un mismo aparato puede encargase de las dos tareas y hacerlo en unos segundos.

Este último método es el que utilicé para abrir mi propia puerta sin necesidad del mando. Para ello se capturaron los datos como se ha visto anteriormente, y una vez sabiendo el tipo de señal, los bits que manda y los tiempos entre bits y tramas, se programó un clon de Arduino Nano (5 €) para mandar un señal mediante a un transmisor de a 433 Mhz (1 €).

Una vez probada la falta absoluta de seguridad en este mando, se probó con el más actual, el cual tiene muchas funciones que ayudan en su programación, sistema de seguridad en caso de bloqueo de la puerta antes de llegar al final de su recorrido y otras características que son aparentes para el que usa o programa. Pero por desgracia, al capturar los datos se ve que usa la misma seguridad en la transmisión que el anterior de hace 10 años, solo que aumenta ligeramente el número de bits de la clave.

Para aumentar más mi preocupación, leo en el siguiente artículo como la famosa marca de coches eléctricos utiliza en coches de alta gama un sistema de cifrado muy obsoleto, y se ve como un atacante puede abrir y arrancar el coche en unos segundos.

Queda patente como la seguridad en los sistemas inalámbricos está muy abajo en la lista de prioridades de los fabricantes. Así es como decidí realizar este proyecto, con el fin de aumentar la seguridad de las puertas automatizadas que utilizo.


Diseño                                                              

Esquema electrónico.

A la hora de diseñar el mando quería utilizar la misma PCB para el control de apertura de la puerta, y también poder utilizar la placa para crear un sistema inalámbrico de sensores más adelante. De ahí el tamaño y la utilización de baterías AAA para mayor autonomía.

Se ha utilizado un módulo RFM69HW para la comunicación inalámbrica, dado es bastante popular y existen librerías para la plataforma Arduino. Este módulo utiliza modulación FSK, y encripta la información por hardware en AES de 128 bits. Teniendo también bastante potencia (+20 dBm - 100 mW), con los que se ha llegado a transmitir a 1km de distancia. En el caso del mando y unidad en el motor, se ha limitado al mínimo posible (5 dBm) ya que no es necesario ni deseable tanto alcance y así se ahorra batería de paso.

Se utiliza una memoria externa para almacenar las claves, ya que puede utilizar bastantes, un relé de estado sólido para accionar el motor y  varios conversores DC-DC e integrados según sea la PCB para el mando o para la unidad del motor, y dentro de está última, si se quiere alimentar con DC o con AC. Según estas diferentes opciones se utilizan en placa unos u otros componentes y se sueldan determinados puentes.

Para más detalle se puede descargar el esquema electrónico desde el repositorio.


Funcionamiento

El funcionamiento de este sistema para la apertura de una puerta de garaje es básicamente el siguiente:

  • El mando envía una petición de apertura a la unidad del motor.
  • La unidad del motor responde al mando con el número de la clave que se requiere para abrir la puerta.
  • El mando contesta transmitiendo la clave solicitada.
  • Si es la correcta, la unidad del motor usa el relé para indicarle a la electrónica que abra la puerta ( de igual forma que si se usa una llave o pulsador en el interior de la cochera para abrirla), y manda una señal al mando indicando que es correcta.
  • El mando recibe la señal de apertura/cierre correcta/o y pone el módulo inalámbrico y el microprocesador en modo sleep (ahorro de energía).

Decir que toda la comunicación está encriptada con un algoritmo seguro a día de hoy, y que la longitud de las claves es de 32 bytes. Además cada vez que se quiere abrir la puerta, la unidad de motor pide una clave distinta, evitando que un ataque de fuerza bruta tenga éxito o requiera muchísimo tiempo, no haciéndolo deseable.

El otro ataque mucho más eficaz es grabar la señal emitida por el mando y volver a transmitirla. De esta forma la longitud y/o complejidad de la clave, así como su encriptación no son importantes. Ya que emula al verdadero mando, por lo que para tratar de defenderse de estos ataques se utilizan multitud de claves.

En el caso de esta versión, la memoria externa es capaz de almacenar 128 claves diferentes. Por lo que el atacante aunque obtenga una trama válida para la apertura de la puerta no valdría hasta llegar a solicitar la misma que se capturó, pudiendo pasar días o meses hasta que esto ocurra.

Todo esto teniendo en cuenta que se ha logrado romper el cifrado y estudiar el protocolo para saber que trama de datos es la que pide a la unidad del motor abrir o cerrar la puerta, porque mientras tanto la unidad no acepta ninguna clave.

Para más seguridad, las claves almacenadas en la memoria externa están cifradas también. Por lo que, aunque se extraigan de la memoria, son inservibles. Y tanto la frase o contraseña "mágica" utilizada para descifrar las claves en la memoria externa como las utilizadas en la encriptación de la comunicación inalámbrica, se encuentran en la memoria del microcontrolador y esta memoria está protegida contra lectura, para hacer mucho más difícil la extracción de información.

No soy ningún experto en seguridad ni muchísimo menos, esta es mi primera incursión en esto de la seguridad inalámbrica, y seguramente se podrá romper este sistema, pero es mucho más seguro que el que utilizan muchos de los fabricantes para la apertura de puertas. Y por ello dejo el firmware en el repositorio para que sirva como punto de partida a otras personas.

De hecho, el que utilizo no es exactamente igual al publicado, tiene cambios en el protocolo de comunicaciones entre otras cosas, y eso aumenta la seguridad. El poder modificarlo y que no sea igual a nada que haya en el mercado, pudiendo incrementar el nivel según se quiera; registrando cada mando en la unidad del motor, poniendo horarios en los que la unidad no está a la escucha de transmisiones, actualizando el firmware según se conozcan nuevos métodos de ataque, hasta donde la paranoia nos lleve ;-).

Este proyecto continua en una segunda parte.

0 comentarios: