Detectando celdas falsas GSM/GPRS con Cell Analysis
Introducción
Respetando la idea de SRLabs he creado un proyecto nuevo: Cell Analysis, con un fin claro y sencillo: detectar celdas falsas (BTS falsas, IMSI Catcher o BTS Rogue, como queráis llamarlo). Para ello necesitaremos un teléfono osmocom y no vamos a utilizar ninguna tarjeta SIM, escanearemos todas las celdas independientemente de la operadora a la que pertenezcan.
La base de la detección es precisamente que una celda falsa nunca llevará el mismo tráfico de control que una celda real. ¿Qué es tráfico de control? En el standard GSM se han definido canales lógicos para transmitir y recibir la información según una jerarquía de canales:
NOTA IMPORTANTE: transmitir en el espectro de frecuencias asignado a GSM es un delito, esta prueba debe ser llevada a cabo con una jaula de faraday para aislar el alcance de nuestra transmisión.
- Cell Analysis también genera ficheros CSV para las celdas que no son falsas con medidas de potencia y número de abonados acampados en ella. Se pueden visualizar los resultados en Excel de manera muy sencilla:
- El proyecto Cell Analysis se encuentra recogido en la web fakebts.com donde seguiré actualizando siguientes versiones con mejoras pendientes de implementar:
Pequeño interfaz web para comprobar el estado de la monitorización y gestionar las alarmas
Durante este último año, investigando los ataques y vulnerabilidades en
la red GSM, me di de bruces con el ataque de la estación falsa BTS. Este
consiste en un ataque "Man In The Middle" tradicional, en el que el
atacante sitúa su propia antena entre nuestro terminal y la red. La base
para que este ataque sea factible son dos vulnerabilidades muy
sencillas:
- Nuestro terminal NO autentifica la red GSM a la que se conecta, la supone segura.
- El terminal se conecta siempre a la celda que mejor nivel de señal le proporcione.
Esto además se complica (o mejora para los posibles atacantes) al poder
crear una celda falsa utilizando únicamente un teléfono compatible con
osmocom y el software OpenBTS u Osmo-BTS. Ya
no es necesario ningún hardware caro ni raro de conseguir, ni soldar y
des-soldar las placas del USRP1, ni una BTS real: sólo un teléfono Osmocom.
¿Cómo protegernos de estos ataques?
El equipo de SRLabs (Karsten Nohl) ha creado la herramienta catchercatcher para
detectar posibles ataques, tal y como publicaron en el 28C3, basándose
por supuesto en OsmocomBB. Cuando lo he probado, hay algo que no me ha
gustado: para que el software detecte los ataques necesitamos ejecutar
el programa con una tarjeta SIM dentro del teléfono. ¿Qué pasa si me
quiero desplazar a otro sitio? ¿Dejo de detectar posibles ataques?
Lógicamente la necesidad de la tarjeta SIM tiene su explicación, ya que
con este programa también se detectan los famosos SMS invisibles (para
lo cual necesitamos estar registrados en la red GSM).
Respetando la idea de SRLabs he creado un proyecto nuevo: Cell Analysis, con un fin claro y sencillo: detectar celdas falsas (BTS falsas, IMSI Catcher o BTS Rogue, como queráis llamarlo). Para ello necesitaremos un teléfono osmocom y no vamos a utilizar ninguna tarjeta SIM, escanearemos todas las celdas independientemente de la operadora a la que pertenezcan.
La base de la detección es precisamente que una celda falsa nunca llevará el mismo tráfico de control que una celda real. ¿Qué es tráfico de control? En el standard GSM se han definido canales lógicos para transmitir y recibir la información según una jerarquía de canales:
Dentro del canal de control común ("CCCH") nos vamos a fijar en el canal de Paging ("PCH"),
que es el que la red GSM utiliza para alertar a los abonados que tienen
un servicio pendiente de entrega, donde el servicio será una llamada,
un mensaje corto, etc. ¿Y que tiene una celda falsa que decirles a sus
abonados? ... Nada o muy poco.
A continuación muestro dos capturas realizadas del tráfico del canal de control común en celdas de cada tipo: real y falsa:
Fijaros bien en el contenido de los mensajes "Paging Request", porque en el caso de la celda falsa el campo "Mobile Identity"
está siempre o casi siempre vacío, puesto que no hay usuarios reales a
los que anunciarles la entrega de servicios. El porcentaje de mensajes
sin un TMSI o un IMSI no puede apreciarse en la captura de pantalla,
pero si en la celda falsa no hay ningún teléfono conectado será del
100%. Sin embargo en una celda real el campo "Mobile Identity",
la mayor parte de la veces llevará un TMSI o IMSI en porcentajes
elevados. Dependiendo de la hora del día, de la celda, de la operadora y
más parámetros, variará el valor del porcentaje de mensajes de "Paging Request" con un abonado, pero nunca alcanzará el valor de la celda falsa.
Este análisis es el que va a realizar el programa para cada celda que
encuentre y lo hará continuamente cada 10 minutos, hasta que decidamos
parar la aplicación. Para cada una de las celdas que no son falsas,
generará un fichero CSV con la fecha y hora así como los valores de
abonados conectados y potencia con la que el teléfono osmocom recibe la
señal de esa celda. Con cada celda falsa que encuentre enviará a una
cuenta de correo configurada previamente un email de alarma. Por último,
aquellas medidas que hayan tenido demasiados errores ("Dropping Frames", "BURST IND", etc) serán ignoradas guardándose en un tercer fichero de medidas ignoradas.
Para descargar Cell Analysis, esta es la web donde además podéis encontrar las instrucciones para instalarlo y configurarlo correctamente.
Test de Cell Analysis
Para
probar la detección he elegido el escenario más simple, dos teléfono
osmocom; uno corriendo Cell Analysis (monitorizando el tráfico) y el
otro corriendo el SW de transmisión con OpenBTS (transmitiendo una celda
falsa).
NOTA IMPORTANTE: transmitir en el espectro de frecuencias asignado a GSM es un delito, esta prueba debe ser llevada a cabo con una jaula de faraday para aislar el alcance de nuestra transmisión.
Una vez
la celda falsa queda definida y configurada con valores reales (MCC 214,
MNC 22 y ARFCN 1), tal y como se haría en un ataque real, el segundo
teléfono osmocom empieza a transmitir:
El primer
teléfono empieza a ejecutar Cell Analysis. Observar en la segunda
ventana (al frente) el listado de las celdas que ha encontrado el
teléfono y fijaros en la tercera celda (es la falsa):
Cuando Cell Analysis realiza el siguiente paso, que es la monitorización
del trafico del canal de control común, sólo encuentra los mensajes "System Information" SI1 y SI3, pero no encuentra ningún abonado en la celda:
Por lo que se genera una alarma correspondiente en un fichero CSV y se envía por correo.
Conclusiones
- Como hemos visto, sí se pueden detectar sin problemas las celdas
falsas y avisar para, desde luego apagar cualquier teléfono que pueda
ser víctima del ataque ya que en nuestros terminales no podemos forzar o
elegir a qué celda se deben conectar, lo harán a la que mejor señal les
entregue.
- Cell Analysis también genera ficheros CSV para las celdas que no son falsas con medidas de potencia y número de abonados acampados en ella. Se pueden visualizar los resultados en Excel de manera muy sencilla:
- En toda monitorizacíón hay un parámetro que mide la eficacia: la
cantidad (o ausencia) de alarmas falsas generadas. Durante semanas he
tenido corriendo el programa y no ha detectado ninguna alarma falsa,
pero lógicamente es más que probable que esto pueda suceder. Por
ejemplo: si una celda real tiene una avería y momentáneamente los
abonados no pueden acampar en ella, sus "Paging Request" estarán vacíos.
Sobre FakeBTS.com
- El proyecto Cell Analysis se encuentra recogido en la web fakebts.com donde seguiré actualizando siguientes versiones con mejoras pendientes de implementar:
Pequeño interfaz web para comprobar el estado de la monitorización y gestionar las alarmas
- Recoger las medidas de las celdas con "rrdtool" para mostrar gráficas en el interfaz web en tiempo real
- Crear paquetes .deb para facilitar la instalación en Ubuntu
- Portar el proyecto a la plataforma ARM (Raspberry Pi)
- Seguir investigando distintas celdas falsas en busca de nuevos retos a detectar
Comentarios
Publicar un comentario
siempre es bueno, leer tus comentarios