domingo, 27 de diciembre de 2009

Claves para atacar el cifrado de la voz en GSM

Si hay algo que ha sido relevante este año en el CCC, han sido los ataques a GSM, y entre ellos la gran noticia ha sido el anuncio de la rotura de su cifrado en la charla de Chris Paget (con tacones de plataforma rojos) y Karsten Nohl.

La charla tenía en realidad dos partes, cada una sobre una de las dos principales debilidades de la red GSM, que es incluso más grande que Internet en términos de tamaño y nodos conectados.

En la primera parte, acerca de los ataques que posibilita el hecho de que el teléfono no autentique a la red y por tanto, se pueda poner una estación base emulada que haga creer a cualquier teléfono que se está conectando a la red de verdad y capturar todo su tráfico. Estos ataques tienen el inconveniente de que al ser activos, si alguien los busca, encontrará al atacante, a pesar de que normalmente, nadie los busca.

En realidad, las herramientas mostradas (el "Universal Software Radio Peripheral", USRP, junto con un software denominado OpenBTS que emula la parte radio de la red) son todavía capaces de ataques bastante rudimentarios, limitados a la captura de los IMSI, un número identificador del teléfono, que no es visible al usuario y que puede ser utilizado para ataques de denegación de servicio (no es posible suplantarle sin tener acceso físico al SIM, y aún así para suplantar a un usuario se requiere poner el SIM en un microscopio electrónico y dejarlo prácticamente inutilizable).

Pero lo que sí muestra es la evidencia de que en ausencia de pruebas de seguridad, los teléfonos existentes hoy en día tienen una gran cantidad de defectos en el software, y una gran vulnerabilidad a ataques:

  • Por ejemplo, aunque lo normal es que los iPhones no se conecten al OpenBTS, en USA se encontraron uno que insistía en conectarse a ellos, a pesar de que emitían como una red de prueba que no existe, emitían en una banda que en USA no se usa y usando la mínima potencia posible.
  • Otros teléfonos en China, una vez se habían conectado a OpenBTS cambiaban el nombre de la red, y luego ya no lo cambiaban al correcto a pesar de rearrancarlos completamente.
  • Otra vez por error respondieron con el mensaje utilizado para desactivar los teléfonos robados en lugar de para rechazar a los teléfonos y que no se conectasen a la red, lo cual daba lugar a múltiples estados con diversos estados de irrecuperabildad según los teléfonos (p.e., el iPhone requería desconectar la batería... una operación que en Apple requiere una visita al servicio técnico o desmontarlo totalmente).
Por último, también ha puesto en evidencia que aunque el capturador de IMSIs es una herramienta muy grosera y fácilmente detectable, ningún teléfono dispone de ningún mecanismo para saber que está conectado a un equipo de acceso impostor, y todos ocultan al usuario si debido a un ataque el teléfono está haciendo la llamda sin usar cifrado y por tanto la privacidad está comprometida.

La segunda parte de la charla ha tratado el tema mucho más peliagudo de los ataques pasivos (escuchando únicamente), en el cual se ha explicado cómo es posible descifrar el código de cifrado AS5/1, el que es utilizado en GSM para proteger la privacidad de las llamadas.

La motivación de Karsten para desarrollar este ataque y hacerlo público, es que el cifrado de GSM ha aparecido roto en muchos artículos de seguridad, pero en ninguno se había llegado hasta las últimas consecuencias, haciendo públicas las herramientas para descifrar el algoritmo..

El protocolo de cifrado AS5/1, tiene una clave relativamente pequeña (64 bits, igual que el DES que ya casi nadie usa), lo que lo hace vulnerable a un ataque de precomputación, en el que se calculan todos los resultados de cifrar un determinado dato con cada una de las claves. Lo que hasta ahora impedía hacer este ataque es que el tamaño de la tabla precomputada es de 1 Petabyte (y por tanto difícil de ocultar) y precomputar la tabla llevaría 100.000 años de una CPU moderna. Lo que Karsten ha hecho es encontrar una manera de precomputar las claves más sencilla y de almacenar la tabla de modo más compacto mediante tablas de cadenas arco iris modificadas.

