lunes, 20 de enero de 2014

Extraer datos y hacer un Dump de las tarjetas RFID Mifare Classic con ACR122U y nfc-mfclassic+nfc-mfclassic

Este tipo de tarjetas utilizadas normalmente en Estaciones de esquí, Aeropuertos, empresas privadas, transportes públicos, etc, utilizan una tecnología análoga a la de las Wifis, pero a corta distancia y utilizando un cifrado de la conexión distinto. En concreto el cifrado de las tarjetas Mifare Classic 1k y 4k utilizan un algoritmo CRYPTO1, el cual se puede romper fácilmente. En la web de Security art work podmeos encontrar cuatro post detallando exactamente como trabaja la autenticación de las tarjetas a la hora de pasarlas por el lector.

Un resumen es que las tarjetas Mifare Classic guardan cierta información, entre las que se encuentra las claves de cifrado y el UID o identificación del usuario. El funcionanmiento es el siguiente; tarjeta es pasada por un lector de radio frecuencia a una distancia máxima de entre unos 5 y 10cm, en ese momento el lector envía la señal para autenticarse, y la tarjeta le responde con la clave de cifrado, la auntenticación es mutua. Cuando se ha producido la autenticación, el lector manda el UID al la Base de datos donde se almacena toda la información, y el servidor la devuelve mostrando en pantalla los datos, que pueden ser, el saldo, una autorización de acceso, etc.

Imagen 1: Proceso de Autenticación Mifare Classic
Sabiendo esto es normal que lo primero en que se piense sea en clonar las tarjetas para obtener acceso gratis al transporte, o para colarse en alguna empresa evidenciando que ésta es vulnerable a accesos por parte de personal externo sin autorización.


El caso es que para poder clonar las tarjetas, de momento, no he encontrado nada en claro. Si que es cierto que existe gran información, pero está algo desordenada, en este Hilo del foro de elhacker.net se habla bastante de ello, y leyéndolo desde el principio uno se puede hacer a la idea de por donde van los tiros.
Para esta prueba de concepto nos hemos basado en el artículo RFID Cooking with Mifare Classic que podemos encontrar en la wiki de la página de Backtrack-linux.org. Lo que vamos a hacer va ser utilizar un lector grabador ACR122U con el que haremos un volcado de los datos para después modificarlos y hacer los cambios en la tarjeta. Podemos comprarlo en ebay por unos 50$.

Imagen 2: Lector Grabador para tarjetas Mifare Classic 1k y 4k
Comentar que existen driver para Linux, Windows y Mac OS X, así que no tenemos porqué preocuparnos en cuanto a compatibilidad.
Empezaremos utilizando el comando nfc-list para poner el dispositivo a la escucha y ver la información de las tarjetas que pasemos por el lector.

Imagen 3: Lectura de la tarjeta
El siguiente comando que vamos ha utilizar nos permitirá romper la seguridad de cifrado de la tarjeta y hacer un volcado de los datos que contenga. Esto es el UID.
Para que este proceso se lleve acabo será necesario mantener la tarjeta encima del lector, hasta que finalmente obtengamos los datos.
Imagen 4: Volcado o Dump de los datos de la tarjeta
Los parámetros de este comando especifican lo siguiente:

-P Número de intentos por sector (por defecto 20)
-0 Es el nombre y ruta del archivo donde se guardará la información(este parámetro es obligatorio.

El programa empezará a realizar intentos de autenticación por sector, cuando termine la autenticación volcará los datos en el archivo que le especificamos.

Imagen 5: Intento de conexión y autenticación con la tarjeta y volcado de datos
Para comprobar la información del volcado de datos podemos abrir el archivo con cualquier editor hexadecimal. Y será aquí donde se modificarán todo lo que queramos cambiar.

Imagen 6: Visualizando los datos extraidos con un editor hexadecimal
Por último grabamos estos datos modificados en la tarjeta a través de nfc-mfclassic. Esto permitirá escribir en la tarjeta el volcado que se hizo anteriormente.
Imagen 7: Escribiendo datos en mifare classic

Los parámetros de este comando indican tan sólo lo que queremos hacer, si leer(r) o escribir(w), y la clave que utilizaremos key(a) o key(b).

A partir de aquí es cuestión de buscar más información para poder hacer un clonado completo de la tarjeta. Mi intención es arrojar algo de luz a este tema.

Referencias:
http://foro.elhacker.net/hacking_avanzado/pruebas_y_chanchullos_con_rfid-t263647.0.html
http://www.securityartwork.es/2010/01/29/hacking-rfid-rompiendo-la-seguridad-de-mifare-i/
http://www.securityartwork.es/2010/02/03/hacking-rfid-rompiendo-la-seguridad-de-mifare-ii/
http://www.securityartwork.es/2010/07/21/hacking-rfid-rompiendo-la-seguridad-de-mifare-iii/
http://www.securityartwork.es/2010/09/15/hacking-rfid-rompiendo-la-seguridad-de-mifare-iv/
http://www.backtrack-linux.org/wiki/index.php/RFID_Cooking_with_Mifare_Classic
http://www.ru.nl/ds/research/rfid/
http://www.sos.cs.ru.nl/applications/rfid/2008-koning-thesis.pdf
http://www.sos.cs.ru.nl/applications/rfid/2008-cardis.pdf
http://www.sos.cs.ru.nl/applications/rfid/2008-privacy.pdf
http://www.sos.cs.ru.nl/applications/rfid/2008-concept.pdf
http://www.sos.cs.ru.nl/applications/rfid/2008-esorics.pdf