19 mayo 2014

Creando y detectando celdas falsas GSM y GPRS (última entrega)

Cuando hace unos meses publicaba el primer artículo sobre la detección de celdas falsas, me quedaba con las ganas de añadir una segunda parte sobre la experiencia práctica de las detecciones y los distintos escenarios que podemos encontrarnos en cuanto a software para crear las celdas y dispositivos para detectarlas y crearlas. Durante este tiempo, he seguido buscando cómo mejorar la detección de las celdas falsas en cuanto a la eficacia en la detección; ¿Porqué no siempre detectaba la celda falsa? ¿Que podía hacer para asegurar la detección con éxito?

Creando la celda falsa

Para crearla, necesitamos 2 elementos:
  • Dispositivo físico llamado transceiver, que será el encargado de transmitir y recibir la información sobre el aire. Para establecer la celda debe poder emitir y transmitir en las frecuencias que marcan los estándares de la tecnología con la que queremos crear la red (en el caso GSM, serán los 900 y 1800 MHz) y para poder sincronizarse bien con los teléfonos que se conecten a él, deberá tener un reloj (oscilador) con la suficiente precisión que también está definida en el estándar GSM 05.10 (recomiendo este enlace)
  • Software encargado de establecer la comunicación con el transceiver (normalmente mediante un socket) y crear la celda, así como toda la lógica necesaria para que los usuarios se conecten a la red y puedan utilizar los servicios; SMS, llamadas, conexión de datos, etc.
De los dispositivos físicos, sólo conocía el famoso teléfono con chipset Calypso (la familia Motorola C123) con el que había realizado las primeras pruebas y los famosos (y caros) USRP capaces de crear estas celdas y compatibles con los software más conocidos. En muchos libros y papers de referencia siempre nombran a los USRP, pero cuando veía el precio, mi móvil Motorola GSM me parecía más versátil y hackeable. Hasta que llegó la RootedCON y allí escuche la gran charla de José Picó y David Pérez sobre el ataque a 3G utilizando un dispositivo llamado UmTRX de fairwaves. Que buena pinta !! Salí de la Rooted convencido de que debía hacerme con otro dispositivo que no fuese "low cost", pero desde luego, por debajo de los 1500€.

En cuanto al software encargado de crear y gestionar la celda, sólo 3 soluciones: OpenBTS, OsmoBTS y YateBTS (en aquel momento sólo podía probar las dos primeras por la limitación de mi material "low cost"). A lo mejor os suenan estos dos nombres propios; David A. Burguess y Harald Welte (también conocido como LaForge y miembro del Chaos Computer Club). Pues bien, el primero de ellos es uno de los programadores originales de OpenBTS, junto con Harvind Samra, y a finales del año 2010 acaban fundando la compañía Range Networks para comercializar productos basados en este software. A principios de este año 2014, David A. Burguess deja esta compañía para formar Legba y colaborar con Null Team para darle a Yate (Yet Another Telephony Engine) un nuevo "hermano" en las redes móviles: YateBTS.

En cuanto al segundo nombre, LaForge, a día de hoy es raro no haberle visto en alguna conferencia sobre OsmocomBB, OpenMoko, OsmocomTETRA, Fuzzing your GSM phone con OpenBSC, etc. La herramienta OpenBSC es el paraguas que alberga a una seria de herramientas para crear la red de telecomunicaciones GSM y GPRS que diseñemos. Entre ellas; OsmoBTS, OsmoTRX, OsmoSGSN. También él colabora con otros autores en la herramienta OpenGGSN, que por supuesto cierra el lazo de OsmoSGSN para crear una red de datos GPRS.


Dejando a un lado el "who-is-who" de las herramientas OpenSource, volvamos a la detección de celdas. Después de leer todos los HowTo, manuales y tutoriales de las herramientas que hemos visto, me quedaba claro que no podía montar nadie una celda falsa en condiciones para atacar a una víctima con material "low cost". Debía tener un transceiver capaz de emitir mejor que una celda original en corta distancia. Tenía que buscar el dispositivo que cumpliese la regla de oro: siendo el más barato, me permitiese crear celdas con todas las herramientas y a la vez me permitiese también detectarlas sin los problemas que veremos más tarde sobre los dispositivos de detección RTL y móviles compatibles con OsmocomBB. Entonces encontré el análisis de Taylor Killian sobre SDR, comparando tres conocidas tarjetas; BladeRF, HackRF y varios modelos USRP. A continuación pego un fragmento de su tabla comparativa:

