Samy Kamkar, famoso por crear el gusano Sam que azotó a millones de usuarios de MySpace en 2005, ha publicado estos días uno de sus últimos proyectos, OpenSesame. El proyecto se basa en la modificación de un juguete de Mattel obsoleto (dejó de venderse hace varios años) que permite abrir de forma inalámbrica casi cualquier puerta de garaje que disponga de acceso mediante pin fijo.
El juguete en cuestión es el Radica Girltech IM-ME que gracias a su chip RF TI CC1110 sub-GHz y una reprogramación con un GoodFET permite realizar ataques de fuerza bruta con éxito. Además de crear el dispositivo, Samy ha ideado un ataque que reduce el tiempo de espera para obtener el código en un 95% dejándolo en apenas uno segundos.
El pin de una puerta de garaje utiliza un código de 8 a 12 bits. Cada vez que pulsas el mando, cada bit se envía 5 veces por las que tarda 2ms en ser enviado y 2ms de espera. Para calcular el tiempo que se tarda en «probar» una combinación de 12 bits únicamente hay que multiplicar 12 bits * 2ms de transmisión * 2ms de espera * 5 veces cada bit resultan 240ms. Ahora si la clave tiene un rango de 8 a 12 bits el número total de bits a probar son:
(((2 ** 12)*12) + ((2 ** 11)*11) + ((2 ** 10)*10) + ((2 ** 9)*9) + ((2 ** 8)*8)) = 88576 bits
Que en tiempo costaría: 88576 bits * 4ms * 5 retransmisiones = 1771.52 segundos = 29 minutos.
Ahora viene la optimización de Samy:
Primero, quitar el envío repetitivo de 5 veces que se utiliza para ayudar al receptor en caso de interferencia. Con esto se consigue reducir el tiempo entre 5.
1771.52s / 5 = 354.304 segundos= ~6 minutos
A continuación quita directamente los 2ms de tiempo de espera con lo cual consigue reducirlo a la mitad.
1771.52s / 5 / 2 = 177.152 segundos = ~3 minutos
Y por último Samy utiliza una sucesión de Bruijn para reducir el algoritmo un 62%.
Aquí un ejemplo de su página web:
Por otra parte el receptor utiliza un registro de desplazamiento de bits, esto quiere decir que lee secuencialmente la información que le llega. Por ejemplo, para los siguientes 4 códigos:
(Código # 1) 000 000 000 000
(Código # 2) 000 000 000 001
(Código # 3) 000 000 000 010
(Código # 4) 000 000 000 011
El receptor va a recibir lo siguiente:
000000000000000000000001000000000010000000000011
Si la clave es «111 111 000 000» y recibe una clave de 13bits como «011 111 100 000 0», primero devolverá que el pin «011 111 100 000» es incorrecto, pero a continuación seguirá desplazando bits a la izquierda y cuando lea «111 111 000 000» lo dará como válido. Esto significa que con una clave de 13bits se han probado dos claves de 12bits (la primera que devuelve incorrecto y la segunda que devuelve correcto), esto sin haber tenido que enviar un total de 24bits. Y lo podemos extrapolar al resto de tamaños de clave. Es decir, cuando probamos el código de 12 bits también se están probando a su vez cinco códigos de 8 bits, cuatro códigos de 9 bits, tres códigos de 10 bits, dos códigos de 11 bits y el propio código de 12 bits. Por lo tanto, con probar un código de 12 bits se prueba todos los códigos de 8 a 11 bits simultáneamente.
Con estas reducciones, en términos de tiempo, el algoritmo queda optimizado para todas las posibilidades de la siguiente forma:
((2 ** 12) + 11) * 4 ms / 2 = 8214ms = 8,214 segundos
Samy ha conseguido reducir los 29 minutos iniciales a poco más de 8 segundos con su algoritmo.
El código se puede encontrar en su repositorio de github https://github.com/samyk/opensesame. No obstante hay que advertir que no está al 100% operativo por motivos educativos. Con sólidos conocimientos de microcontroladores y radiofrecuencias se puede dejar operativo.
Los fabricantes vulnerables actuales son:
- Nortek / Linear / Multi-Code.
- NSCD/North Shore Commercial Door.
Los fabricantes que tienen antiguos productos vulnerables son:
- Chamberlain
- Liftmaster
- Stanley
- Delta-3
- Moore-O-Matic
Los nuevos sistemas utilizan sistemas con códigos de salto o»rolling codes», «Intellicode», «Secutiy+», etc. que evitan este tipo de ataques aunque son susceptibles de otros.
Desde que se ha publicado el proyecto los juguetes IM-ME han desaparecido de tiendas como Amazon o ebay y los pocos que quedan están a precios elevadísimos. Antes era fácil encontrarlo por 12$, en estos momentos se ven desde los 100$ en Amazon hasta 325$ en ebay, siempre y cuando todavía queden en stock. He llegado a ver tiendas creadas propiamente para este producto y no descartaría que alguno haya hecho acopio de existencias. El concepto se puede replicar en otro hardware pero entiendo que el estilo de una agenda electrónica y chat rosa con un nyancat pesa mucho.
Por último, Samy explica en este video el proyecto.
Fuentes:
- http://samy.pl/opensesame/
- http://www.hackplayers.com/2015/06/opensesame-hackeando-garajes-en-segundos.html