domingo, 10 de mayo de 2020

GPS Spoofing con HackRF desde entornos Windows

Hola a todos!! Supongo que no podía dejar de escribir una entrada en este confinamiento por culpa del maldito Covid-19, y llevaba tiempo queriendo compartir con vosotros uno de esos "cacharreos" relacionado con el mundo de la radio y las señales que tanto me apasionan: el GPS.

El GPS algo que todo el mundo usamos en mayor o menor medida casi a diario, en parte potenciado por su uso en smartphones, smartwatches, sistemas de navegación de los automóviles, etc... pero que, yo personalmente, tardé bastante en aprender como funciona.


Funcionamiento del GPS

GPS son las siglas de Global Positioning System y lleva ya varios años entre nosotros, se trata de un sistema de radio-navegación basado en satélites desarrollado por el Departamento de Defensa de Estados Unidos después de la II Guerra Mundial y su finalidad es determinar en toda la Tierra la posición de cualquier objeto (una persona, un vehículo, etc...) con una diferentes niveles de precisión/error dependiendo de las versiones y tipo de sistemas utilizados.

Funciona mediante una red de al menos 24 satélites orbitando alrededor de la tierra con altitudes aproximadas a los 20.000Kms y con unas órbitas distribuidas en 6 planos orbitales distintos y con unas inclinaciones del régimen de 55º respecto al plano ecuatorial terrestre.

La finalidad de esta configuración es la de que en cualquier punto de la superficie de la tierra (y cualquier altitud) siempre existan como mínimo 4 satélites visibles por encima del horizonte (OTH - Over The Horizon).



El funcionamiento de los sistemas GPS y su infraestructura se basa en varios componentes o segmentos: el primero es el "segmento espacial" que acabamos de ver en los párrafos anteriores, y a la vez en otros dos segmentos más que son el de control y el de usuario.

El componentes de control de basa en 5 estaciones de rastreo terrestres distribuidas por todo el globo y conectadas a una estación de control central denominada MCS (Master Control Station). La misión de este componente es la de rastrear los satélites calibrando y sincronizando sus relojes, así como actualizando sus posiciones orbitales.

El componente de usuario es el último eslabón de la cadena y es, básicamente, el dispositivo GPS que usamos para ubicarnos en el globo, ya sea un reloj, un móvil, un handheld GPS, navegador para el coche, posicionamiento de barcos y aviones, etc...


¿En que consiste el "GPS Spoofing" de manera objetiva? Básicamente en emitir vía radio aquellas coordenadas GPS "falsas" que nosotros deseemos (sean cualesquiera que sean) para suplantar las señales reales. Para lograrlo dependeremos lógicamente de la potencia de emisión y/o la cercanía al receptor comprendido en el segmento de usuario indicado anteriormente para hacer que los mismos tomen nuestras señal modificada obviando la genuina y, por tanto ubique en la posición y/o trayecto/itinerario que nosotros deseemos.


MUY IMPORTANTE!!! Antes de seguir leyendo...

Llegados a este punto y antes de continuar, me vais a permitir poneros un disclaimer MUY IMPORTANTE y que debemos de tener claro en todo momento: la emisión de cualquier tipo de señal de radio en cualquier escenario o circunstancia donde no se tenga una autorización legal previa y explicita para hacerlo, esta totalmente prohibido y es constitutivo de delito y penado por la ley.

El objetivo de este articulo así como las técnicas en él mostradas tienen como única finalidad la divulgación tecnológica y para ello, como se verá más adelante en el articulo, en todo momento se han adoptado las soluciones, medios y medidas necesarias para no realizar emisión pública alguna al dominio público radioeléctrico (o espacio radioeléctrico).

El Sistema de Posicionamiento Global (GPS) se está utilizando cada vez más para una gran variedad de aplicaciones y servicios críticos. Entre ellos figuran la navegación marítima y aérea, la sincronizacion horaria para las industrias de servicios públicos, telecomunicaciones, banca e informática pero también muchos servicios de seguridad pública como policía, bomberos, y aún en mayor medida servicios de emergencia, rescate, salvamento y ambulancias.
Por favor, tomemos conciencia de su criticidad y seamos todos responsables y mostremos el máximo respeto hacia ello.


Que vamos a utilizar?? (Hardware y software)

Software

La principal "magia" con la que vamos a contar para esta entrada reside en el software GPS-SDR-SIM, es una creación de Takuji Ebinuma desde Japón y es un software que genera trazas de datos en la banda de utilización de GPS que después se pueden convertir a RF utilizando plataformas de radio definidas por software (SDR), como ADALM-Pluto, BladeRF, HackRF y USRP.
El programa completo esta en su GitHub (arriba hipervinculado) y lo único adicional que necesitaremos hacer será compilarlo con VisualStudio (no requiere mayor dificultad, no obstante os mostraré el proceso paso a paso).