x40
x115
B100 Starter
B200
B210
Radio Spectrum
30 MHz – 6 GHz
300 MHz – 3.8 GHz
50 MHz –
2.2 GHz
50MHz –
6 GHz
Bandwidth
20 MHz
28 MHz
16 MHz
61.44 MHz
Duplex
Half
Full
Full
Full
2x2 MIMO
Sample Size (ADC/DAC)
8 bit
12 bit
12 bit /
14 bit
12 bit
Sample Rate (ADC/DAC)
20 Msps
40 Msps
64 Msps /
128 Msps
61.44 Msps
Interface (Speed)
USB 2 HS
(480 megabit)
USB 3 (5 gigabit)
USB 2 HS
(480 megabit)
USB 3
(5 gigabit)
FPGA Logic Elements

Microcontroller

De estas tarjetas, sólo las USRP y bladeRF tienen soporte de OpenBTS y sólo las USRP aparecen como soportadas en las páginas web de OsmoBTS y YateBTS (en el momento de publicar este artículo). Aunque no está en el alcance de la comparación de Taylor Killian, comentar que la tarjeta UmTRX sí tiene soporte de estas tres aplicaciones (tiene muy buena pinta, pero el precio la dejo fuera de mis posibilidades).

Así que, unas semanas de espera más tarde, mi experiencia creando las celdas se amplió a dos dispositivos transceivers;

- móviles con chipset Calypso compatibles con OsmocomBB (lo de siempre)
- USRP de Ettus, modelo B200

En cuanto a los pasos intermedios para adaptar los transceiver a cada uno de los programas, los he resumido en la siguiente tabla:


Con el nuevo USRP, pude por fin tracear las 3 celdas distintas y comparar las trazas. Las versiones gratuitas de OpenBTS y de YateBTS no permiten crear celdas con más de un único ARFCN (canal), lo cuál utilicé para mejorar la detección, sin abandonar el principio del análisis. Podéis descargar trazas de ejemplo de los siguientes enlaces: OpenBTS, OsmoBTS y YateBTS.

Detectando la celda falsa


A la hora de detectar las celdas, creo que podemos agrupar los tipos de dispositivos en 3 grupos:


  • Móviles con chipset Calypso compatibles con OsmocomBB (Motorola C123, OpenMoko, SonyEricssonJ100i, etc.)
  • Dispositivos basados en el chipset Realtek RTL2832U (conocidos como RTL-SDR)
  • Dispositivos SDR (OsmoSDR, hackRF, bladeRF, USRP, UmTRX, etc.)

A la hora de utilizar los móviles con OsmocomBB, la velocidad de reacción del terminal y la precisión son muy buenas, siendo una herramienta barata con gran eficacia en la detección. Eso sí, hay un "pero": la estabilidad. No he probado ni mucho menos toda la lista de terminales compatibles con OsmocomBB (de hecho sólo he probado un terminal, el Motorola C118), pero nunca he conseguido que la aplicación que se ejecuta en el terminal aguante sin colgarse más de 24 horas seguidas, lo cuál deja a estos terminales como herramientas casuales excelentes, pero no permiten un uso exhaustivo continuado y el abanico de frecuencias de recepción es cerrado, puesto que no podemos modificar el terminal para abarcar más en el espectro de frecuencias de manera sencilla.

