Un Fantasma en el Sistema Ghost AcademySecLearn // RFID & NFC Pentesting
Módulo 4 Duración: 8 Horas 85% Práctica Técnica Criptoanálisis Crypto-1

Alta Frecuencia (HF 13.56 MHz) — El Ecosistema MIFARE

El núcleo de la auditoría física: mapa de memoria, Value Blocks y condiciones de acceso, ataques de diccionario, vulnerabilidad Darkside del PRNG, ataques Nested y Hardnested y autopwn total.

🎯 Objetivo Operativo del Módulo:

Desmontar matemáticamente el cifrado propietario Crypto-1 de NXP. Extraer las claves secretas Key A y Key B de los 16 sectores de cualquier tarjeta MIFARE Classic 1K/4K y volcar el 100% de la memoria para clonación en Magic Cards.

🔧 ¿Ya tienes el hardware? Pruébalo en Proxmark3 Web Studio Interfaz web independiente (Web Serial API) para ejecutar estos comandos contra tu Proxmark3 real desde el navegador — no requiere instalar nada.

📑 Índice de Contenidos del Módulo

  1. Mapa de Memoria de MIFARE Classic 1K / 4K
    • Organización en sectores, bloques de datos, Value Blocks y Sector Trailer
    • Access Bits (C1, C2, C3) y cálculo de permisos
    • Lab 4.1: Decodificación e inspección hexadecimal de volcados (.bin y .mct)
  2. Ataques de Claves por Defecto y Diccionario
    • Diccionarios de claves de fábrica de fabricantes de lectores
    • Auditorías exprés con Mifare Classic Tool (MCT) en Android
    • Lab 4.2: Auditoría masiva de sectores semiprotegidos (hf mf chk --dump)
  3. Ataque Darkside (Courtois 2009) y PRNG Débil
    • Fuga de información en los bits de paridad en respuestas NACK cifradas
    • Obtención de la primera clave cuando se desconocen todas
    • Lab 4.3: Crackeo de la primera clave con mfcuk y hf mf darkside
  4. Ataques Nested y Hardnested
    • Salto de sector a sector midiendo distancia de nonces criptográficos
    • Tarjetas MIFARE Hardened y aceleración por GPU
    • Lab 4.4: Ejecución de Autopwn completo (hf mf autopwn) y volcado 100%

1. Mapa de Memoria de MIFARE Classic 1K / 4K

Una tarjeta MIFARE Classic 1K contiene 1024 bytes de memoria EEPROM estructurados en 16 sectores independientes (Sectores 0 a 15). Cada sector cuenta con 4 bloques de 16 bytes (64 bloques en total, numerados del 0 al 63).

┌────────────────────────────────────────────────────────────────────────────────────────┐ │ MAPA DE MEMORIA DE MIFARE CLASSIC 1K │ ├────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ SECTOR 0: │ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │ │ Bloque 0: [ UID (4B) ] [ BCC ] [ SAK/ATQA ] [ Datos Fabricante NXP (Inmutable) ] │ │ │ │ Bloque 1: [ Bloque de Datos de Usuario o Bloque de Valor (16 Bytes) ] │ │ │ │ Bloque 2: [ Bloque de Datos de Usuario o Bloque de Valor (16 Bytes) ] │ │ │ │ Bloque 3: [ KEY A (6B) ] [ ACCESS BITS (4B) ] [ User Byte ] [ KEY B (6B) ] │ │ <- Sector Trailer │ └──────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ SECTOR 1 a SECTOR 15 (Estructura idéntica): │ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │ │ Bloque 0: [ Bloque de Datos / Valor (16 Bytes) ] │ │ │ │ Bloque 1: [ Bloque de Datos / Valor (16 Bytes) ] │ │ │ │ Bloque 2: [ Bloque de Datos / Valor (16 Bytes) ] │ │ │ │ Bloque 3: [ KEY A (6B) ] [ ACCESS BITS (4B) ] [ User Byte ] [ KEY B (6B) ] │ │ <- Sector Trailer │ └──────────────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────────────┘

🎯 Objetivos de Aprendizaje

  • Entender el mapa de memoria: 16 sectores con 4 bloques de 16 bytes cada uno.
  • Interpretar los Access Bits (condiciones de lectura/escritura) y calcularlos sin bloquear la tarjeta.
  • Comprender cómo funcionan los bloques de saldo monetario (Value Blocks con redundancia invertida).

🔑 Conceptos Clave

Sector Trailer Clave Key A y Key B Access Bits (C1, C2, C3) Value Block Architecture

