Suplantación de identidad sobre el aire en redes GSM

Corría el año 2000 y el Canal Satélite Digital y VíA Digital estaban en pleno auge, igual que las tarjetas smartcard con un microcontralador PIC 16F8xx como las SilverCard y GoldWafer para "hackear" estos servicios. Todos teníamos un programador TE20 para poder escribir los datos en los microcontraladores y el TE21 o Phoenix para leer las tarjetas originales smartcard ISO 7816.
Entonces apareció él, se llamaba SIM EMU y era un programa que podíamos cargar en el PIC 16F84 para emular una tarjeta SIM. Para que la tarjeta fuese funcional 100% era necesario leer dos parámetros de la tarjeta SIM original; el IMSI y el número secreto Ki de 128 bit (wikipedia.org, apartado "Authentication key Ki"). Esto se podía hacer con el lector TE21 utilizando cualquiera de los programas disponibles: cardinal68, sim scan, etc (creo que todos ellos ya no están soportados por sus desarrolladores, pero se pueden encontrar gracias a Don Google). 
Fue cuando aprendimos el proceso "RUN GSM ALGORITHM" (el proceso encargado de generar la respuesta SRES (algoritmo A3) y la clave de cifrado Kc (algoritmo A8) al recibir un número aleatorio RAND de la red GSM, ver documento Specification of the Subscriber Identity Module - Mobile Equipment SIM - ME interface GSM 11.11) y que había dos tipos de tarjetas SIM; las que tenían implementada la versión 1 del algoritmo, llamado COMP128v1 y las nuevas con la versión 2; COMP128v2. Sólo podemos someter al ataque de fuerza bruta a aquellas tarjetas que tengan implementado el algoritmo COMP128v1, puesto que es el único que se consiguió romper.
Entonces se necesitaba acceso físico a la tarjeta SIM para poder suplantar la identidad de un usuario de la red GSM.

¿Qué ha pasado desde entonces hasta ahora?

Gracias a las nuevas herramientas para monitorizar el tráfico GSM (OsmocomBB, SDR, USRP...), podemos ver en nuestro wireshark cómo la red GSM y el terminal realizan el proceso de autenticación pero no desde el punto de vista de la tarjeta SIM, sino la señalización entre el equipo (ME) y la red GSM. Teóricamente cada vez que encendemos el teléfono y en determinadas circunstancias, como por ejemplo: hand-over entre celdas (nos desplazamos en coche y cambiamos de antena GSM), al activar servicios de la red GSM (realizar o recibir llamadas o mensajes) la red GSM nos debe solicitar autenticarnos en la red, enviando a nuestra SIM la petición "RUN GSM ALGORITHM".
¿Porqué no hacer un par de pruebas con cada operador para analizar el comportamiento de la red? ¿Cada cuánto tiempo solicita la red a mi móvil/SIM que se autentique? …¡¡ Manos a la obra !!
La herramienta seleccionada fue OsmocomBB corriendo en un portátil con Ubuntu (Layer 2 y 3) y en un Motorola C118 (Layer 1), de tal modo que puedo ver las trazas en el wireshark mientras me muevo y realizo llamadas. Cuando todo está listo, una vuelta por la M40 haciendo llamadas y enviando SMS.

osmocom lanza el firmware Layer1 en el móvil
motorola C118 corriendo firmware Layer1

aplicación "mobile", capa 2y3, solicita el PIN

wireshark recibiendo la señalización de nuestro móvil
Al analizar las trazas, la gran sorpresa es que no todas las redes (operadoras) tienen el mismo nivel de seguridad/rigurosidad con la autenticación. No voy a dar nombres, pero encuentro que en una red GSM, tras encender el móvil y realizar 3 llamadas, en ningún momento la red me ha solicitado autenticarme. Este caso más sangrante me lleva a seguir con una nueva prueba, un ataque de suplantación de identidad sobre el aire. Los TMSI circulan tranquilamente (sin cifrar) por el aire en mi celda … ¿Qué pasaría si programo una tarjeta SIM sólo con un TMSI y clave Kc de cifrado válidos?
Si un hipotético atacante quisiera conocer cuales son el TMSI , el Kc y la localización (celda) de una víctima a partir de su número de teléfono, es perfectamente posible y ya ha sido tratado en varias sesiones del Chaos Computer Club (27C3, 28C3 y 30C3).


 En esta prueba no voy a utilizar un IMSI válido, lo que vamos a hacer es inventarnos un IMSI que la red reconozca como suyo (ojo al MNC) y que el resto de dígitos serán aleatorios, ídem para la clave Ki; aleatoria. Para llevar a cabo todo este proceso he utilizado un lector/programador de smartcards SCM SCR3310 con una tarjeta SIM programable sysmoSIM y el software cyberflex.

 



Debemos tener en cuenta todos los ficheros (EF) que residen en la SIM dentro del directorio (DF) GSM 7F20, y en particular el LOCI "6F 7E", es aquí donde vamos a poner nuestro TMSI objetivo, puesto que el fichero LOCI contiene concatenados el TMSI seguido del "Location Area Information", nuestra última posición conocida por la SIM. El LAI a su vez se compone de: MCC + MNC + LAC (Location Area Code). Para España el MCC es 214 y el MNC depende de la red (ver en Don Google). Os dejo algunos comando útiles para movernos por la SIM (para ver el listado completo ver la referencia anterior GSM 11.11):
STATUS: a0f2000002 (debemos comenzar la sesión siempre con status)
a0a40000023f00    (selecciona el MF)
a0a40000022fe2    (selecciona el EF ICC ID)
a0b000000a        (muestra el contenido)
a0a40000027f20    (selecciona el DF GSM)
a0a40000026f07    (selecciona el EF IMSI)
a0b0000009        (muestra el contenido)
a0a40000026f7e    (selecciona el EF LOCI)
a0b000000b
a0a40000026f20    (selecciona el EF Kc)
a0b0000009
a0a40000026f30    (selecciona el EF PLMN sel)
a0b0000096
El resultado: tras grabar los resultados a la tarjeta SIM programable, un primer intento falla: recibo LOCATION UPDATE REJECT. Vuelto a intentar y … Sorpresa !! Veo el nombre del operador en la pantalla del teléfono, me doy a prisa en llamar a mi amigo Ramón y … funciona, llamada con éxito, me he suplantado a mi mismo.

Conclusión

El resultado de esta prueba/ataque depende de muchos factores a tener en cuenta;
- Celda y Location Area: cada celda y cada LA tienen parámetros distintos, que funcione en una "zona" no quiere decir que vaya a funcionar en toda España (y viceversa)
- Configuración de la red: el tiempo de "refresco" de nuestra clave de cifrado Kc y del TMSI depende de cada red, es posible que durante nuestros ensayos la red solicite a la tarjeta SIM que se autentifique, pero al no tener un Ki válido, lógicamente será automáticamente rechazada la SIM y la clave Kc puesta a "FFFFF…."
- Para evitar estos ataques, no podemos hacer nada. Son el resultado de faltas graves de seguridad en la red GSM. Si un atacante no pudiese conocer mi TMSI u obtener la clave Kc a partir de una captura, la suplantación nunca podría funcionar. Si aún así, dichas claves se refrescasen en cada petición de servicio a la red GSM, la suplantación sería mucho más costosa, prácticamente imposible.
La conclusión más evidente es la falta de seguridad, a día de hoy, en las redes GSM. Si quereis ver cómo son de seguras las redes GSM, visitad la web GSMmap.