lunes, 8 de enero de 2024

Una guía para iniciarse en SDR y GNU Radio

 


¿Qué es SDR?

SDR viene de Software Defined Radio y significa Radio Definida por Software. En los sistemas tradicionales de comunicación por radio tenemos circuitos electrónicos dedicados a tareas específicas con el objetivo de incorporar o extraer la información de la onda electromagnética. En estos equipos la información es codificada/decodificada de una forma determinada según su propósito e igualmente ocurre con la modulación/demodulación de la onda. Estos circuitos se encargan de una sola tarea y por lo tanto el sistema de comunicación queda definido con unas características concretas, es decir sólo vale para una cosa.

La filosofía en los sistemas SDR consiste en poder reprogramar el sistema cuantas veces se quiera para poder realizar diversas funciones, realizando el procesamiento de la señal en un procesador de propósito general, sacando el máximo provecho a las características de los circuitos electrónicos. De esta forma se consigue un sistema multipropósito. Esta capacidad de adaptación los hace idóneos para una amplia gama de aplicaciones, incluyendo telecomunicaciones, radioafición, propósitos militares, radio cognitiva e investigación, entre otros.

¿Qué es GNU Radio?

GNU Radio es un programa de código abierto para el desarrollo de software de procesamiento de señales y radios definidas por software (SDR). Ofrece un entorno de programación para construir, simular y desplegar sistemas de comunicaciones y procesamiento de señales.

Este software permite a los usuarios crear aplicaciones de radio personalizadas, implementar algoritmos de procesamiento de señales, trabajar con dispositivos de hardware SDR y desarrollar sistemas de comunicación flexibles. Se utiliza ampliamente en campos como la radioafición, la investigación en comunicaciones, la industria de telecomunicaciones, la seguridad y la defensa, entre otros.

GNU Radio consiste en una interfaz gráfica constituida por bloques escrita en Python. Estos bloques se pinchan y arrastran por el entorno pudiendo conectarlos entre ellos como se quiera para el objetivo deseado. Existen bloques para operaciones de filtrado, modulación, demodulación, codificación, decodificación y otras tareas.

Una de las ventajas de GNU Radio es su gran comunidad ya que al tratarse de un proyecto de software libre se puede aportar nuevas características como nuevos bloques, mejoras del software y compartir conocimientos y desarrollos para avanzar en la investigación y aplicación de la radio definida por software y el procesamiento de señales.

Introducción a RTL-SDR

Los dispositivos SDR más económicos son sintonizadores de televisión digital terrestre (DVB-T) conectados por USB a los que se le ha modificado el controlador o driver. Estos dongles USB contienen el chip R820T que es un sintonizador de radiofrecuencia que recibe señales analógicas y las convierte en señales digitales, luego el chip controlador RTL2832U recibe los datos digitales del sintonizador de RF, los gestiona y los transfiere a la computadora a través del puerto USB. El R820T puede sintonizar frecuencias desde aproximadamente 24 MHz hasta 1.7 GHz. Los RTL-SDR se pueden conseguir por un precio alrededor de los 20€ y 40€. Estos dispositivos son solo para recepción de señales.

Otras SDR populares son la HackRF One, que es Half-Duples en el rango de 1MHz a 6GHz , lo que quiere decir que permite emitir y recibir señales pero no al mismo tiempo y se puede encontrar entre los 200€ o 300€ o la LimeSDR Mini, una de las mejores SDR por sus características, calidad y precio. Es Full-duplex para emitir y recibir al mismo tiempo y se puede encontrar alrededor de los 200€.

Configuración inicial

El entorno de trabajo que he preparado es una máquina virtual en VirtualBox con Ubuntu 20.04 LTS. Al tratarse de un RTL-SDR sólo para recepción de frecuencias entre 24 MHz y 1.7 GHz es suficiente, pero si trabajáramos con el HackRF One o el LimeSDR Mini y realizamos tareas más complejas que recepción de señales, necesitaríamos trabajar con un sistema operativo en bare-metal (esto es sobre el hardware real) para que no hubiese problemas de rendimiento. Además si se quiere emitir según en que frecuencias se tiene que comprobar la legislación vigente respecto a la necesidad de licencias.