Para la parte de computarlo más rápido, han utilizado tarjetas gráficas, que son muy eficientes para procesos en paralelo, por el cual son capaces de calcular 400 claves a la vez, además han hecho que cada cálculo procese 4 bits de cada vez, con lo que después de todo, sólo han hecho falta 3 meses de computación en 40 ordenadores con tarjetas gráficas Nvidia para completar el resultado. Aunque usando FPGAs podrían hacerlo más rápido, la escasez de buenos programadores de FPGA les ha hecho renunciar a ello.

Para la parte de comprimir los resultados en tablas de arco iris, Karten ha entrado en más detalle técnico, en el que ha explicado que el mecanismo básico de una tabla de cadenas es tomar un punto de entrada, aplicarle el algoritmo con la clave varias veces hasta llegar a un punto que se almacena en la tabla. Cuando se tiene un dato de entrada, se le aplica el mismo algoritmo (en este caso el algoritmo que desde el estado interno produce el texto cifrado) hasta encontrar un punto que se encuentre en la tabla, una vez encontrada la cadena correcta, se parte desde el principio y el dato anterior al resultado escuchado es el estado interno necesario. Esto se ve mejor en este diagrama, procedente de su presentación.



Sobre este algoritmo básico, han aplicado dos mejoras:
  • Por un lado, para no tener que mirar en el disco duro cada vez (el equipo de descifrado tiene de 16 a 32 memorias flash USB para almacenar los datos con una latencia razonable) cada vez que se ejecuta el algoritmo si se ha llegado al final de la cadena, sólo se almacenan como finales de cadena valores específicos (p.e. con la segunda mitad a cero). De este modo, sólo cuando el resultado de una cadena es un valor específico se mira en disco duro.
  • La segunda mejora es el principio de las tablas "arco iris", que es utilizar un algoritmo levemente diferente (en vez de usar siempre K) en cada paso de la cadena, de modo que la posibilidad de que dos cadenas colisionen produciendo el mismo valor disminuye mucho.
En la solución empleada, ambos se combinan para tener un cambio de algoritmo cada vez que se encuentra cada uno de los 32 valores distinguidos coon los últimos 15 bits a cero. Con esto, ya tienen unas tablas que con 2 TB tienen un 99% de probabilidades de descifrar una llamada si se dispone de todas las claves y un 50% si sólo se consiguen las claves más obvias.

El proyecto está en la fase en la que irá progresando rápidamente, a medida que empiezan a probar van descubriendo más tramas que usar para atacar, y a disminuir el tamaño de las tablas.

La asociación GSM, ha publicado una nota de prensa señalando todo lo que les falta al equipo para poder ejecutar el ataque sobre una llamada que use "frequency hopping": hardware para sintonizar las frecuencias y un software para seguir las diferentes frecuencias. Ellos piensan hacerlo con USRP2 (que es capaz de capturar 25 MHz completos) y con openBTS, aunque todavía no lo tienen listo porque capturar 25 MHz genera demasiados datos y hay que filtrarlo.

Por último, la recomendación para mitigar este ataque, es deshabilitar la cifra A5/1 y pasar a la A5/3 (sólo un operador, SFR, ha hecho algo por ahora), que todavía es demasiado compleja para ser atacada (aunque en una , aunque esto no tapa todos los agujeros porque un ataque activo podría permitir capturar pasivamente una llamada realizada con A5/3, luego activar el capturador de IMSI para obligar al teléfono a negociar con A5/1 y esto permitiría recuperar la clave, ya que el teléfono reutiliza secretos entre llamadas consecutivas y averiguar la clave de la segunda llamda permite conocer la de la primera.

Y todavía hay dos charlas más sobre ataques a GSM...

No hay comentarios:

Publicar un comentario