sábado, 27 de diciembre de 2014

Hackeando comunicaciones por satélite

En esta charla, Sylvain Munaut nos describe cómo atacaron el sistema de telefonía por satélite Thuraya, basado en el sisetma GMR-1 que se utiliza para comunicaciones por satélite, de voz y datos.
Hay dos estándares de GeoMobile Radio, GMR-1 y GMR-2, que compiten entre sí, habiendo sido ambos estandarizados por ETSI. En esta charla se describe el GMR-1, con amplia cobertura en Europa y medio oriente, aunque sólo está muy usado en Oriente Medio, principalmente porque es el que tiene los temrinales más baratos en eBay.

Introducción al sistema GMR-1

El sistema GMR-1 es muy parecido a GSM pero tiene todos los nombres de los elementos cambiados.
Como principal diferencia, al tener muy poca cobertura en interiores, tiene un canal de señalización llamado HPAC (high penetration Alerting Channel), que permite señalizar una llamada. Esto indica al usuario que hay que salir al aire libre para tener cobertura (ya que la llamada no se puede contestar en interiores).
Las dos principales diferencias es que el sistema utiliza un codec de audio denominado AMBE y un cifrado llamado A5-GMR1.
Tiene la misma red de núcleo que una red GSM normal, lo que permite reutilizar un SIM para usarlo en GSM.

Trabajo anterior:

Han conseguido antenas en el mercado de segunda mano.
Procesamiento SDR para recibir la señal.
Pero hasta ahora no se podía hacer nada en cuanto comenzaba la transmisión cifrada.

AMBE: es el codec de voz pero que en el estándar no se describe más que a muy lato nivel. Implementado por una compañía llamada DVSI. Aunque DVSI vende un USB codec que decodifica otros codec AMBE (hay toda una familia de codec), no sirve para los satélites.
Sin embargo, existe una biblioteca llamada mbelib que decodifica otros codecs AMB. Y por supuesto, está en el hardware chipset de los teléfonos.
AMBE es un vocoder que identifica la voz e intentar reconstruir algo que se parece al original. Por cada segmento de 20 ms, se descompone la voz en cuatro parámetros:
  1. La frecuencia fundamental
  2. El volumen
  3. voz o no voz de cada trozo espectral (un tono o ruido en toda la banda).
  4. Magnitudes espectrales de la señal.
Para decodificar, lo que se hace es desempaquetar la señal en parámetros, descuantificar la señal y sintetizarla.

Ingeniería inversa del teléfono SO-2510

Aunque el codec podría estar en varias partes del teléfono, se indicaba que fuera del DSP de TI C55x no podía estar.
Pero tras un correo con Dieter Spaar le ayudó a encontrar los puntos de entrada para la decodificación y codificación, a base de buscar los puntos desde donde se accedía a la memoria DMA y donde se ponía una separación completa del resto del código.
Aun así, es un tercio de los 250k de código del DSP, y es difícil de entenderlo. Pero usando un simulador de TI (de Windows), fue posible para Sylvain en unos pocos días de trabajo y de intentos, usarlo para decodificar capturas de audio de teléfonos reales, pero de manera muy laboriosa y más lento que en tiempo real.
El siguiente paso es hacerlo funcionar en un DSP real, Dieter volvió a ayudar porque es necesario encontrar un dispositivo de modo que se pueda ejecutar en la dirección para la que fue compilada. Con eso ya se podía ejecutar a 16x veces, pero siendo SDRAM más lenta que la SRAM tuvo reubicar algunas tablas críticas a SRAM.
Finalmente debido a pedir una tarjeta DSP equivocada, Sylvain acabó escribiendo un reubicador de código, que resultó ser más sencillo de lo pensado, gracias a disponer de la versión del simulador para comparar.
Pero eso no fue suficiente, y el siguiente paso fue intentar generar un código para decodificar, el desempaquetado fue fácil, la descuantificación fue la parte más complicada y para la síntesis se comenzó con mbelib pero acabó implementando el estándar P25 que era parecido e intuyendo cuáles eran las diferencias.
No es perfecto, porque DVSI ha añadido mucho código que optimiza la calidad de la voz, pero eso se deja para otros que quieran mejorar la voz que ya es inteligible.

Decodificar el cifrado A5-GMR-1

El siguiente paso fue decodificar el cifrado, que lo hizo un equipo de la universidad de Bochum, y que es relativamente parecido al estándar A5/2, pero cambiando todos los parámetros numéricos.
El ataque RUB es capaz de tener éxito simplemente capturando una llamada cifrada, sin más contexto, ataca directamente a la trama TCH3 de voz. El primer ataque se deriva de un ataque anterior a A5/2, que era capaz de descifrar 32 paquetes en 40 minutos con 350 GB de tabla de datos precalculados.
Como 40 minutos era mucho tiempo, se plantearon atacar las tramas FACCH3, que son tramas de control con un texto más predecible al ser tramas de control.
Para atacar el codec, la idea es transformar el problema en una ecuación lineal entre la entrada conocida y la salida observada, a base de linealizar la ecuación (que consiste en introducir incógnitas para cada término cuadrático y probar los 65k posibles valores del reloj de cifrado.
El problema consiste en comprobar cada una de las 65k matrices sobre los datos disponibles.
Los resultados: si se conoce el paquete en claro, se puede hacer en 500ms con 50Mb de datos, mientras que partiendo sólo del código cifrado se tarda 1s en resolver con 500MB de datos.

Próximos pasos

Pendiente.

No hay comentarios:

Publicar un comentario en la entrada