Para trabajar con el RTL-SDR se necesita instalar el driver para identificar el dongle como un SDR. Ejecutamos las siguiente instrucciones en la consola de comandos:

sudo apt update && sudo apt upgrade

sudo apt install librtlsdr0 librtlsdr-dev

sudo apt install rtl-sdr

rtl_test

La última instrucción es un test de prueba para comprobar que detecta y funciona el RTL-SDR.

Instalamos GNU Radio ejecutando lo siguiente:

sudo apt install gnuradio gnuradio-dev gnuradio-doc

Comprobamos la versión de GNU Radio instalada, en nuestro caso se trata de la 3.8. Ahora necesitamos instalar el bloque que conectará al dongle RTL-SDR para esta versión. Podemos instalarlo desde “apt” directamente:

sudo apt install gr-osmosdr

O desde el código fuente, pero tenemos que tener todas las dependencias necesarias para el RTL-SDR, para ello ejecutamos en la consola de comandos lo siguiente:

sudo apt install git cmake g++ libboost-all-dev swig python3-numpy
git clone -b gr3.8 https://github.com/osmocom/gr-osmosdr.git
cd gr-osmosdr/
mkdir build
cd build/
cmake ../

Ya lo tendríamos instalado, sólo nos quedaría abrir GNU Radio companion desde la consola y trabajar con él. Tendríamos que ser cautos dependiendo que hardware vamos a usar, pues es posible que para alguno necesitemos permisos de root, por lo que tendremos que ejecutar con sudo o directamente con el root.

gnuradio-companion



 

 Ejemplos prácticos

Lo que podemos hacer con un SDR es lo que el hardware y la imaginación nos limite. Vamos a empezar creando un simple analizador de espectro en GNU Radio para la banda de frecuencias de la radio FM.

Si al ejecutarlo nos da el error “The xterm executable is missing.” , este se corrige instalando xterm con “sudo apt install xterm” o modificando el fichero /etc/gnuradio/config.d para introducir el parámetro “xterm_executable=/usr/bin/gnome-terminal” que es la carpeta donde se encuentra el ejecutable.

Puede descargarlo de mi repositorio en Github. Si has leído el artículo de BadBIOS pero aún crees que tu PC puede comunicarse mediante ultrasonidos, puedes descargar desde mi repositorio un analizador espectral de audio y usarlo para comprobar si las salidas de audio de tu PC están emitiendo en Ultrasonidos. Para usarlo tienes que usar Ubuntu, la tarjeta de sonido esta configurada como hw:0,0 y tienes que conectar la entrada del micrófono directamente a la salida del PC que quieras comprobar con un cable jack-jack. Cuando lo tengas conectado, ejecutas el proyecto. Las tarjetas de sonido están optimizadas para el rango 20 Hz a 25 KHz, por lo que para buscar ultrasonidos tendrás que fijarte en el intervalo de 20KHz a 25 Khz.

Ahora que conocemos lo básico de GNU Radio, podemos elaborar una radio FM.



El flujo de procesamiento consta de varios bloques que representan componentes esenciales para recibir y demodular señales de radio FM utilizando un dispositivo RTL-SDR.

La radio "FM" proviene de Frequency Modulation o modulación de frecuencia, que es el método utilizado para enviar las señales de audio a través del espectro de radio. La modulación de frecuencia es un método de modulación en el que la frecuencia de la onda portadora se modifica de acuerdo con la amplitud de la señal de entrada.

En la transmisión FM, la señal de audio modula la frecuencia de la portadora de radio en lugar de su amplitud, como ocurre en la modulación de amplitud (AM). Este método permite una mejor calidad de audio y una mayor resistencia al ruido en comparación con la modulación de amplitud, lo que hace que FM sea popular para la transmisión de música y otros contenidos de alta fidelidad en radio. Para el sonido estéreo se pueden añadir dos canales de audio independientes, el izquierdo y derecho, consiguiendo una sensación de separación y amplitud en la escucha.

