webmaster
22 de abril de 2025

Pues sí, quizás no te lo creas, quizás te suene raro, pero los hackers (los malos malísimos, los que se pasan el día en la dark web haciendo negocios turbios) viajan en autobús.
¿Por qué? Te preguntarás…
Pues muy sencillo, porque saben que muchos transportes públicos utilizan tarjetas monedero con RFID. Las típicas que recargas y almacenan una determinada cantidad de saldo, y cada vez que subes al autobús, tren… las acercas a una maquinita y te descuenta el saldo correspondiente de ese viaje.
Y ¿adivina que? Muchas de estas tarjetas, no son seguras. ¿Quieres aprender a hackearlas?
Pues bien, este tipo de tarjetas utilizan una serie de protocolos estándar (la forma que tienen de comunicarse con el lector).
Para fabricar estas tarjetas, se utiliza un pequeño chip y una antena que no es más que un hilo metálico enrollado.
Hay varios fabricantes que hacen chips para estas tarjetas, siguiendo los protocolos estándar, de hecho algunos de estos fabricantes ayudaron en su momento a definir los estándares de la industria.
Ahora bien, la magia de lo que vengo a contaros hoy reside en el chip. Un chip RFID no es más que una pequeña memoria que permite almacenar una serie de datos (el saldo que te queda, la última vez que se utilizó tu tarjeta, la última vez que se recargó…. Dependerá mucho del fin para el que se quiera utilizar.
Si te paras a pensarlo, seguro que enseguida te das cuenta de que los fabricantes necesitan evitar que cualquiera pueda leer o escribir el contenido de esta memoria, ya que si no, cualquiera podría recargar el saldo que quisiera ( a esto llegaremos luego) y la forma típica de proteger esta memoria es utilizando una contraseña.
Volvamos a los fabricantes de chips. NXP es uno de los principales fabricantes de chips RFID del mundo, y hace años sacaron el chip Mifare Classic, que resulta ser uno de los más utilizados en tarjetas monedero y tarjetas de acceso (oficinas, hoteles…). Estas tarjetas están divididas en 16 bloques de memoria, y cada uno de estos bloques tiene espacio para almacenar 2 contraseñas, y cada una de las cuales puede especificarse para leer, para escribir, para ambos usos o para ninguno.
Las tarjetas Mifare Classic, utilizan un sistema diseñado por su propietario llamado Cripto-1. Este sistema se utiliza para la autenticación entre el lector y la tarjeta, básicamente para comprobar si la clave que se está enviando es buena o no.
NKP no hizo público este protocolo cuando lo creó, sino que lo mantuvo en secreto, pensando que si nadie conocía como funcionaba su mecanismo, esto lo hacía seguro. Esto es lo que se conoce en el mundillo como “seguridad por oscuridad”, y ya os digo yo que la “seguridad por oscuridad” es de todo menos segura.
En 2008, un grupo de investigadores de la Universidad Radboud en los Países Bajos consiguió romper este sistema cifrado. ¿Cómo lo hicieron?
Ya está bien de teoría, vamos a la práctica:
Para probar lo que os acabo de contar, vamos a necesitar un lector de tarjetas RFID HF, que podamos conectar por USB a nuestro ordenador. En mi caso utilicé un PN532 que puedes comprar por 2 duros en Aliexpress, y un conversor de puerto serie a USB, para conectarlo a mi PC.
Obviamente necesitamos una tarjeta RFID con la que probar, y que sospechemos que pueda ser una Mifare Classic 1k. Podéis compraros tarjetas Mifare para probar. Son muy baratas.
En mi caso y sólo con fines educativos, utilizaré una tarjeta de autobús urbano.
Y por último, necesitamos las herramientas que vamos a utilizar: mfcuk y mfoc. Ambas herramientas son libres, para sistema operativo Linux. Pueden encontrarse en Github, o vienen incluidas en los repositorios de Kali.
Lo primero que vamos a hacer es lanzar la herramienta mfoc. Esta herramienta va a intentar realizar lo que se conoce como “nested attack”. Este ataque se basa en autenticarnos en un sector con una clave conocida. Durante el proceso de autenticación, la tarjeta nos enviará un nonce (una secuencia de bits cifrada) que forma parte de la conversación entre la tarjeta y el lector. Una vez autenticados con éxito, volvemos a autenticarnos con ese mismo sector y nos enviará un nonce distinto, y con la diferencia entre ambos conoceremos el keystream (la secuencia que se utiliza para el cifrado). El saber como varía esta secuencia de bits nos permite desencriptar el resto de claves de los demás sectores.
Cuando se lanza mfoc la primera vez, buscamos 2 cosas:
Si finalmente el programa consigue sacar la clave de todos los sectores, realizará un volcado del contenido de la tarjeta al archivo que le indiquemos.
Lanzamos el programa y vemos lo siguiente:
Como este método no resultó efectivo, pasamos a probar otro tipo de ataque: vamos a probar un “dark side attack”.
Este ataque se basa en los parámetros nR y aR que en un momento dado envía el lector a la tarjeta. La tarjeta comprueba la paridad de estos datos, y si es correcta después comprueba que los valores sean correctos. Si no lo son (sería lo lógico ya que no conocemos la clave), la tarjeta envía un código de error 0x5 (pero cifrado). Como conocemos el código cifrado y su equivalente en texto plano, podemos averiguar el estado del keystream, que es lo que nos permite descubrir la contraseña.
Aquí le decimos a mfcuk, la otra herramienta de la que hablamos, que intente sacar la clave A del sector 8.
Según mi experiencia, por otras pruebas realizadas, deberíamos tener la clave en aproximadamente 1 hora. Sin embargo, después de 2 días, el PC seguía trabajando sin éxito.
Este hecho me hace sospechar que hay algo raro con esta tarjeta.
Algo muy común hoy en día, es que hay fabricantes chinos de chips, que tienen sus propios chips, que pueden configurar (escribiendo unos bits en una zona determinada de memoria) para que se comporten imitando otro chip de otro fabricante del mercado.
El lector de tarjetas los reconocerá a efecto práctico como un Mifare Classic 1k, pero en realidad estaremos ante algo muy distinto.
El problema de estas copias es que funcionan igual a efectos prácticos, pero puede ocurrir que no respondan con el mismo código de error en determinados casos, o que los tiempos de respuesta sean distintos, lo que hace que este tipo de ataques no funcionen.
Ojo, que también puede ocurrir que estemos ante una versión del chip Mifare Classic que esté parcheada, por lo que los ataques que se basan en el keystream ya no funcionarán.
Antes de desesperarnos y sacar la artillería pesada, vamos a probar un último truco: lo que se conoce como “hardnested attack”. Es una versión más refinada del “nested attack” que consiste en capturar un montón de nonces (números pseudoaleatorios cifrados) y una vez capturados se realiza un análisis offline de los nonces para reducir lo máximo posible el espacio de claves y posteriormente se realiza un ataque de fuerza bruta para encontrar la clave. Es un ataque que debería funcionar en la mayoría de los casos (salvo que te hayas encontrado con una copia china de una tarjeta Mifare).
Este ataque se realiza con la herramienta mfoc-hardnested, que se puede encontrar en Github.
La herramienta se lanza con los mismos parámetros que mfoc original, pero en mi caso, tras otros 3 días con el ordenador dándolo todo, seguía sin conseguir sacar la clave.
Podríamos rendirnos y dejarlo aquí, al fin y al cabo, como introducción al hacking RFID no está mal, y la mayoría de tarjetas Mifare que podamos encontrar caerán con estas herramientas…
Pero mi orgullo me impide dejarlo a medias, así que vamos a sacar la artillería pesada: nos compramos un Proxamark 3. ¿Qué es eso de un Proxmark 3? Pues es un aparatito del tamaño aproximado de una tarjeta de crédidto que es la leche. Te permite leer tarjetas RFID, clonarlas, escuchar la “conversación” entre una tarjeta y un lector real (para averiguar cómo funciona el protocolo) e incluso te permite emular (suplantar) a una tarjeta real.
Una de las particularidades de este dispositivo es que puedes controlar y medir absolutamente todo a bajo nivel, desde la potencia de lectura o escritura, los tiempos de respuesta, bits de control que los lectores tradicionales enmascaran y no te proporcionan… lo que abre un abanico de nuevas posibilidades.
Cuando nos hacemos con uno de estos cacharritos, lo primero que deberíamos hacer es descargarnos el repositorio de Github que contiene el firmware actualizado del lector, y el software para comunicarse con el. Hay varias versiones de este firmware, pero una de las más utilizadas por la comunidad es la que se conoce como Iceman Fork, y puede encontrarse en el siguiente enlace:
https://github.com/rfidResearchGroup/proxmark3
Antes de empezar a hacer nada con este software, debemos asegurarnos de instalar antes una serie de dependencias:
$ sudo apt-get install –no-install-recommends git ca-certificates build-essential pkg-config \ libreadline-dev gcc-arm-none-eabi libnewlib-dev qtbase5-dev libbz2-dev libbluetooth-dev
Otra cosita, en algunos casos, si estamos usando la distribución de Kali Linux, hay un servicio que puede dar por saco y hacer que las comunicaciones con el Proxmark fallen. Se trata del servicio modemManager. La parte buena: la mayoría de los usuarios no lo utilizan para nada (gestiona las conexiones con modems 3G/4G), así que podemos deshabilitarlo escribiendo en la consola “sudo service modemManager stop”.
Ahora toca compilar. Si todo lo anterior lo hicimos bien, no debería de haber problema. En la consola escribimos “make clean && make PLATFORM=PM3GENERIC”.
Una vez que lo tenemos, el siguiente paso es actualizar el firmware del lector.
OJITO! Si algún ávido lector con ganas de experimentar decide comprarse un clon del Proxmark3 en lugar del original (escuchamos pero no juzgamos, ejem..) que se asegure de comprar la versión con 512K de memoria, ya que de lo contrario puede encontrarse con que algunas versiones de firmware no caben en la memoria del dispositivo.
Para flashear, simplemente, con el dispositivo conectado al ordenador por USB, ejecutamos “./pm3-flash-all” y esperamos a ver que pasa.
Si el proceso da error, puede que tengamos que desconectar el Proxmark, presionar el botón lateral que trae, y sin dejar de presionarlo, volver a conectar el proxmark y ejecutar el comando anterior de nuevo (no dejamos de presionar hasta que termine de flashear).
Y si aún así sigue fallando, puede que tengamos que repetir el paso anterior, pero en su lugar ejecutamos “./pm3-flash-bootrom”, y una vez completado ejecutamos “./pm3-flash-fullimage”. Esto sustituye en primer lugar el bootloader, y en segundo lugar el firmware del dispositivo.
Ahora si que estamos ready. Con el lector conectado al PC, colocamos encima la tarjeta y ejecutamos el comando “./pm3” para arrancar la interfaz.
Ahora, dos cosas importante. Dominar el Proxmark3 por completo cuesta, el número de herramientas y funcionalidades que puede ejecutar crece día a día y esto no es más que una pequeñísima introducción. No obstante, este firmware en particular está muy bien documentado en internet y podréis encontrar todo lo necesario para avanzar.
En segundo lugar, si tenéis dudas, en cualquier submenú podéis ejecutar el comando help, que os sacará información adicional sobre todos los comandos que podéis ejecutar, y a medida que vayáis ejecutando el propio software os sugerirá cuales deberían ser los siguientes pasos.
Para nosotros, el primer paso es identificar la tarjeta a la que nos enfrentamos, y eso se hace con el comando “hf search”.
Como vemos, nos identifica la tarjeta, el UID (el número de serie que debería de ser único para cada tarjeta, aunque en este caso nos dice que es un número reusado), nos identifica la tarjeta como Mifare Classic 1K, nos dice que el generador de números pseudoaleatorio es débil (Prng) y no sugiere nuestro siguiente comando: “hf mf info”.
Este comando nos arroja algo más de luz: Acabamos de descubrir que el chip de la tarjeta no es un MIFARE original, sino que es un Fudan FM11RF08S. Un chip chino que puede emular el comportamiento de un chip MIFARE.
¿Por qué nos hemos encontrado esto? Respuesta rápida: las tarjetas de transporte público se compran normalmente por licitación pública, y resulta que los clones son mucho más baratos que las originales. A efectos prácticos, nadie que no analice la tarjeta a este nivel notará la diferencia.
Como vemos, el propio programa nos sugiere cual es el siguiente comando que deberíamos ejecutar: “script run fm11rf08s_recovery.py”. Vamos a ello:
Como vemos, ya tenemos la clave que desbloquea todos los sectores de la tarjeta. En este caso han usado la misma clave para todos los sectores. No me importa que se vea porque en el caso de esta empresa, no utiliza la misma clave para todas sus tarjetas, cada tarjeta tiene una clave distinta, lo que nos indica que posiblemente se calcule con alguna fórmula en base al UID, o algún bloque de la tarjeta que pueda leerse sin contraseña.
Ahora, si nos fijamos, vemos que el programa nos saca 2 contraseñas extra, para el sector 32, pero una tarjeta Mifare Classic sólo tiene 16 sectores. Entonces, ¿Qué pinta ahí ese sector?
Pues bien, muy posiblemente ese sector sea la zona de memoria que se utiliza para configurar el chip de “Fudan” y modificar su comportamiento.
Vale, tenemos la clave, pero realmente aún no hemos terminado. Hemos conseguido acceso ilimitado a la memoria de la tarjeta, y ahora hay que trabajar con los datos que contiene.
Con el software mfoc que vimos anteriormente, podemos sacar un volcado de la memoria de la tarjeta. También con el proxmark3. Pero lo más fácil, si tenemos un móvil Android que soporte NFC, es instalarnos la aplicación Mifare Classic Tool.
En esta aplicación, lo primero que hay que hacer es ir a la opción de Editar/Analizar Archivo de claves, crear un nuevo fichero, y añadir la clave que acabamos de averiguar.
Después podemos ir a la opción de “Leer Etiqueta”, colocamos la tarjeta cerca de donde está la antena NFC de nuestro móvil, seleccionamos el fichero de claves que acabamos de crear, y le damos a leer. El resultado debería ser algo así:
En este caso, sólo tienen datos
el sector 8, 11 y 15. Lo que contiene esta memoria lo desconocemos. En algún
sitio estará el saldo, en algún sitio puede haber alguna fecha… Averiguarlo
implica hacer un análisis exhaustivo de los datos, jugar con los bits,
desplazamientos… y sobre todo, hacer gastos con la tarjeta, apuntar el saldo
que queda, fecha y hora, y volver a hacer volcados de la memoria.
En estos detalles no voy a
entrar, pero ¿que se puede? Se puede.
Hasta aquí la entrada de hoy, porque ya me he extendido mucho más de lo que me gustaría. Si te ha parecido interesante el tema, te gustaría leer algo más exhaustivo sobre las posibilidades del Proxmark3, o tienes cualquier otro tema en mente que te inquieta, POR FAVOR, ME ENCANTARÍA QUE ME PROPONGAS EN COMENTARIOS TEMAS QUE TE GUSTARÍA QUE DESARROLLE.