Hacking RFID: Descifrando las tarjetas MIFARE Classic 1K y modificando su saldo
¿Alguna vez te has preguntado si las tarjetas de transporte que utilizas a diario son seguras?
Durante años, la tecnología RFID ha sido el estándar para controles de acceso, pagos rápidos y transporte público. Sin embargo, lo que para el usuario es un simple “tocar y pasar”, a nivel técnico esconde implementaciones que, a día de hoy, están completamente rotas.
En este post, vamos a analizar la tecnología NFC, destripar el funcionamiento de las tarjetas MIFARE Classic 1K, explotar sus vulnerabilidades criptográficas y, como Prueba de Concepto (PoC), veremos cómo es posible clonar y alterar el saldo de una tarjeta de transporte real.
¿Cómo funciona NFC?
NFC (Near Field Communication) es una tecnología inalámbrica que opera de forma libre en la banda de los 13.56 MHz (no requiere licencia para operar). Su punto fuerte no es la transferencia de grandes cantidades de datos, sino la inmediatez y facilidad de uso a distancias muy cortas.
Existen dos tipos de dispositivos en esta comunicación:
- Activo (El lector): Genera el campo electromagnético.
- Pasivo (La tarjeta): Al entrar en el radio de acción, su circuito electrónico se excita gracias a la inducción electromagnética del dispositivo activo y entra en funcionamiento, permitiendo el intercambio de datos.
Anatomía de la MIFARE Classic 1K
Para entender cómo hackearlas, primero hay que saber cómo guardan la información. Estas tarjetas cuentan con una memoria EEPROM de 1KB (768 bytes útiles) estructurada de la siguiente manera:
- 16 Sectores independientes.
- Cada sector tiene 4 bloques de 16 bytes cada uno.
El Bloque 3 de cada sector es crítico, se le conoce como Sector Trailer. En él se almacena la seguridad del sector:
- Key A (Bytes 0 a 5)
- Bits de Acceso (Bytes 6 a 9)
- Key B (Bytes 10 a 15)
Las claves están en formato hexadecimal. Si conocemos estas claves, los bits de acceso nos dirán qué operaciones (leer, escribir, incrementar, decrementar) podemos hacer en los bloques de datos de ese sector.
💡 Tip: Por pereza de los integradores, es muy habitual que las tarjetas utilicen claves A y B por defecto de fábrica. Esto permite que un simple ataque de diccionario (probando valores como
FFFFFFFFFFFFo000000000000) nos dé acceso a los datos.
El algoritmo CRYPTO1 y sus vulnerabilidades
La comunicación entre el lector y la tarjeta sigue la norma ISO 14443. Para proteger los datos, NXP Semiconductors implementó un algoritmo de cifrado propietario llamado CRYPTO1.
La seguridad por oscuridad nunca es buena idea, y desde 2008 este algoritmo ha sido sometido a ingeniería inversa, revelando fallos críticos:
- Espacio de clave pequeño: Las claves son de solo 48 bits. Con el hardware actual, un ataque de fuerza bruta es factible en un tiempo razonable.
- Generador pseudoaleatorio predecible (PRNG): El nonce (número aleatorio) que envía la tarjeta al lector depende de los ciclos de reloj desde que se activó la tarjeta. Es decir, no es aleatorio, es predecible.
Estas debilidades abren la puerta a varias metodologías de ataque probadas:
- Nested Attack: Si conocemos al menos una clave válida de un sector (por ejemplo, por defecto), nos autenticamos. Al pedir autenticación para otro sector, la tarjeta responde con un nonce predecible. Midiendo la diferencia en el estado del registro de desplazamiento (LFSR), podemos deducir el keystream y obtener el resto de claves.
- Hardnested Attack: Variante para tarjetas más modernas que parchean el generador de números pseudoaleatorios. Requiere recopilar entre 2.000 y 4.000 nonces para hacer fuerza bruta offline.
- Darkside Attack: Útil cuando no conocemos ninguna clave. Se aprovecha de los códigos de error
0x5(NACK) enviados por la tarjeta cuando se introduce una clave incorrecta. Mediante operaciones XOR, se logra extraer la clave.
Caso de Estudio
Una búsqueda rápida en Google de documentos públicos nos revela que organismos oficiales de España han adjudicado suministros recientes de hasta 40.000 tarjetas MIFARE 1K Classic.
Sabiendo que esta tecnología está obsoleta a nivel de seguridad, decidimos realizar una prueba de concepto (PoC) controlada utilizando una tarjeta de un determinado consorcio de transportes con un saldo de 25,00€.
Prueba de Concepto (PoC): Alterando el Saldo
Nuestro objetivo es leer el estado actual de la tarjeta, localizar dónde y cómo se guarda el dinero, y modificarlo.
1. Extracción de Claves (Nested Attack)
Utilizando un lector NFC compatible en Linux y la herramienta mfoc (Mifare Classic Offline Cracker), lanzamos un escaneo.
1
mfoc -O dump.dmp
La herramienta detectó una Key B por defecto en el Sector 11. A partir de esa única llave, mfoc ejecutó un Nested Attack, calculando las claves de los demás sectores y realizando un volcado completo (dump.dmp) de la memoria de la tarjeta.
2. Localizando el Saldo (Android + Mifare Classic Tool)
Con las claves en nuestro poder, pasamos a un móvil Android con NFC y usamos la app Mifare Classic Tool. Al leer la tarjeta, identificamos que los datos cambiantes se encontraban en el Sector 9.
Al revisar el valor en hexadecimal de los bloques, encontramos la secuencia: 88130000.
¿Dónde están los 25€? La aplicación nos permite ver este valor hexadecimal como número entero, dándonos el resultado: 5000.
💡 La Lógica del Saldo: Los desarrolladores de este sistema no guardan el valor directo ni cifrado. Simplemente, el valor entero almacenado en la tarjeta se divide entre 2.
5000 / 2 = 2500-> 25.00 € (2500 céntimos de euro). Una implementación de seguridad lógica muy rudimentaria.
3. Modificando el Saldo (Android + MTools)
Conociendo las claves A y B del Sector 9 y la lógica de almacenamiento, utilizamos la app MTools en Android. Agregamos el sector a la app, introducimos sus claves correspondientes e indicamos los bytes donde se ubica el dinero y el byte de control (un simple checksum).
En la pestaña de saldo, la app nos mostró correctamente los 25€. Procedimos a sobrescribir este valor, estableciendo un nuevo saldo de 250€.
Acercamos la tarjeta al móvil, escribimos los bloques… y al validar de nuevo la tarjeta en la aplicación oficial del consorcio: 250,00 € disponibles. ¡PoC completada con éxito!
Conclusiones
Este experimento práctico nos deja varias lecciones críticas sobre la ciberseguridad en sistemas IoT y RFID:
- Obsolescencia Crítica: CRYPTO1 está totalmente comprometido. Una clave de 48 bits no es obstáculo hoy en día.
- Inseguridad por Oscuridad: Algoritmos cerrados y propietarios no garantizan seguridad a largo plazo frente a ingeniería inversa.
- Hardware Accesible: Ya no se necesitan laboratorios. Con un Flipper Zero, un Proxmark3 o un simple móvil Android, cualquiera con conocimientos básicos puede comprometer estas tarjetas en minutos.
- Debilidad Lógica: Que el saldo dependa de una simple división por dos y un checksum básico (descifrable con XOR) evidencia malas prácticas en el desarrollo del middleware.
- Riesgo de Bricking: Modificar a lo loco los bits de acceso o estropear el checksum puede dejar la tarjeta inservible. Siempre haz un volcado previo de seguridad.
La necesidad de migración tecnológica es urgente. Los sistemas de transporte y pagos deben abandonar MIFARE Classic y transicionar a estándares modernos, verdaderamente seguros y auditados, como MIFARE DESFire.
H4Ppy H4ck1ng!















