Tras introducir el pasado viernes algunos aspectos teóricos relevantes de RFID, en esta segunda parte entraremos en cuestiones prácticas que nos darán resultados muy interesantes.
Comencemos profundizando un poco más en como Mifare realiza el proceso de autenticación. En primera instancia el lector le comunica a la tarjeta que quiere realizar una operación sobre un sector de datos determinado N. El tag o tarjeta en ese momento remite un número aleatorio Nc (Nonce del cliente) de 32 bits a modo de reto, para que sea cifrado con la clave privada compartida previamente. Como respuesta, el lector remite el reto cifrado y un número aleatorio Nr (Nonce del lector) para que el tag lo cifre con la clave privada, generando una trama de 64 bits. En última instancia la tarjeta le envía al lector su reto cifrado. En este momento ambos tienen la certeza de que los dispositivos son legítimos. Destacar que los dos últimos intercambios se realizan ya de forma cifrada, permaneciendo en claro tan solo el envío de la petición de lectura y Nc. La figura de la izquerda ilustra el proceso de handshake.
Este proceso de saludo a 4 bandas es importante ya que de él extraeremos la información necesaria para inferir la clave privada del sector.
Procedamos ahora a realizar una prueba de concepto que nos permitirá, a partir de la captura de la información anterior, inferir la clave privada. Pero, ¿cómo podemos capturar una comunicación real entre un tag y un lector? Aquí es donde juega un papel importante el PROXMARK III. Este dispositivo desarrollado por Jonathan Westhues permite realizar sniffing de varias tecnologías RFID desde baja frecuencia (LF 125 Khz) a alta frecuencia HF (13.56 Mhz) y entre ellas la que nos interesa ISO14443 tipo A sobre la que se basa Mifare. En un principio el PROXMARK III supondría el Hardware sobre el cual se pueden implementar diversas capas físicas y de enlace, de diferentes protocolos, simplemente programando sus integrados con la especificación que se requiera.
Muy bien, pues ya tenemos el dispositivo que nos permitirá capturar el handshake inicial entre la tarjeta y el lector, ahora tan solo nos falta un lector Mifare y una tarjeta. Para el lector, en este caso se ha optado por un Omnikey 5321 que viene con un software de ejemplo que permite la interacción con tags Mifare sin la necesidad de utilizar su API y programarse uno mismo el código. Para la tarjeta se ha utilizado una Mifare classic 4k. La captura de la derecha muestra la maqueta utilizada.
Como se puede ver la antena es casera, realizada a partir de un cable USB y no muy “profesional” pero para lo que nos acontece sobra, consiguiendo incluso sobre los 12500 mV en el test Tune (test que implementado en el firmware del PROXMARK III).
Colocando el sniffer entre la tarjeta y el lector podríamos proceder a realizar una lectura del sector 4, obteniendo la siguiente traza de bytes (véase Gerard de Koning Gans, Jaap-Henk Hoepman, Flavio D. Garcia. A practical Attack on the MIFARE classic. Radboud University Nijmegen 2008):
Es conveniente comentar ciertos aspectos de la captura:
- En primer lugar ETU corresponde con Elementary Time Units, y define el tiempo entre mensajes, donde 1 ETU corresponde con un cuarto del período de bit, que es igual a 1,18 microsegundos.
- SEQ en este caso correspondería con el número de mensaje.
- La trama “2a 69 8d 43 8d” identifica la tarjeta Mifare dentro del rango del lector, este identificador es pregrabado en el sector 0 del tag y no es modificable.
- El byte “60” de la secuencia “07” indicaría a la tarjeta que se pretende trabajar y por tanto autenticar, en un sector determinado, en este caso el sector 01 donde esta albergado el bloque de datos 04 (siguiente byte al “60”) y utilizando para ello la clave A. Si nos encontráramos con un valor “61” se trataría de un intento de autenticación utilizando la clave B del sector.
- El resto de tramas que implican el proceso de autenticación ya han sido comentadas anteriormente (Nc, Nr, Rc, Rr).
Con la información anterior capturada procederemos a inferir la clave privada del sector mediante la aplicación CRAPTO1 de desarrollo anónimo (lógico dado los problemas que tuvo la universidad de Radboud con Philips por su investigación).
Configuramos crapto1 con los parámetros anteriores:
uint32_t uid = 0x2a698b43; uint32_t tag_challenge = 0x3bae032d; uint32_t nr_enc = 0xc494a1d2; uint32_t reader_response = 0x6e968642; uint32_t tag_response = 0x8466059e;
Pasamos a compilar la aplicación:
roberto@hacklab:~/Mifare/crapto-v1.1$ gcc -o post post.c crapto1.c crypto1.c
Y obtenemos por fin la ansiada clave :
roberto@hacklab:~/Mifare/crapto-v1.1$ ./post nt': 7fcf34c3 nt'': 869dbbd5 ks2: 1159b281 ks3: 02fbbe4b Found Key: [85 cc f9 ff ff ff]
Con esta clave privada ya podemos pasar a leer/modificar el contenido de los 4 bloques de datos que componen el sector 01, podríamos por ejemplo, cambiar esta clave privada escribiendo en el bloque de datos trailer o incrementar el valor de nuestro monedero electrónico. Cuidado al realizar esta primera operación, ya que podríamos modificar el tipo de acceso (3 bytes de Acces Conditions) y dejar el sector (todos los bloques de datos que lo componen!) inservible. Para más información sobre estos 3 bytes ojear ISO14443-A, Identification cards – Contactless integrated circuit(s) cards – Proximity cards (2006). Lo más habitual es encontrarse con el resto de sectores protegidos con la misma clave privada, con lo que se podría proceder a realizar un clonado completo de la tarjeta (salvo el UID, auque normalmente no lo comprueban las aplicaciones).
En resumen hemos visto como es posible comprometer la seguridad de este tipo de tecnologías RFID. Como apunte final, alarma la cantidad de empresas y entidades a nivel mundial que utilizan Mifare Classic como sistema de ticketing, monedero electrónico o control de acceso físico. No voy a revelar que organismos lo hacen, pero más de los que os imagináis.
Happy RFIDing!
Estupendo artículo. Una duda, yo siempre he pensado que mas allá de este tipo de bugs criptográficos (interesante como bien dices para tarjetas-monedero) lo realmente interesante es el ‘clonado’ de la UID de la tarjeta, que es básicamente el mecanismo empleado en el 90 % de edificios / parkings con tarjetas RFID. Hace tiempo que tengo ‘fichado’ al PROXMARK III y leyendo especificaciones nunca me ha quedado claro si permite ser programado en modo emisor pudiendo ponerle un UID arbitrario (teóricamente se supone que si en modo emulación…) ¿Lo habéis probado?
Hola YJ, en primera instancia gracias por tus comentarios.
Por experiencia propia, el tipo de tecnologías que me he encontrado en cuanto a controles de acceso tenían un pobre nivel de seguridad, es decir, ni siquiera utilizan Mifare. Estan basados en EM4102 HF, o RFID UHF sin ningún tipo de cifrado. Simplemete la tarjeta tiene un UID no cifrado y este es comprobado contra una base de datos (interna al dispositivo, o con un backend de BBDD). Los controles de acceso que me he encontrado y que implementan Mifare Classic, tampoco comprobaban si el UID era válido o por lo menos era una tarjeta generada por la compañía fabricante del dispositivo.
Ahora es cuando te voy a dar una alegria, implementar un control donde se determine si el UID es lícito para un sistema, tampoco sirve de nada, ya que el PROXMARK III puede funcionar, entre otras cosas como un tag con un UID arbitrario. Por lo tanto tan solo tienes que leer (va en plano) el UID de la tarjeta a clonar, con un lector convencional y simularla con el PROXMARK III. Como en todas las teccnologías puedes ir poniendo barreras de seguridad que no solucionarían el problema (ej. Ocultar el ESSID en redes 802.11).
Sí estas interesado en la auditoría o ingenieria en RFID este dispositivo PROXMARK III no te puede faltar, tiene unas posibilidades tremendas (no cobro por su difusión ;) )
De nuevo gracias por tus comentarios.
Gracias, lo cierto es que he trabajado bastante con Mifare y otras tecnologías RFID, y el 99 % de veces que he visto implementar sistemas de acceso están basados en el UID de la tarjeta asociado en una BD a una persona. He estado tentado varias veces en comprar el PROXMARK o/y OpenPCD http://www.openpcd.org/ precisamente por la posibilidad de emulación del UID, incluso he mantenido varios correos con el devel de RFIDiot sobre la posibilidad de encontrar tarjetas ‘compatibles MIFARE’ con el sector del UID editable. Aclarado el punto del PROXMARK lo posiciono como opción N1. Muchas gracias
Pues ha bajado de precio Yago, yo lo compre hace un tiempo a 499$ ahora lo tienes por 329$. Saludos.
No sabía que había bajado de precio, eso son buenas noticias :D
Hola Roberto
Primero de todo felicitarte por las dos entradas. Está muy bien explicado y me ha picado la curiosidad para informarme sobre tecnologías Mifare y RFID
No tengo un ProxMark III para hacer pruebas, y me gustaría saber si cada vez que se lee/escribe un sector hace falta que el lector y el tag se autentiquen de nuevo, aunque ya se haya consultado ese sector previamente. En caso de que lo hayan implementado por eficiencia, se podría acceder a un sector con el que se ha operado sin necesidad de implementar este ataque.
A ver qué me puedes decir :)
Para leer o escribir en un bloque de datos perteneciente a un sector, el lector y el tag han de autenticarse mutuamente usando la clave privada almacenada en el trailer para dicho sector una vez. A partir del proceso de autenticación correcta para un sector, toda la comunicación va cifrada.
Sl2
Entonces entiendo que hace falta autenticarse cuando se lee/escribe en cualquier bloque de un sector, y para eso se utiliza la clave del trailer. Una vez realizada una operación sobre cualquier bloque de ese sector, ya no hace falta autenticarse de nuevo y sólo se procede a cifrar la comunicación.
¿Correcto?
Correcto, si quieres trabajar contra, por ejemplo, un bloque de datos llamemoslo A, de un sector, te autenticas contra el trailer correspondiente. Si quieres leer/escribir en otro bloque de datos B protegido con la clave de su trailer correspondiente has de autenticarte contra él. Ahora si quieres volver a realizar operaciones contra el bloque A, debes volver a autenticarte contra el trailer correspondiente al bloque A.
En general cada vez que quieras trabajar contra un bloque de datos fuera del sector en el que estas autenticado debes volver a realizar la operación de autenticación.
Sl2
Con la última frase lo has explicado perfectamente.
Muchas gracias por tu ayuda ;)
hola roberto que exelemnte explicacion entre la pagina de proxmark iii y hay dos versiones cual me aconsejas comprar ,quierio meterme en el mundo de l rfid y tambien montare linux que publicacion es la mas estable con los puertos para esto del rfid te agradezcio de antemano tu colaboracion y te felicito por este exelente post
Que yo sepa solo hay una versión actualmente a la venta. http://proxmark3.com/
Sl2
¿Y esta versión? ¿La ha probado alguien?
http://hackable-devices.org/products/product/proxmark3/
Hace tiempo que ando trasteando con el proxmark y mi gran problema es la antena. Si bien, he conseguido hacer alguna antena con 14v pero tan endebles que si las movía me pegaba bajones hasta 9v (lo cual no sirve para nada).
Me harías un gran favor si me dices cómo has fabricado tu antena.
Gracias!
Pues estoy en la misma situación que tú, como puedes ver en la foto. Antena casera hecha por mí con 12-14v según la posición. He probado varias configuraciones para ver si podia augmentarla pero no lo conseguí, al fin y al cabo para mi proposito me sobra. Leí en algún foro que existen algunas más profesionales de caracter comercial.
Un saludo y gracias por el comentario.
Gracias por tu respuesta!
En mis diseños me he basado en
http://code.google.com/p/proxmark3/wiki/Antennas
http://www.proxmark.org/forum/topic/441/my-sternzwirn-1356-mhz-antenna/
Me ayudaría mucho si me cuentas en qué parámetros te basaste para construirla como la longitud del cable, el diámetro del cable, geometría de la antena (si es redonda, forma de elipse)…
En la foto veo que tiene una forma muy peculiar.
Un saludo!
Pues la verdad es que yo me basé tambien en la información del enlace que haces mención http://code.google.com/p/proxmark3/wiki/Antennas. Pero tal y como muestra ese doc la tensión que me daba no superaba los 7v, cambiando el modelado al de la imagen que ves conseguí entorno los 12v-14v. No le dedique mucho mas tiempo ya que como te comenté me sobraba con esos valores.
Muchas gracias, probaré a imitar la tu con forma de 8. Si me podrías proporcionar la imagen a más resolución te lo agradecería enormemente!
hola me gustaria comprar tu aparato o los palnos de el dime como lo hago y hare la transaccion que nosea en targeta si no en efectivo por giro
disculpa sabes donde podria comprar un proxmark3??? me seria de mucha ayuda ya que lo quiero implementar en mi negocio y no encuentro manera de adquirirlo…
gracias
Lo tienes aquí http://proxmark3.com/
Hola a todos, me gustaría saber si es posible hacer algo con el Google Nexus S en este sentido.
Por otro lado me pregunto si no sería posible copiar “en bruto” el contenido de una tarjeta a otra, para que funcione como clon.
Hola Brujo, desconozco que tipo de tecnología RFID implementa el Nexus, pero en el caso de que fuera Mirafe classic no habría problema. Puedes hacerte una idea utilizando el lector de Omnikey (http://www.hidglobal.com/driverDownloads.php?techCat=19&prod_id=168) y las aplicaciones demo que vienen con él. Por lo que comentas de copiar todo el contenido se prodría simpre y cuando tengas la clave privada de cada sector. Solo tienes que programarte la copia con el api que te dan o seguro que existe algo ya hecho por google.
Saludos
hola tengo la clave a de una tarjeta con q programa y en q bloque piuedo aumentar mi saldo para viajar tengo el acr122u
Me parece que es el artículo que necesitó pero no entiendo nada me lo podrías explicar un poco más como novato que soy osea paso a paso mi correo es perol2010@hotmail.com te agradecería su me pidieras ayudar. Gracias
hola como puedo comprar el proxmar 3 que no sea un fraude y que venga con soporte
es para una empresa que estoy comensando es un negocio muy ambicioso
http://www.proxmark3.com/
Si, pero dentro de proxmark3.com cual de ellos es el correcto y nos interesa?
Hola, Ramón de proxmark 3 solo hay una versión (hasta donde yo se), lo tienes con caja exterior y sin caja. Te recomiendo este http://proxmark3.com/item_pm3.html cumple lo comentado en el post (yo lo compré de esa web).
Un saludo y gracias por tus comentarios.
Pero en la web de proxmark3 veo que venden las antennas tambien por 60usd me pregunto por que todo el mundo se las autofabrica, si imagino que para ahorrar 60usd pero una vez que te gastas 300 usd 60 mas… nO? o no estoy en lo cierto?
Gracias y un saludo
Tienes razón el tema es que las antenas las vende desde no hace mucho, cuando yo lo compré no vendia estos dispositivos, la verdad es que merece la pena, ya q a mí la mia me dió, algún que otro dolor de cabeza.
Saludos.
hola trabajo para un hotel y tenemos tarjetas de proximidad, el problema es que el distribuidor de las tarjetas ha cerrado y hemos comprado las tarjetas en otro sitio, pero al parecer les falta el cifrado inicial, y no encontramos la forma de pregrabarlo
Dear Sir/Madam,
we are CARDENJOY team, who is specialized in RFID Prelam/inlay & RFID Card.
Our Annual capacity and sales for cards is around 100 million.
All of our products are with ROHS and ISO9001 Certificates.
With the great quality control team and specialized sales team here,you gonna to enjoy higher standard rfid products & superior service.
If you have any questions or interest in rfid products, please kindly mail us!
Looking forward to cooperating with your esteemed company!!
Best regards,
Anna
Office Address: 2-603 Room, Hong Feng Jia Yuan , 270# BeiMo Street, ChengXiang Putian City Fujian, P.R.China
Tel: (0086)594 2790031 Fax: (0086)594 2790185
Email: sales02@cardenjoy.com
Website: http://www.cardenjoy.com Skype: card.enjoy
Hola! ¿Como estas?
Espero que aún puedas responder a mi pregunta.
Estoy trabajando con un móduo MFRC522 y una MIFARE de 1k, he leido bastante y tu tutorial me ha ayudado a comprender algunas cuestiones que he leído anteriormente. En fin: ¿Cómo debo hacer para modificar un KEY teniendo en cuenta los bits de acceso? Es decir, ya he leido la hoja de datos, pero sin embargo no logro entender como son las distintas combinaciones entre estos bits, ya que algunos son invertidos y otros no y finalmente las dudas mas grandes que tengo, ¿cómo hago para mandar estos bits de acceso? ¿Tengo que mandar todo el bloque de datos teniendo en cuenta poner los bits de accesoen sus correspondintes bytes dentro del bloque como corresponden para que se haga lo que yo necesito, por ejemplo modificar el KEY A?
Espero tu respuesta. Desde ya muchas gracias.
hola yo tengo una maquina acr122 y me lee los datos de la tarjeta pero lo que no puedo es identificar los datos que me arroja abra algún manual como para usar esa maquina
hola tengo dudas de como escribir una tag mifare classic de 1k en java, alguien podria ayudarme con las sentencias para realizar esa operacion, seria de mucha ayuda gracias :)
Hola Luisa, en primer lugar gracias por leer nuestro blog. Desgraciadamente no podemos echarte una mano porque no solemos programar en el lenguaje que comentas y te liaríamos más que ayudarte.
Un saludo,
gracias Ramado estaría bien si nos pudieses ayudar en el lenguaje que sepas programar sera de una gran ayuda :)
Podrías explicar un poco mas acerca del sniffer y como construirlo
Muchas gracias