Huyendo de los móviles OsmocomBB fue cuando me encontré con los dongle USB RTL-SDR, de nuevo bajo la categoría "low cost", pero esta vez ganaba estabilidad ya que no hay que cargar ningún firmware en el dispositivo ni tienes que estar pendiente de la batería. ¿A qué precio? Lamentablemente el precio que pagamos es una perdida de precisión y de velocidad de reacción. Mi experiencia con ellos es un error de compensación (offset) de unos 25 kHz, que desgraciadamente no suele mantenerse constante en el tiempo, sino que dependiendo del uso que se haga del dispositivo puede oscilar de 2 a 5 kHz. Por esto, no me quedó más remedio que a utilizar el programa kalibrate-rtl en las versiones de Cell Analysis compatibles con ellos para compensar el offset y poder calcular la nueva frecuencia a escanear para cada celda. Sin querer extenderme mucho más, creo que la parte positiva de estos dongles USB de unos  40€ es la cantidad de aplicaciones que podemos obtener de ellos; desde montar un radar de aviones ADS-B hasta recibir los partes meteorológicos de los satélites NOAA (y mucho más  http://www.rtl-sdr.com/). Para todos aquellos usuarios de estos dispositivos, recomiendo la lectura del libro "Radio On A Tight Budget: RTL-SDR For Everyone", de Akos Czermann, quien también es el autor del blog Software Defined Radio for Mariners dónde analiza y recoge consejos que mejoran notablemente la recepción y estabilidad de estos dispositivos.

Por último, los dispositivos SDR (ver la primera tabla para más referencias). La única desventaja es el precio ya que no hay ninguno "low cost" (quizás OsmoSDR, pero a día de hoy sigue anunciándose en la web de sysmocom como developer preview edition, advirtiendo que no tiene soporte y que es una versión sólo para desarrolladores interesados en contribuir al firmware/desarrollo). Para aquellos dispositivos que utilizan el driver UHD (USRP y UmTRX), también hay una versión de kalibrate (kalibrate-uhd) para medir la compensación (offset). Esta vez, prácticamente no es necesaria la compensación, ya que en la mayoría de los casos el offset es de 2 KHz y podemos considerarla en muchos casos (dependiendo de la aplicación) despreciable.

Ejercicio Práctico


Después del análisis sobre los tipos de dispositivos, vamos a ver cómo se ponen en práctica y afectan a la señal estos conceptos a la hora de la verdad. No quiero hacer un estudio minucioso sobre potencias, dB, transmisores y formulas matemáticas sobre el alcance teórico de una celda para cada dispositivo, si no medir el resultado final y poder comparar de manera sencilla la peligrosidad de la celda falsa y la eficacia de la detección. Es sabido por todos que la emisión en el espectro de frecuencias de la telefonía móvil está regulado por la Ley General de las Telecomunicaciones, por lo que no se puede emitir ninguna señal en este espectro a no ser que se realice de manera controlada, como puede ser dentro de una caja de Faraday para asegurarnos de no radiar con nuestra señal fuera del recinto de control o teniendo una licencia para emitir. ¿Cómo hacer entonces una prueba de detección de celdas falsas y de penetración en edificios de la señal? La respuesta es bajo tierra, en un túnel a cierta profundidad, dónde la señal está totalmente acotada y confinada en un recinto.



  • Primero creo la celda falsa utilizando el teléfono Motorola C118 como transceiver de OsmoBTS y utilizo un teléfono LG G2 (con mi tarjeta SIM personal) para conectarme a la celda falsa. Para hacer las medidas utilizo el programa, Network Signal Info, un software que recoge parámetros de las conexión móvil cómo la calidad de la señal, el tipo de red al que se conecta e información útil sobre la celda (CellID, LAC, MNC y MCC). Nada más conectarme a la celda, a una distancia de menos de 2 metros, voy a ver qué nivel de señal llega al terminal: -51 dBm, como podemos ver en la imagen:


NOTA: los parámetros como el IMEI han sido borrados de la captura y los valores de MNC, MCC, CellID y LAC han sido configurados manualmente en la celda falsa, en ningún caso son valores de la red móvil real, aunque puedan parecerse.

En cuanto desciendo tres niveles hacia abajo bajando unas escaleras y atravesando puertas, la señal desciende a -103 dBm y termina por perderse del todo (sin conexión). En la imagen puede apreciarse la gráfica de la evolución escalonada de la pérdida de señal, así como el nivel antes de desconectarse de 17%:


Vale, cojo aire y subo a la superficie, fuera del alcance de la celda falsa para que el terminal se conecte a la red móvil real y comparar el nivel de señal que recibe un terminal en condiciones normales. Se puede apreciar en la gráfica el aislamiento de señal durante el intervalo que tardo en abandonar las instalaciones. Al salir, el terminal recupera la señal y puedo ver que recibo -81dBm:



Tras este primer resultado quiero hacer una última prueba; analizar el éxito de la detección de celdas falsas con Cell Analysis según el dispositivo que cree la celda falsa. Para ello cuento con otro portátil y el dispositivo USB RTL-SDR "Terratec T Stick PLUS". Esta vez no voy a seguir bajando y subiendo escaleras midiendo la señal, si no que registraré cuando la detección de la celda falsa se realiza con éxito para un número determinado de pruebas, que finalmente decido que serán 6 para cada dispositivo.

Es decir, primero voy a crear la celda falsa con el teléfono OsmocomBB como transceiver y ejecutaré el programa Cell Analysis utilizando el dongle USB como dispositivo de captura y esto lo voy a repetir 6 veces. Sitúo los dos portátiles uno al lado del otro para descartar la distancia entre ellos.

Después repetiré la misma prueba el mismo número de veces pero esta vez voy a crear la celda falsa con la tarjeta USRP B200, que emitirá y recibirá la señal a través de dos antenas muy sencillas GSM/GPRS.


A modo de ejemplo dejo la salida por terminal de una ejecución así como el error de offset del dispositivo de detección:


root@GSM:/opt/osmocom-bb# ./cell_analysis_rtl.sh 
Leyendo celdas cercanas ...
Procesando canal: 12
Celda con 1 solo canal!!, Alarma en LAC: 0001, CellID: 0000, arfcn: 12
Terminado
root@GSM:/opt/osmocom-bb# kal -c 12

Found 1 device(s):
  0:  Terratec T Stick PLUS

Using device 0: Terratec T Stick PLUS
Found Elonics E4000 tuner
Exact sample rate is: 270833.002142 Hz
kal: Calculating clock frequency offset.
Using GSM-900 channel 12 (937.4MHz)
average        [min, max]    (range, stddev)
- 27.633kHz        [-27664, -27594]    (70, 18.376423)
overruns: 0
not found: 0
average absolute error: 29.478 ppm


root@GSM:/opt/osmocom-bb#


En esta tabla podemos ver el resumen de todos los resultados obtenidos en las 12 pruebas:


Conclusiones

  • La celda falsa, bien sea creada con un terminal compatible con OsmocomBB o con un transceiver profesional sin ningún tipo de amplificador de señal o LNA y con antenas realmente básicas, tiene un poder de penetración importante, llegando la señal a atravesar varias paredes manteniendo el poder de suplantar la red móvil real. 
  • Para la detección de las celdas falsas estudiadas, los dispositivos OsmocomBB y RTL-SDR no aseguran un porcentaje de éxito eficaz. Cada uno por distintos motivos requieren un especial seguimiento y cuidado si queremos mantener un porcentaje alto, pero nunca llegará a ser del 100% en periodos largos de tiempo.
  • La detección con el USRP B200 resulta implacable, puesto que no se ve afectada a variaciones de precisión ni presenta mermas de estabilidad, pero tiene un precio elevado.
  • Aunque no ha sido objeto de este texto, para un hipotético ataque a un víctima concreta utilizando una celda falsa, se requiere no sólo un dispositivo SDR para asegurar la estabilidad de la ceda, también serian necesarios elementos como un oscilador externo (para asegurar que cualquier terminal móvil es capaz de ver y conectarse a la celda falsa) en el caso del USRP B200 y B210, LNAs y antenas de alta ganancia.
  • Por último, no he podido estudiar los famosos dispositivos IMSI Catcher (o rastreadores de IMSIs), ya que son realmente caros e imposibles de localizar.


Si por cualquier motivo algún lector quiere donar capturas o trazas que haya podido capturar de la emisión de estos dispositivos, o permite su acceso para realizar pruebas como las aquí expuestas de captura de la emisión y contribuir así a este estudio, estaré muy agradecido de poder ampliar el abanico de dispositivos estudiados lo cual mejorará sin duda la eficacia de la detección de celdas falsas.

Artículo cortesía de Pedro Cabrera

3 comments :

Miguel dijo...

Gracias por el artículo.
Pregunta, donde sale el parámetro de calidad en el Network Signal Info ?

Pedro Cabrera dijo...

Hola Miguel,
La calidad de la señal la puedes ver en modo gráfico (las barras) o en modo análitico viendo el valor del campo "Fuerza de Red", ahí debes fijarte en los dB o en las unidades "ASU". También tienes el valor arriba de todo del "Porcentaje", el cual expresa el nivel de calidad de la señal recibida. La explicación de los valores la pego directamente de la web del desarrollador:

"2G/3G has under Android a range from 0 to 31 ASU or in RSSI (Received Signal Strength Indikator) dBm from -51 dBm to -113 dBm. The value 99 is equal to unknown or not supported. You can convert the ASU value to RSSI with the following formal: RSSI [dBm] = (2x ASU) – 113
The app used a percent range from 0 to 28 (0 ASU = 0%, 28 ASU = 100%) . I stopped with 28 because it is not important if you have 28 or 31 ASU, but it looks a little bit better when you have e.g. 15 ASU, the bars in statusbar shows shows full reception, and you have “only” under 50% signal reception."

Miguel(EA5) dijo...

El problema que comentas de deriva en frecuencia del RTL-SDR se puede compensar sustituyendo el oscilador local (cristal 28.8Mhz) por uno del tipo TCXO. Hay bastante información sobre el tema en sitios específicos de SDR y también existen algunos vendedores que ocasionalmente ofrecen los dongles ya modificados.