Categoría: prueba de concepto

Radio fingerprinting

Few days ago I heard about a guy that created a script for recognise spurious emissions from a list of known devices, and I wanted to do the same in a simpler way.

I do not own any downconverter for my RTL-SDR – most spurious emissions are located near to 0 MHz and my SDR device starts on 24 MHz – so I have created a very simple script using wide-range frequencies scan with rtl_power, then converted to image schema with heatmap.py, and compared with imagemagick in a probabilistic way to determine which profile is the most similar to database entries. I called it Radioprint.

Radioprint discovering nearby devices

Below you will find radioprint.sh sourcecode. Remember install all dependencies [imagemagick, rtl_power] and run the script in the same folder of heatmap.py. You must create an empty directory called «database» in the same folder in order to compare profiles before running the script.

The script reads from 24MHz to 921MHz. Maybe a narrower range would make the script more efficient, but also more innacurate. Feel free to modify it.

./RADIOPRINT.SH

rm log.html 1.png 2.png probe.csv r.txt; 
echo '<html><body bgcolor="#34495e"><font face="verdana" color="white"><h1>Radioprint</h1><br>' > log.html; 
while true; 
	do rtl_power -f 24M:921M:60k -g 50 -i 10 -e 10s probe.csv; 
	python heatmap.py probe.csv 1.png; convert 1.png -gravity Center -crop 100%x+0+26 2.png; 
	echo "<b>" >> log.html; 
	cd database; rm r.txt; 
		for line in `ls | xargs | tr " " "\n"`; 
		do convert -metric AE ../2.png $line -trim -compare -format "%[distortion]" info: >> r.txt; 
		echo -n ",$line" >> r.txt; echo " " >> r.txt; 
		done; 
	cat r.txt | sort | awk "NR==1" | cut -f2 -d"," | cut -f1 -d"." >> ../log.html; 
	cd ..; echo "</b> - " >> log.html; 
	content=$(base64 -w0 < "2.png"); 
	b64=$(echo "data:image/png;base64,$content"); 
	data=$(date +%d.%m.%y.%H.%M.%S); 
	hash=$(echo $content | base64 -d | md5sum | cut -f1 -d" "); 
	echo '<a>'$data' - '$hash':</a><br><img src="'$b64'" width=100% height=25 /><br>' >> log.html; 
done;

How it works

Run the script -without arguments- and let it work in the background. Minimize the console and open log.html with your favourite web browser in order to see real-time results – pressing F5 each 30 seconds. The script adds the scan results on this page each ~20-30 seconds.

Connect to your SDR device a small wire as antenna, about 7-8 centimeters, and let it work in a place far away from electronic devices [>1 meter]. Refresh webpage and wait until you see an appropiate spectrum representation of «normality» in «log.html», then right-click, save image as…, go to /database folder and save it [without spaces] as «normal.png». You’ve just created your first profile for nothing found.

Now put your mobile phone touching directly the small antenna. Wait for the correct profile image in «log.html», and save it in the same way we did for «normal» profile. Now save the file in /database as «smartphone.png«. Now we have two profiles: normal and smartphone.

Radioprint will start to compare distortion between saved images and the new real-time generated images. Start checking if the script detects if your smartphone is near, for example.

Update 1/10/19. RTL-SDR.com has just released a review of my script! It is a great privilege and I appreciate it very much.

rfside

rfside is a very simple bash script based on rtl_power and heatmap.py that gets info related to emission power in wide-band scan and shows it all in a gaze. The scripts perform a huge scan in just 5 minutes, from 24 MHz to 1.7 GHz [customizable] allowing us to identify active bands for a more detailed study on any SDR application. It aims to be the first step in radio signals identification.

Source code here.

EMIs en el iPhone X