Este flujo consta solamente de una fuente RTL-SDR, un demodulador cuadratura analógica que lleva a cabo la demodulación de la señal FM, al que hay que ajustarle la desviación de FSK para calcular el parámetro de ganancia. La desviación de frecuencia en un sistema de modulación FSK (Frequency Shift Keying) se puede modelar mediante la siguiente ecuación:

 

  • es la desviación de frecuencia.

  • es la frecuencia de la señal cuando se transmite el bit de valor alto.

  • es la frecuencia de la señal cuando se transmite el bit de valor bajo.

Un filtro FIR paso bajo con una frecuencia de corte de 15 kHz, ya que las transmisiones de FM tienen su información principal dentro del rango audible humano, que va aproximadamente hasta los 20 kHz.

La ecuación que modela el filtro paso bajo ideal en el dominio de la frecuencia es:

Donde:

  • es la respuesta de frecuencia del filtro.

  • es la frecuencia.

  • es la frecuencia de corte del filtro.

Esta ecuación representa la atenuación gradual de las frecuencias por encima de la frecuencia de corte  ​, permitiendo pasar las frecuencias más bajas y atenuando progresivamente las frecuencias más altas.

Un Re-muestreador racional para ajustar la tasa de muestreo de la señal y que coincida con la tasa de muestreo del dispositivo de salida de audio.

Por lo tanto, los valores que hay que introducirle al re-muestreador racional son:

  • Interpolación: 3

  • Decimación: 16

Puedes descargarla desde mi repositorio de Github.

Podemos mejorar el flujo .grc de la radio FM y desarrollar más etapas para mostrar más información de la señal FM. El siguiente diagrama recibe la señal FM, realiza decimación, filtrado, ajusta su ganancia, y luego procesa la señal de audio antes reproducirla a través de la tarjeta de audio.

 

Consta de una fuente OsmoSDR para recibir las señales de radio a la frecuencia sintonizada y se ajusta la ganancias. Se emplean filtros paso bajos y otros filtros para limitar la señal a la banda de frecuencia de interés. Se realiza la decimación de la señal de FM, y después se convierte a su forma de magnitud y fase. Se establece un control deslizante para el volumen y luego se aplica esta ganancia a la señal. La señal procesada se envía a la tarjeta de sonido del sistema para su reproducción. Se crean gráficos que muestran la señal en el dominio de la frecuencia y en el dominio del tiempo. Puedes descargarla de aquí y siéntete libre para hacer pruebas y modificarlo o mejorarlo.

Proyectos avanzados: Existen proyectos de investigación que hacen uso de dispositivos SDR más completos, como los de Ettus Research, que centran sus esfuerzos en llevar un paso más lejos las comunicaciones inalámbricas. Algunos de ellos consisten en la mejora del estándar 802.11 o WiFi como el proyecto gr-ieee802-11 o el proyecto OpenWiFi cuyo objetivo es proporcionar una plataforma de código libre para experimentar, investigar y desplegar mejoras en la tecnología WiFi.

Software para SDR: Para explorar la tecnología SDR, sin necesidad de configurar flujos en GNU Radio, existen otros softwares como CubicSDR, una aplicación multiplataforma que permite navegar por el espectro de radio y demodular cualquier señal que pueda descubrir.

 

Otro software es AirSpy SDR# o también conocido como SDRSharp, un software popular de radio definido por software con una interfaz sencilla que ofrece la visualización del espectro electromagnético, la decodificación de varios tipos de señales y se puede usar para multitud de aplicaciones que van desde la radioafición hasta la vigilancia de señales. 


 

jueves, 4 de enero de 2024

Bad Bios ¿La amenaza fantasma?

 


 

    En los anteriores artículos explicaba que son las APT’s o Amenazas Persistentes Avanzadas y los anillos de protección de la arquitectura x86. Teniendo en cuenta esto, os voy a contar algo que pasó en el año 2013.

    ¿Qué pasaría si un amigo nos contara que su PC ha sido infectado con un malware que es muy difícil de detectar y se comporta de una manera muy extraña? Lo primero que pensaríamos es que ha sido victima de una APT, pero ¿por qué iba a atacarle una APT? Si las APT’s atacan a objetivos muy específicos como empresas o personas de las que se puede obtener información significativa, ¿por qué iban a utilizar un software tan avanzado contra un amigo nuestro? ¿Qué clase de secretos guarda para emplear algo tan sofisticado? Tendría que tratarse de un súper espía internacional con información Top Secret. Pero, y ¿si no lo fuera? ¿Qué sentido tendría?

    Vamos a complicarlo un poco más. ¿Y si el comportamiento que describe del malware es tan sofisticado que no podríamos creer que es real? ¿Y si las pruebas que aporta no son concluyentes? Llegaríamos a pensar que, o nos está mintiendo o está loco.

    Esto es lo que sucedió en el año 2013 con el experto en ciberseguridad Dragos Ruiu (@dragosr) y BadBios.

 

