En este post vamos, por fin, a poder obtener las claves de un tag Mifare Classic para posteriormente leer el contenido, escribir… Para ello, partimos de la base que ya tenemos las librerías instaladas tal y como dijimos en el anterior post, y que detectamos el lector (si tenéis problemas con esto, decidlo en los comentarios).
Vamos ahora a instalar las herramientas que necesitaremos. La primera de ellas se llama mfcuk e implementa el ataque llamado “darkside” descrito en http://eprint.iacr.org/2009/137.pdf. Este ataque aprovecha la poca entropía que se utiliza en el cifrado Crypto-1 para obtener mediante fuerza bruta la clave de un sector.
svn checkout http://mfcuk.googlecode.com/svn/trunk/ mfcuk-read-only (para la versión 1.3.4 de libnfc, svn checkout http://mfcuk.googlecode.com/svn/trunk/ mfcuk -r r37) cd mfcuk-read-only autoreconf -vis ./configure make sudo make install
Una vez instalado, lo ejecutamos con la orden:
mfcuk_keyrecovery_darkside -C -v 2 -R 3:A -M 8 -C Para realizar la conexión -v 2 Modo very verbose -R 3:A Recuperar la clave A del sector 3 -M 8 Tipo de tag Mifare Classic 1K
Obtenemos el siguiente resultado:
Donde vemos que ha encontrado la clave A del sector 3. Este ataque, según los creadores dura unos 5 minutos, pero en mis pruebas no ha bajado de 20. Como veis, obtener las 30 claves (en el caso que sean todas diferentes) nos podría llevar demasiado tiempo. Ahora vamos a utilizar el programa mfoc para obtener todas las demás claves. Mfoc utiliza el llamado “Nested-Authentication attack” que se basa en el conocimiento de una clave para atacar a los sectores restantes. Su instalación es la siguiente:
wget http://micmd.googlecode.com/files/mfoc-new.tar cd mfoc autoreconf -vis ./configure make sudo make install
Para usar la clave que hemos obtenido anteriormente hay que volver a compilar el archivo mfoc.c que está en ./mfoc/src/mfoc.c y buscar el vector de claves por defecto:
Solo hay que añadir la clave siguiendo el mismo patrón. Luego hacemos un:
gcc mfoc.c -o mfoc
y ya lo tenemos a punto.
La ejecución del programa, yo la he hecho de la siguiente forma:
mfoc -P 100 -O salida.mdf -P 100 Reintentos -O Archivo de salida
Veremos algo como esto:
Esta parte todavía no es el ataque; aquí mfoc está comprobando si las claves que tiene por defecto funcionan con algún sector. Primero hace una pasada probando las claves A. Como se deduce, la clave a884…. es la clave A del sector 0. Después de esto, empezará el ataque donde irá obteniendo las claves una a una. En el caso de que las obtenga todas en las 100 repeticiones, hará el volcado del tag en el archivo salida.mdf. Sí no, yo recomiendo apuntar las claves e ir introduciéndolas en el archivo mfoc.c.
Por último, una vez tengamos todas las claves podemos crearnos con un editor hexadecimal un archivo llamado keys.mdf. Este archivo lo podemos crear a partir del salida.mdf poniendo todo a ceros excepto los sectores tráiler de cada bloque. Con este archivo keys.mdf ya podemos operar con el tag con las funciones de la librería libnfc:
nfc-mfclassic w a contenido_nuevo.mdf keys.mdf w Escritura a Clave A contenido_nuevo.mdf Archivo de entrada keys.mdf Archivo con las claves
Con esta última orden hemos escrito un tag Mifare Classic con un contenido modificado, con lo que termina esta entrada y de momento (por mi parte) las entradas sobre seguridad en Mifare Classic. Si algún lector intenta llevar a cabo lo aquí explicado y tiene problemas, estaré encantado de ayudarle en los comentarios.
Muy buena entrada David, ¡felicidades!. Espero con ganas la próxima entrada ;). Ahora me voy a coger el metro :P.
no lo pongais tan facil!!!no !! es un error !!!
esas keys se de dnd son perfectamente !!!
aqui una pista……..http://twitter.com/Securityartwork
dudux, toda la información aquí mostrada puede ser obtenida de diferentes recursos de Internet. No estamos hablando de un 0-day ni ninguna técnica de ataque oculta.
Hola ante todo ,disculpas por la intrusion tan descarada… xD
Estoy totalmente de acuerdo,que no es nada oculto ni ningun 0day,hubiera sido mas interesante esa info que esta,lo que si se que no hay howtos para que cualquiera pueda comprometer todo un nuevo sistema instaraudo en “tu” ciudad,de entidades gubernamentales y tan cotidianas como son estas…… Si mifare 1k classic está roto desde hace años,y casi te diria que DesFire tambien,pero lo bueno es que no se publica a todos los vientos que soplan..
No me voy a enrollar,veo que cualquiera puede “destruir” estas bases,se que es muy facil,lo se de hace tiempo,pero no será de mi boca pregonarlo.Para que “párasitos” se aprovechen de mis investigaciones.
Un saludo,atentamente
Hola,
En estos posts se habla de la tarjeta Mifare que está ampliamente utilizada pero no se hace mención a otras tarjetas como las ATMEL con cryptorf…
Parece ser que pocas tarjetas se salvan de al quema….
Cuando compilo mfcuk me da error, no entiendo porqhttp://paste2.org/p/1009703
Perdon, se me corto el comentario. Decia que no entiendo el error ya que puedo detectar el reader y la tarjeta conectada.
Alguien me puede ayudar ? Este es el log de compilación: http://paste2.org/p/1009703
Tengo un problema, no me detecta el lector…no se si es que no tengo bien instalados los drivers para el lector USB…
root@repsaj-latitude:~/mfcuk/mfcuk-read-only# make
make all-recursive
make[1]: Entering directory `/root/mfcuk/mfcuk-read-only’
Making all in src
make[2]: Entering directory `/root/mfcuk/mfcuk-read-only/src’
CC crapto1.o
CC crypto1.o
CC mfcuk_finger.o
CC mfcuk_keyrecovery_darkside.o
mfcuk_keyrecovery_darkside.c: In function ‘mfcuk_darkside_select_tag’:
mfcuk_keyrecovery_darkside.c:894: error: ‘NM_ISO14443A_106’ undeclared (first use in this function)
mfcuk_keyrecovery_darkside.c:894: error: (Each undeclared identifier is reported only once
mfcuk_keyrecovery_darkside.c:894: error: for each function it appears in.)
mfcuk_keyrecovery_darkside.c:894: warning: passing argument 5 of ‘nfc_initiator_select_passive_target’ from incompatible pointer type
/usr/local/include/nfc/nfc.h:71: note: expected ‘struct nfc_target_t *’ but argument is of type ‘union nfc_target_info_t *’
mfcuk_keyrecovery_darkside.c: In function ‘main’:
mfcuk_keyrecovery_darkside.c:1639: error: ‘NM_ISO14443A_106’ undeclared (first use in this function)
mfcuk_keyrecovery_darkside.c:1639: warning: passing argument 5 of ‘nfc_initiator_select_passive_target’ from incompatible pointer type
/usr/local/include/nfc/nfc.h:71: note: expected ‘struct nfc_target_t *’ but argument is of type ‘union nfc_target_info_t *’
mfcuk_keyrecovery_darkside.c:988: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
make[2]: *** [mfcuk_keyrecovery_darkside.o] Error 1
make[2]: Leaving directory `/root/mfcuk/mfcuk-read-only/src’
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/mfcuk/mfcuk-read-only’
make: *** [all] Error 2
I downloaded mfcuk. I did ‘cd mfcuk-read-only’, ‘autoreconf -vis’ and ‘./configure’. Now as you see the command ‘make’ doesn’t work.
I’m sorry RepsaJ, we don’t offer technical support. I’m sure there are some discussion forums that can provide you with help on this subject.
Thanks.
Tambien tengo el mismo problema que RepsaJ, he intentado tambien con mfoc pero me da un error tambien relacionado con las sentencias que incluyen NM_14443A_106. Tengo la ultima version de libnfc pero he visto que en nfc-types.h no se llama NM_14443A_106 sino NMT_14443A. Al cambiarlo sale de nuevo el mismo error. Deberia tener otra version mas antigua de libnfc?
I also had the same compilation problem than RepsaJ, I was using libnfc-1.4.0 , I did came back to 1.3.9 and it worked.
Thanks Ivan!!!I’ve almost gone crazy with this!
Estoy intentando hacer pruebas con mi lector Touchatag, va todo bien pero al apagar el ordenador se ve que me ha dejado instalado el driver antiguo y tengo el lector en un estado bloqueado, necesitaria poder eliminarlo. ¿Alguien se ha visto en la misma situación?
En vez de utilizar mfcuk y mfoc, no serviria mejor el programa RFdump, Si no es asi me podrias explicar la diferencia? y cual seria el mejor metodo para realizar el ataque ?
en google code solo aparece los reader de los codigos pero no para poder bajar el MFCUK como archivo comprimido, he visto que la mayoria de post son sobre el problema del mfcuk, sera que ud nos puede ayudar a publicar en un servidor gratuito el programa comprimido (tar.gz o zip o cualquiera ) porfavor
hola qusiera saber si sirve unicamente el touchatag o puede servir este Modulo Rfid Lector-escritor Mifare Iso14443 13.56 Mhz Modulo RFID Lector-Escritor Mifare ISO14443 13.56 MHz
Modulo nuevo para evaluación, demostración y desarrollo de aplicaciones en RFID mediante estándar ISO14443 Mifare
Marca: ACG
Características:
-Frecuencia Transmisión 13.56 MHz
-Lectura y Escritura normas estándar: ISO14443A
-Distancia de Lectura / Escritura hasta 8 cm
-Antena integrada interna
-Conexión RS232 y RS422
-Velocidad de Comunicación variable entre 9,600 a 57,600 baudios
-Salida para LED de prendido / apagado
-Salida para LED TX/RX
-Reducido tamaño 7 cm X 12 cm
-Alimentación 5 VDC, 150 mA.
-Incluye software demostrativo y protocolos para desarrollar aplicaciones.
Hola, se puede hacer algo parecido a esto con el Samsung Galaxy S?
hola ya he instalado todo me que dificil donde le meto la clve al mfoc en q linea y como se donde le cambio los numeros me podrian ayudar gracias .ubuntu 11.04
// Array with default Mifare Classic keys
byte_t defaultKeys[][6] = {
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, // User defined key slot
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, // Default key (first key used by program if no user defined key)
{0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5}, // NFCForum MAD key
{0xd3, 0xf7, 0xd3, 0xf7, 0xd3, 0xf7}, // NFCForum content key
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // Blank key
{0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5},
{0x4d, 0x3a, 0x99, 0xc3, 0x51, 0xdd},
{0x1a, 0x98, 0x2c, 0x7e, 0x45, 0x9a},
{0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff},
{0x71, 0x4c, 0x5c, 0x88, 0x6e, 0x97},
{0x58, 0x7e, 0xe5, 0xf9, 0x35, 0x0f},
{0xa0, 0x47, 0x8c, 0xc3, 0x90, 0x91},
{0x53, 0x3c, 0xb6, 0xc7, 0x23, 0xf6},
{0x8f, 0xd0, 0xa4, 0xf2, 0x56, 0xe9}
};esto es lo q aparece en mfoc dende le meto la clave
la clave qa es la misma en los 15 sectores es una tarjeta de transporte publico ,nesesito ayuda para cargar tickets gracias
Error al hacer make del mfcuk tengo la ultima version del libnfc 1.5.0 y la ultima de mfcuk la revision 49 y nada…
root@lab:/home/codename/Descargas/mfcuk-read-only2# make && make install
make all-recursive
make[1]: se ingresa al directorio «/home/codename/Descargas/mfcuk-read-only2»
Making all in src
make[2]: se ingresa al directorio «/home/codename/Descargas/mfcuk-read-only2/src»
CC nfc-utils.o
nfc-utils.c: In function ‘parse_device_desc’:
nfc-utils.c:213:13: error: ‘nfc_device_desc_t’ has no member named ‘pcPort’
nfc-utils.c:214:20: error: ‘nfc_device_desc_t’ has no member named ‘pcPort’
make[2]: *** [nfc-utils.o] Error 1
make[2]: se sale del directorio «/home/codename/Descargas/mfcuk-read-only2/src»
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio «/home/codename/Descargas/mfcuk-read-only2»
make: *** [all] Error 2
root@lab:/home/codename/Descargas/mfcuk-read-only2#
hola, al instalar el mfcuk me da el sigiente error:
svn: El servidor envió un valor de devolución inesperado (400 Bad request. Method Unknown) en respuesta al requerimiento REPORT para «/svn/!svn/vcc/defau
Gracias..
estava intentando usar meo galaxy s4 sera que e possibel usarlo para desencriptar cartão mifare
Hola, quisiera saber si este metodo funciona con las mifare 4k ?
Buenas, me gustaria compartir mi experiencia con vosotros. Me compre este lector y estuve haciendo pruebas con varias versiones de la nfclib, mfcuk y mfoc, y logre sacar las claves de una tarjeta que tenia. Usando el mfcuk primero y el mfoc depsues y todo perfecto, pero le pedi a un amigo una tarjeta similiar que el tiene y resulta que el mfcuk se puede tirar dias si quiere con la tarjeta y no resuelve nada, los datos de ns y auth siempre son los mismos. Por otro lado el mfoc me encuentra 5 sectores con claves por defecto pero no logra tampoco sacar nunguna clave oculta aunque pase mucho tiempo. Sabeis algo al respecto, hay tarjetas 1k 50 incrakeables ? es raro, por que en el mismo entorno me funciona con una tarjeta y la otra no, siendo las dos tarjetas de la misma empresa y utilidad.
Hola, esta muy bueno, bueno mi intención con esto es modificar el saldo de transporte publico de una tarjeta mifare classic 1k, he mirado muchos comentarios de que les presenta errores, espero que me salga todo bien, la verdad no entiendo muy bien el procedimento, no se ni donde va el codigo, pero bueno no me voy a rendir, aun no he comprado el lector, voy a comprar el acr122u que aparece en ebay y pues aun tengo que esperar como 2 dias para vincular mi tarjeta credito y hacer el pago por paypal… luego de como 2 semanas para que me llegue desde hong kong…. Quisiera contar con toda su colaboracion para que este proyecto marche bien… Gracias… comentare nuevamente cuando tenga el acr122u en mis manos… bye…
Hola, mi correo es: eduarxj32@live.com ya tengo el lector/escritor acr122 pero no entiendo que hacer, gracas, me podrias colaborar por favor