Hacking RFID, rompiendo la seguridad de Mifare (V)

Sabemos que las MIFARE Classic están totalmente rotas, como hemos podido comprobar en los posts anteriores de esta saga. Las claves de lectura y escritura de las zonas de memoria son fácilmente recuperables. Ahora nos queda enfrentarnos al último bastión de las tarjetas: el Unique Identification Number (UID).

En el Sector 0 Block 0 de la tarjeta, conocido como el Manufacturer Block es donde podemos encontrar almacenado el identificador único de la tarjeta o UID.

Ese UID es el número de serie de las MIFARE. Cada tarjeta tiene el suyo propio, consta de 4 bytes, y en principio es de sólo lectura.

Por eso las implementaciones que aún se basan en las MIFARE Classic confían en ese número para identificar los usuarios. Podemos fácilmente encontrar sistemas de ese estilo en puertas de acceso y en parkings por ejemplo.

Desde hace una temporada salieron a la venta unas tarjetas MIFARE “especiales” cuyos fabricantes proclaman que tienen el UID intercambiable. Por eso nos hicimos con algunas para probar si cumplen perfectamente con su cometido.

El material que usamos fue el siguiente:

  • Tarjetas “especiales” que conseguimos de fabricantes chinos. Vienen sin serigrafía y totalmente blancas.

El funcionamiento se basa en unas instrucciones que actúan como un Backdoor instalado en las tarjetas por el fabricante. Una vez activado, permite leer y escribir todas las zonas sin disponer de las claves, incluyendo el bloque 0 del sector 0 donde va el UID.

Las últimas versiones de libnfc implementan estas features. Se agregó la herramienta nfc-mfsetuid.

amin@Skynet:~$ nfc-mfsetuid -h 
Usage: nfc-mfsetuid [OPTIONS] [UID] 
Options: 
	-h	Help. Print this message. 
	-f	Format. Delete all data (set to 0xFF) and reset ACLs to default. 
	-q	Quiet mode. Suppress output of READER and CARD data (improves timing). 

	Specify UID (4 HEX bytes) to set UID, or leave blank for default '01234567'. 
	This utility can be used to recover cards that have been damaged by writing bad 
	data (e.g. wrong BCC), thus making them non-selectable by most tools/readers. 

	*** Note: this utility only works with special Mifare 1K cards (Chinese clones). 

Veamos la UID que tiene la tarjeta:

amin@Skynet:~$ nfc-list 
nfc-list uses libnfc 1.7.0 
NFC device:     / CCID USB Reader opened 
1 ISO14443A passive target(s) found: 
ISO/IEC 14443A (106 kbps) target: 
    ATQA (SENS_RES): 00  04  
       UID (NFCID1): 01  23  45  67  
      SAK (SEL_RES): 08  

Ahora tenemos el UID ’01 23 45 67′ y vamos a actualizarlo a ‘CA FE 13 37’:

amin@Skynet:~$ nfc-mfsetuid cafe1337 
NFC reader:     / CCID USB Reader opened 
Sent bits:     26 (7 bits) 
Received bits: 04  00  
Sent bits:     93  20  
Received bits: 01  23  45  67  00  
Sent bits:     93  70  01  23  45  67  00  d0  6f  
Received bits: 08  b6  dd  

Found tag with 
 UID: 01234567 
ATQA: 0004 
 SAK: 08 

Sent bits:     50  00  57  cd  
Sent bits:     40 (7 bits) 
Received bits: a (4 bits) 
Sent bits:     43  
Received bits: 0a  
Sent bits:     a0  00  5f  b1  
Received bits: 0a  
Sent bits:     ca  fe  13  37  10  08  04  00  46  59  25  58  49  10  23  02  9f  13  
Received bits: 0a  

Verificamos que se ha efectuado de manera correcta:

metalamin@Skynet-mini:~$ sudo nfc-list 
nfc-list uses libnfc 1.7.0 
NFC device:     / CCID USB Reader opened 
1 ISO14443A passive target(s) found: 
ISO/IEC 14443A (106 kbps) target: 
    ATQA (SENS_RES): 00  04  
       UID (NFCID1): ca  fe  13  37  
      SAK (SEL_RES): 08

Vemos que ahora disponemos de una MIFARE con el UID ‘CAFE 1337’

Por otra parte estas tarjetas nos brindan la posibilidad de resetearlas o de escribir sin necesidad de saber las claves. Muy útil en los casos en los que nos hemos olvidado de las contraseñas o la hemos liado con los ACL que en otros caso dejarían los sectores inutilizables.

Finalmente, cabe destacar que están apareciendo dispositivos portátiles dedicados al clonado de UID’s. Fácil, sencillo y para toda la familia.

Comments

  1. Gracias por la info, muy interesante :)

  2. Gracias por el post.

  3. no entiendo mucho del tema, pero veo que este tipo de tarjeta segun el comentario es facil de clonar, estoy buscando la forma de hacer una licencia de conducir con un buen nivel de seguridad y a un costo muy bajo

  4. Algun email donde me pueda contactar con el Autor de la Entrada. Saludos.

  5. Es fácil aumentar el números de viajes en una tergeta de transmilenio lo puedo hacer con mi pc

  6. hola, disculpa no entiendo muy bien el tema pero estoy dispuesto a hacer como sea para lograr modificar el saldo de una tarjeta de transporte publico, hay alguna forma de contactarnos para que me puedas colaborar un poco y quisiera saber a la fecha actual cual seria el lector optimo para el procedimiento… estoy pensando en comprar el acr122u por ebay… Gracias estare atento… mi correo es: e d u a r x j 3 2 @ l i v e . c o m
    (todo pegado) gracias