🧰 Herramientas de este Laboratorio

Mifare Classic Tool (MCT en Android) Proxmark3 Calculadora de Access Bits

1.1 Anatomía del Bloque de Valor (Value Block)

Para aplicaciones de monedero electrónico (cafeterías, lavanderías, máquinas de vending), MIFARE define una estructura especial con detección de errores y operaciones atómicas de INCREMENT, DECREMENT y RESTORE:

┌────────────────────────────────────────────────────────────────────────────────────────┐ │ ESTRUCTURA DE UN VALUE BLOCK (16 BYTES) │ ├────────────────────────────────────────────────────────────────────────────────────────┤ │ Bytes 0-3: Valor con signo en complemento a 2 (Little Endian): [ v ] │ │ Bytes 4-7: Inversión bit a bit del valor (NOT bitwise): [ ~v ] │ │ Bytes 8-11: Copia exacta de respaldo del valor: [ v ] │ │ Byte 12: Dirección del bloque de almacenamiento: [ adr ] │ │ Byte 13: Inversión bit a bit de la dirección: [ ~adr ] │ │ Byte 14: Copia de la dirección: [ adr ] │ │ Byte 15: Inversión bit a bit de la dirección: [ ~adr ] │ │ │ │ Ejemplo para un saldo de 25.00 € (2500 céntimos = 0x000009C4) en bloque 4: │ │ v = C4 09 00 00 │ │ ~v = 3B F6 FF FF │ │ adr = 04 FB 04 FB │ │ Bloque 4 = C4 09 00 00 3B F6 FF FF C4 09 00 00 04 FB 04 FB │ └────────────────────────────────────────────────────────────────────────────────────────┘

1.2 Decodificación de los Access Bits (Bytes 6, 7 y 8 del Trailer)

Los 3 bits de control C1, C2, C3 determinan si los bloques de datos y el propio sector trailer pueden leerse o escribirse con la Key A o la Key B. Por diseño de seguridad de NXP, la Key A nunca puede leerse: si se lee el Sector Trailer, el lector siempre recibirá ceros (00 00 00 00 00 00) en los primeros 6 bytes.

🛠️ Lab 4.1: Decodificación e Inspección Hexadecimal de Volcados (.bin / .mct)
Forense Hexadecimal
1
Inspección del archivo binario con hexdump:
# Inspeccionar el bloque 0 y los trailers del volcado tarjeta.bin (1024 bytes)
hexdump -C tarjeta.bin | head -n 8

00000000  a4 1b 89 22 14 08 04 00  01 02 03 04 05 06 07 08  |..."............| <- Bloque 0
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  a0 a1 a2 a3 a4 a5 ff 07  80 69 b0 b1 b2 b3 b4 b5  |.......i........| <- Trailer S0

En el offset 0x30 (Sector Trailer 0):

  • Key A: A0 A1 A2 A3 A4 A5
  • Access Bits: FF 07 80 69 (Condición de transporte: lectura y escritura abierta)
  • Key B: B0 B1 B2 B3 B4 B5
✅ Resultado Esperado

Mapeo completo de qué bloques son modificables y cuáles están protegidos.

2. Ataques de Claves por Defecto y Diccionario

Más del 60% de las instalaciones comerciales de control de accesos nunca cambian las claves de fábrica en todos los sectores, o emplean diccionarios estandarizados por integradores.

🎯 Objetivos de Aprendizaje

  • Auditar un lote de tarjetas contra las 5.000 claves más comunes en instalaciones reales.
  • Identificar si una instalación ha cambiado solo la Key A y dejado la Key B por defecto.
  • Utilizar Mifare Classic Tool en smartphone para auditorías rápidas.

🔑 Conceptos Clave

Diccionarios de claves comunes Key A vs Key B privileges Transport keys

🧰 Herramientas de este Laboratorio

MCT (Android) Proxmark3 con default_keys.dic
🛠️ Lab 4.2: Auditoría Masiva de Sectores Semiprotegidos
Ataque de Diccionario

Meta del Lab: Ejecutar una prueba masiva con el diccionario de 1000 claves en Proxmark3 y volcar todos los sectores accesibles.

1
[usb] pm3 --> hf mf chk --dump

[+] Testing 16 sectors using default keys dictionary...
[+] Sector 00 | Key A: FFFFFFFFFFFF | Key B: FFFFFFFFFFFF
[+] Sector 01 | Key A: A0A1A2A3A4A5 | Key B: B0B1B2B3B4B5
[+] Sector 02 | Key A: D3F7D3F7D3F7 | Key B: [UNKNOWN]
[+] Sector 03 | Key A: [UNKNOWN]    | Key B: [UNKNOWN]  <- Sector bloqueado
...
[+] Found 28 of 32 keys. Dump saved to hf-mf-A41B8922-dump.bin