¿Quién es Dragos Ruiu?

    Es el fundador de la competición Pwn2Own, organizador de las conferencias CanSecWest y PacSec. Tiene un amplio y largo currículum en ciberseguridad. En otras palabras, es alguien de quien puedes fiarte.

¿Qué es BadBios?

    BadBios es un supuesto malware con unas propiedades bastante avanzadas. Salto a todos los canales de ciberseguridad en el año 2013, levantando una gran polémica porque las características de este malware rozaban la ciencia ficción, sino fuera porque para todas las característica que se le atribuye a BadBios, existe una prueba de concepto verificable pero no tan compleja como reportaba Ruiu.


Lo que ocurrió

    Todo comenzó después de que Ruiu realizara una instalación de OS X en un MacBook Air. Notó que la secuencia de arranque del ordenador se modificó por arte de magia, resultándole imposible “arrancar” el MacBook Air desde un CD-ROM. Por lo que concluyó que el computador estaba infectado de un malware y este tenía la capacidad de modificar el firmware de arranque del equipo, es decir, la BIOS. 

    Más tarde notó que algunos archivos eran eliminados y que el MacBook Air borraba algunos datos y hacia cambios de configuración.

    Meses después, volvió a observar este comportamiento entre otros equipos de su red interna, incluyendo algunos equipos con Open BSD y otros con Windows. Lo que significaba que el malware era independiente del sistema operativo.

    Otro de los reportes que aportaba era que comenzó a observar en su red paquetes del protocolo IPv6 que procedían de su equipo e incluso de otros equipos de la misma red que no tenían habilitada el protocolo IPv6.

    Estuvo cerca de 3 años con estos problemas, por lo que probó de todo, desde reinstalar el sistema operativo en discos duros nuevos, hasta privar a los equipos de toda conexión externa. Corto las conexiones de red deshabilitando tarjetas WIFI y Bluetooth, aisló los equipos cortando las conexiones con la red eléctrica y trabajando sólo con baterías.

    Como él mismo narraba:"Teníamos un ordenador aislado (air-gapped) sobre el que acabábamos de reflashear el BIOS, un disco duro nuevo recién instalado, y cero datos en él y el Sistema Operativo Windows recién instalado desde un CD", "En un momento, estábamos editando algunos componentes (del registro de Windows) y nuestro editor de registro (regedit) se deshabilitó. Fue como: espera un minuto, ¿cómo pudo ocurrir? ¿Cómo pudo la máquina reaccionar y atacar el software que estamos usando para atacarla? Esta es una máquina asilada y, de repente, la función de búsqueda en el editor de registro dejó de funcionar cuando la usábamos para buscar sus claves".

    No fue hasta que deshabilitó el controlador de sonido y desconectó los altavoces y el micrófono que los equipos dejaron de mostrar comportamiento anómalo, llegando a la conclusión de que el virus se transmitía a través del sonido y más concretamente desde una frecuencia inaudible para el ser humano, lo que se conoce como ultrasonidos.

    Defendía que los equipos comprometidos, infectaban a los dispositivos USB que se enchufaban a él, siendo estos dispositivos USB un vector de infección para otros PC’s. Además de que el malware no le permitía acceder a las webs donde podía encontrar herramientas para flashear y restablecer el firmware de las memorias USB (todas ellas eran “.ru”). Recordemos que en 2010 se descubrió la APT Stuxnet, y que este infectaba a las máquinas centrifugadoras mediante un USB malicioso.

    Después de esos tres años Ruiu decidió contar su experiencia y así saltó la polémica a blogs y foros especializados en ciberseguridad. El especialista en ciberseguridad Arrigo Triulzi le dijo al medio Arstechnica que: "Dragos es definitivamente uno de los tipos buenos y confiables, y nunca, ni remotamente, pensé que fuera deshonesto". "Nada de lo que describe es ciencia ficción tomado individualmente, pero nunca lo hemos visto en la naturaleza". Asegurando, en un primer momento, que el comportamiento de BadBIOS era posible. Pero más tarde rectificó mostrándose más escéptico debido a la falta de pruebas. Triulzi es conocido porque modificó el firmware de la tarjeta de red Ethernet de su PC, pudiendo conectarse a ella mediante conexión ssh y creando una puerta trasera indetectable. 

    Ruiu aportó como pruebas imágenes del disco duro e imágenes de la BIOS. A lo que Triulzi comentó que "las imágenes del disco duro eran perfectamente normales sin nada sospechoso en ellos", al igual que en las imágenes de la BIOS o los datos de monitorización.

    Otro analista en seguridad, Tavis Ormandy, mostraba abiertamente su escepticismo. Decía haber echado un vistazo al volcado de la BIOS, a los logs de monitorización de procesos, a los archivos de fuentes y a las imágenes del disco y no ver nada que sugiriera que hubiera algo sospechoso.