Las interferencias de Van Eck son emisiones de canal lateral de dispositivos electrónicos. Desde los años ’60 se estudia este fenómeno descubierto por el científico homónimo, que fue realmente sonado porque descubrió que aparatos eléctricos tales como televisores o monitores de ordenador emiten ondas residuales que pueden ser reinterpretadas por un actor malicioso con objetivos de espionaje, incluso desde otro edificio cercano.

También desde los años ’60 se ha puesto un especial celo en realizar productos que cumplan con la especificación técnica Tempest, que pretende mediante diversas técnicas – la más habitual, un armazón de metal y mallas metálicas a modo de jaula de Faraday – impedir que los aparatos eléctricos emitan estas EMIs al espectro radioeléctrico.

No obstante, salvo honrosas excepciones, esta especificación se dedica a atenuar más que a evitar, por lo que sigue siendo posible leer estas interferencias pese a los esfuerzos de la NSA y la OTAN. Simplemente ahora hay que utilizar antenas especialmente resonantes a las interferencias y con mayor proximidad física.

Ejemplo de estas radiaciones las pude encontrar fortuitamente con un sintonizador RTLSDR, cuando me dí cuenta que si la pantalla del iPhone X se encendía se producía una emisión constante allá por los 216 MHz. Esta emisión desaparecía si volvía a bloquear el móvil.

En la imagen se puede observar el acto de pulsar dos veces el botón reposo, esto es: pantalla apagada – pantalla encendida – pantalla apagada.

La frecuencia en cuestión es 216.002.640 Hz. He investigado los posibles armónicos y esta es la frecuencia que se recibe con mayor ganancia: unos -20 dB a una distancia de 10 cms del RTLSDR sin antena.

Utilizando una antena especial para la captación de interferencias los resultados son mucho más interesantes, y más aún si utilizamos preamplificadores y filtros de GNURadio, por ejemplo.

Como adelanto, un script bash «oneline» que detecta cuándo se ha activado la pantalla un iPhone X cercano. No olvides tocar los parámetros hasta que sirva para tus condiciones.

rtl_power -f 216.001M:216.003M:1K -g 30 -i 1 -c 20% | while read line; do data=$(date +%d/%m/%y-%H:%M:%S); valor=$(echo $line | cut -f11 -d"," | cut -f2 -d"-" | cut -f1 -d"."); if [ "$valor" -lt "15" ]; then echo "[$data][216.002 MHz][-$valor dB] iPhone en uso detectado"; fi; done;

Ingeniería social en iOS para obtener códigos 2FA

En el experimento que hoy presento, introduciendo un número de teléfono del atacante, se generará un archivo PDF que contiene un mensaje falso de iOS pidiendo que se guarde el archivo en la aplicación nativa «Libros» de iOS. Cuando esto se hace y se vuelve a abrir el script, se ejecuta sin consentimiento un URI tel con códigos USSD que desvían las llamadas y SMS al teléfono atacante.

Una vez hecho esto, el atacante no tiene más que acudir a la sección «¿Ha olvidado su contraseña?» de cualquier servicio para recibir en su propio móvil un código de confirmación o un link para cambiar la clave de la víctima.

Descarga el script bash aquí.

NOTA: Si vas a probarlo en tu propio móvil, teclea posteriormente el USSD #002# para desactivar los desvíos.

NOTA 2: Es un simple ejercicio de programación. El uso que se le dé a este script es asunto de cada uno, y no asumo ningún tipo de responsabilidad.

Especulando con Python: automatización de operaciones con Ethereum y la API de Coinbase

image

La casa de cambio de criptodivisas Coinbase ha puesto a disposición de desarrolladores una API especialmente útil, en tanto nos permite integrar las operaciones básicas de compra y venta en toda clase de programa o script. Python es un lenguaje especialmente estructurado, potente y sencillo, en el que los desarrolladores de Coinbase pensaron desde el primer momento – sólo hay que ver la documentación de la API -. Seguir leyendo «Especulando con Python: automatización de operaciones con Ethereum y la API de Coinbase»