Con solo tener una sola clave de cualquier sector, podemos saltar a los sectores desconocidos mediante el ataque Nested.

✅ Resultado Esperado

Recuperación de al menos un 50-80% de los sectores en sistemas mal configurados.

3. Ataque Darkside (Courtois 2009) y PRNG Débil

¿Qué ocurre si la tarjeta tiene todas las claves cambiadas y desconocidas? En 2009, el criptógrafo Nicolas T. Courtois descubrió el ataque Darkside.

Cuando un lector envía una clave errónea en una autenticación MIFARE, la tarjeta responde con un código NACK cifrado de 4 bits. Sin embargo, debido a un fallo de diseño en la función de paridad del algoritmo Crypto-1, el bit de paridad se calcula antes de cifrar. Al enviar miles de consultas con tiempos de reloj cuidadosamente calculados, la tarjeta filtra bits del estado interno del generador pseudoaleatorio (LFSR de 48 bits), permitiendo resolver la primera clave secreta en menos de 3 minutos.

🎯 Objetivos de Aprendizaje

  • Comprender la debilidad del generador de números pseudoaleatorios (PRNG) de NXP.
  • Ejecutar el ataque Darkside para extraer el primer vector de autenticación.
  • Aprender por qué las tarjetas modernas con "Hardened PRNG" resisten el Darkside.

🔑 Conceptos Clave

Parity bits side-channel NACK leakage Linear Feedback Shift Register (LFSR) Crypto-1 state recovery

🧰 Herramientas de este Laboratorio

mfcuk (MiFare Classic Universal toolKit) Proxmark3 CLI
🛠️ Lab 4.3: Crackeo de la Primera Clave con Darkside
Criptoanálisis Darkside
1
[usb] pm3 --> hf mf darkside

[+] Card has weak PRNG! Starting Darkside attack against Sector 0 Key A...
[+] Gathering parity leaks from NACK frames...
[#] Nonce: 7f81ab12 | Parity: 1
[#] Nonce: 7f81ab14 | Parity: 0
[+] Candidate state found after 412 queries!
[+] Valid Key Found for Sector 0 Key A: 4B1299A0CF21
[+] Time elapsed: 1 minute 42 seconds.
✅ Resultado Esperado

Descubrimiento de Key A = A0 B1 C2 D3 E4 F5.

4. Ataques Nested y Hardnested

Una vez recuperada al menos una clave válida (mediante diccionario o Darkside), el ataque Nested aprovecha que el PRNG de MIFARE Classic no es verdaderamente aleatorio, sino una función determinista basada en el tiempo transcurrido desde el reset ($n_T$). Al autenticarse en el sector conocido y solicitar una segunda autenticación en el sector objetivo, la distancia temporal entre nonces revela la clave en milisegundos.

🎯 Objetivos de Aprendizaje

  • Entender el ataque Nested clásico para tarjetas con PRNG predecible.
  • Ejecutar el ataque Hardnested (Carlo Meijer 2015) para tarjetas con PRNG parcheado.
  • Acelerar el crackeo mediante tablas precomputadas o GPU.

🔑 Conceptos Clave

Nested attack Hardnested attack State collapse Crapto1 library

🧰 Herramientas de este Laboratorio

mfoc (Mifare Flawed Offline Cracker) Proxmark3 autopwn Chameleon Ultra
🛠️ Lab 4.4: Ejecución del Flujo Completo Autopwn (hf mf autopwn)
Pipeline Total

Meta del Lab: Ejecutar el pipeline autónomo que selecciona inteligentemente Chk -> Darkside -> Nested -> Hardnested hasta volcar el 100% de la tarjeta.

1
[usb] pm3 --> hf mf autopwn

[+] Phase 1: Checking default keys dictionary... (22 keys found)
[+] Phase 2: Starting Nested attack for remaining 10 keys...
[+] Nested: Sector 3 Key A found: 1A2B3C4D5E6F
[+] Nested: Sector 3 Key B found: 998877665544
...
[+] All 32 keys retrieved successfully! (100% dump)
[+] Saving complete card memory to dump.bin and dump.json...
[+] Card is fully cracked and ready for cloning.
✅ Resultado Esperado

Obtención de todas las claves Key A y Key B y generación del archivo .bin íntegro.