Para poder generar la señal necesaria, el software requiere de una constelación de satélites GPS a través de un archivo de efemérides de emisión GPS.
El archivo diario de efemérides de emisión del GPS (brdc) es una fusión de los archivos de navegación de sitios individuales en uno solo archivo; este tipo de archivos son necesarios para generar el mencionado pseudorrango y el Doppler simulados para los satélites GPS a la vista. Estos datos de rango simulado se utilizan luego para generar las muestras digitalizadas I/Q para la señal GPS que emitiremos desde HackRF.
¿Donde se consiguen estos archivos de efemerides GPS? La NASA nos echa una mano con ello y nos los ofrece prácticamente a diario en ftp://cddis.gsfc.nasa.gov/gnss/data/daily/ (al menos hasta Octubre de 2020, fecha a partir de la cual necesitaremos registrarnos).

Por último ya solo nos hace falta el programa con el que comunicaros desde nuestro equipo Windows con el dispositivo HackRF y transmitirle el archivo generado y lo haremos con hackrf_transfer.exe el cual podremos compilarlo por nosotros mismos o descargar el ejecutable ya compilado desde el github de Pothosware.

Hardware

Como emisores de nuestra señal GPS suplantada usaremos en HackRF (en las fotos aparece con el PortaPack puesto, pero esta en modo de funcionamiento convencional debido a que, por la preparación del laboratorio, no podré acceder a su pantalla ni controles durante el proceso).

Como dispositivo receptor de la señal GPS voy a utilizar un dispositivo Android, concretamente un Nexus 5 que es mi "compañero de cacharreos" para pruebas y experimentos varios.



Adicionalmente y aunque más que hardware podría considerado "escenario de pruebas" como media de cumplimiento legal por lo expuesto en el apartado anterior y no infringir la normativa ni tampoco emitir ninguna señal al dominio público radioeléctrico, es necesaria la utilización de una caja o bolsa de Faraday que aislar totalmente nuestros dispositivos.

En mi caso he optado por una bolsa de peritaje que bloqueará las ondas electromagnéticas RF externas y las redirige a lo largo de la superficie de la propia funda y actuando del mismo modo en su parte interior, donde vas a tener nuestro emisor HackRF así como nuestro teléfono Android como receptor asegurándonos así no infringir ninguna normal legal al respecto. 



Tan solo debemos tener la precaución antes de cerrar la bolsa por completo de dejar por fuera los cables de conexión USB a nuestro ordenador para comandar el HackRF y visualizar en la pantalla de nuestro ordenador el móvil Android (en mi caso usé la solución SCRCPY).



Compilando GPS-SDR-SIM

Una vez descargado el proyecto y extraído a una carpeta abrimos Visual Studio y desde el menú de tareas iniciales crearemos un nuevo proyecto vacío y posteriormente seleccionaremos la opción "Aplicación de consola".



Una vez el proyecto vació se nos abra y ya veamos la interface de Visual Studio, debemos de añadir los archivos gpssim.c y getopt.c a la carpeta "Archivos de origen" que nos muestra  el explorador de soluciones en el margen derecho.



Desplegamos el menú de opciones superior de Visual Studio para seleccionar "Release" y procedemos a compilar desde la opción Compilar del menú superior de opciones.



Como resultado obtendremos el ejecutable con el nombre que le hayamos dado en el proyecto (en mi caso GPS.exe haciendo alarde de mi gran creatividad...) y algunos objetos más que debemos mantener en la misma carpeta. Para probar solo tenemos que ejecutar desde linea de comandos con, por ejemplo, la opción -h para ver la ayuda del programa.



Listo!! Ya podemos olvidarnos de la compilación y centrarnos en la parte interesante del proyecto!



Creando la señal y emitiéndola con HackRF

Como hemos mencionado en el aparto de requisitos de software, algo imprescindible que necesitamos es el archivo de efemérides de emisión del GPS (brdc), para ello tan solo debemos acceder al ftp servido por la NASA y una vez dentro seleccionado el años, después vamos a la carpeta "brdc" y elegimos uno de los archivos mas actualizado que haya (hay varios archivos para cada día).



Ahora que ya lo tenemos todo preparado, solo nos falta decidir la localización donde queremos hacer creer al dispositivo GPS que se encuentra, así que... ¿Donde os apetece viajar? A mi personalmente me apetece volver de vacaciones al sur de España, de modo que vamos a generar el archivo con el pseudorango con el siguiente comando:
gps.exe -b 8 -e brdc1470.20n -l 36.276173,-6.087545 