Viendo BadBios desde otra perspectiva

    Volviendo al principio del artículo, analicemos el comportamiento de BadBIOS desde la perspectiva de los anillos de seguridad de la arquitectura x86. Este supuesto malware no podría ejecutarse en el anillo 3 de aplicaciones de usuario, pues desde ese anillo no tendría acceso al hardware. Tampoco desde el anillo 0 (el kernel), pues sería detectado desde el propio Sistema Operativo y con una simple reinstalación del Sistema Operativo acabaríamos con el problema. El malware tendría que estar ejecutándose en un modo más privilegiado.

    Considerando el anillo -1 como el hipervisor, aún sería fácil de detectar y deshabilitar. Simplemente desactivando el hardware de virtualización desactivaría la ejecución paralela de otro posible Sistema Operativo.

    Por lo que nos quedaría solamente dos anillos en los que podría ser ejecutado, el anillo -2 ó Modo de Gerencia de Sistema (SMM), o el anillo -3 el Intel Management Engine (IME).

    Pensando paralelamente, si el malware se propaga por ultrasonidos, podríamos ver la hoja de características del chipset de los equipos y comprobar si este hardware es capaz de reproducir ultrasonidos. En general los altavoces de los equipos junto con los micrófonos trabajan en un espectro de frecuencia optimizado para el intervalo de 20 a 24 KHz. El oído humano capta sonidos desde los 40 Hz hasta los 20 Khz, por lo que sólo nos dejaría un ancho de banda de 4 KHz para trasmitir datos. Esto es un ancho de banda muy bajo para trasmitir datos.

    Hubo un equipo en el MIT que trabajó en el campo de las comunicaciones inalámbricas empleando ultrasonidos. El instituto alemán de comunicaciones Fraunhofer también publicó un artículo acerca de este tipo de comunicaciones encubiertas. Es real que los ultrasonidos pueden usarse para trasmitir datos. Existen pruebas de concepto en GNU Radio que funcionan como un antiguo Modem por tonos, se pueden encontrar en Github, o en el siguiente blog o en artículos científicos como el siguiente: “Speaker-to-speaker covert ultrasonic communication


BadBios es un mito

    Han pasado ya más de 10 años desde que Dragos Ruiu supuestamente se infectara de este malware y de haber sido real se hubiera desensamblado, inspeccionado y mostrado pruebas concluyentes incluso se habría realizado ingeniería inversa de los firmware de los Dispositivos USB con los que se propagaba. Todos los expertos que analizaron las pruebas llegaron a la misma conclusión de que se trataba de pruebas perfectamente normales. Probablemente todas las experiencias que aportó se debieran al sesgo que conduce a errores en la causalidad.

    Se podría concluir que algo parecido se podría crear en el anillo -2 o en el anillo -3, usando ultrasonidos para comunicarse pero con un ancho de banda muy limitado, lo que significaría que no serviría para exfiltrar datos.