Donde con la opción -b le indicamos el formato en bits del I/Q resultando, con -e el archivo efemerides brdc que acabamos de descargar y con -l las coordenadas estáticas exactas que queremos emular. Pulsamos enter y lo dejamos trabajar.



Una vez finalizado el proceso observaremos como en la carpeta ha aparecido un archivo con extensión .bin con nombre gpssim (salvo que hayamos usado la opción -o en el paso anterior y hayamos especificado otro nombre de archivo)




Pues ya solo nos falta el último paso: conectar el HackRF a nuestro ordenador y enviarle el archivo generado! Para ello usaremos la herramienta hackrf_transfer comentada en la secciones más arriba y la sintaxis a utilizar será
hackrf_transfer.exe -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 0

Donde -t debe ser el archivo .bin que acabamos de generar con gps-sdr-sim, -f es la frecuencia en Hz de emisión (hay que ajustarla 1.575Ghz que es la frecuencia de utilizacion del GPS) así como como -s para ajustar el sample rate y -a a un valor de 1 para activar el amplificador RX/TX de HackRF y con -x podremos ajustar la ganancia TX VGA de 0 hasta 47 dB ( a mi personalmente lo que mejor resultado me ha dado ha sido siempre dejarlo en cero).



Ahora ya solo queda esperar pacientemente durante algunos segundos/minutos, a mi me gusta monitorizar la actividad del GPS con una aplicación suplementaria y cuando ella me indica que ya ha cogido los satélites necesarios y me da las coordenadas lo compruebo usando google maps.
Como os digo llegados a este punto es solo cuestión de paciencia para comprobar después como desde Madrid nos hemos "tele transportado" a Conil De La Frontera!



¿Que tal si generamos otro archivo y esta vez cruzamos al otro "lado del charco"? Nunca "viajar" fue tan cómodo, rápido y económico!! ;-)



A partir de aquí el límite es la imaginación... y el globo terráqueo lógicamente!
Además de poder definir localización estáticas en unas coordenadas exactas, gps-sdr-sim puede generar también archivos dinámicos, por lo que podemos pasarle como argumento un archivo con una trayectoria definida por nosotros mismos bien en un archivo CSV que contenga las posiciones que deseemos centradas en la Tierra (ECEF), o bien en un archivo de trazas NMEA GGA (existen simuladores para generar el archivo concreto con al ruta que nosotros deseemos como por ejemplo esta de ATLsoft).


Posibles contramedidas 

Como podéis observar, ha sido relativamente sencillo crear una señal GPS fraudulenta y confundir con ella a los dispositivos, el sistemas es vulnerable y hoy en día salvo las comunicaciones militares y algunas muy puntuales que van cifradas, todas pueden verse afectadas por este tipo de amenazas.

De todas las posibles soluciones de software para la mitigación de estas amenazas de las que he podido investigar algo y me parecen interesantes pasan por un sistema de monitorización y detección temprana de cambios repentinos en la intensidad de la señal, y una monitorización de los saltos de tiempo en al recepción de trazas su análisis para determinar su plausibilidad/viabilidad.

Muy interesante una solución de hardware que he encontrado del fabricante Microchip, se trata del
BlueSky GNSS Firewall y no es nadas más y nada menos que un firewall que sirve para proteger todas aquellas infraestructuras que puedan depender del sistema GPS. Para lograrlo todos los datos de la señal GPS que se reciben son evaluados y comprobados en paralelo con/desde cada satélite para asegurar su cumplimiento además de un análisis en paralelo de las características de la señal recibida para detectar posibles anomalías en ella. Es un dispositivo muy interesante que os recomiendo echar un vistazo.






Pues esto ha sido todo ahora! Espero que no se haya hecho demasiado pesado el artículo y os haya gustado, como siempre MUCHAS GRACIAS por la visita y por vuestro tiempo en leerlo!.

Hasta la próxima!!! Saludos!!!

5 comentarios:

  1. Como siempre una trabajo perfecto, eres un crack!!!!

    ResponderEliminar
    Respuestas
    1. Mil gracias por tus siempre amables palabras mi amigo! Me alegro que te haya gustado!

      Eliminar
  2. Respuestas
    1. Muchísimas gracias por tu tiempo en leerlo y en dejar un comentario!

      Eliminar
  3. Gracias por el articulo me parecio muy ameno y la forma como pudes ir jugando con la posicion del gps
    Imaginate que haces un secuestro y vas volviendolo loco al tipo pero seria mejor un inibidor de señal y le tiras todos los dispositivos asi el flaco no podra pedir ayuda y bueno el resto es historia :P

    ResponderEliminar