viernes, enero 20, 2023

Hacking de tarjetas NFC: MIFARE Classic 1k (Parte 1 de 4)

En este artículo voy a hablar sobre hacking de tarjetas NFC (Near Field Communication), o Comunicación de Campo Cercano, concretamente las típicas MIFARE Classic 1k. Como todos seguramente sabréis, NFC es un tipo de tecnología inalámbrica cuya banda de frecuencia de operación está en los 13.56 MHz, esto quiere decir que es libre y no hace falta una licencia para operar en ella. El punto fuerte de esta tecnología no es precisamente la transferencia de grandes cantidades de datos, sino la velocidad de transferencia al igual que la rapidez y facilidad de uso.

Figura 1: Hacking de tarjetas NFC: MIFARE Classic 1k (Parte 1 de 4)
Imagen Dall-e 2 "happy hacker with long hair in cyber punk digital art"

Un sistema NFC puede ser, por ejemplo, la identificación de personas o el método de pago de una máquina de vending (son los ejemplos más típicos). En sus inicios, y aún hoy, se utilizan tarjetas NFC o tags NFC como elemento de pago o de identificación, sin embargo, los teléfonos móviles hace ya tiempo que incorporaron esta tecnología y es por ello por lo que podemos “pagar con el móvil” en cualquier establecimiento que tenga un datáfono de los actuales. Algo, que hemos visto descrito y explicado en el libro de Show me the (e-)money. Hacking a sistemas de pagos digitales de Salvador Mendoza (Netxing) publicado por 0xWord.

Básicamente existen dos tipos de funcionamiento NFC, el activo y el pasivo. Esto es, uno de los dispositivos genera un campo electromagnético (al que se denomina dispositivo activo) de modo que, cuando el otro dispositivo (denominado pasivo) se acerca y entra en el radio de acción de dicho campo, su circuito electrónico se excita y entra así en funcionamiento. Pero no vamos a extendernos más en estos aspectos ya que no es el objetivo del artículo.

MIFARE Classic 1k

Como decíamos, existen muchos tipos de tarjetas compatibles con esta tecnología. Nosotros vamos a centrarnos en la MIFARE Classic 1k. Estas tarjetas, como su propio nombre indica, tienen una memoria EEPROM (Electrically Erasable Programmable Read-Only Memory) de 1KB que permite almacenar 768 bytes y está dividida en 16 sectores, divididos a su vez en 4 bloques de 16 bytes cada uno:

Figura 3: Estructura de tarjetas MIFARE Classic 1k

El primer bloque del sector 0 está reservado para datos del fabricante y el ID de la tarjeta. “Se supone” que estos datos son de sólo lectura, y digo “se supone” porque habitualmente así es y así debe ser, pero existen algunas tarjetas (sobre todo de vendedores chinos) en las que se puede escribir en este bloque solo una vez. Esto es especialmente útil si queremos clonar una tarjeta completamente, ID incluido.

Después tenemos 2 bloques de datos, y finalmente el último bloque (recordad que estamos hablando de cualquier sector) sirve para establecer las claves y los bytes de acceso del sector en el que estamos. Es lo que se denomina “trailer”. Estas claves, junto con los bytes de acceso, permitirán la lectura y escritura de datos de su sector.

En la mayoría de sitios de Internet donde dicen (o explican, en el mejor de los casos) "cómo hackear una tarjeta MIFARE Classic 1k", simplemente exponen las herramientas adecuadas para ello, los comandos correspondientes y poco más. O incluso dicen que necesitamos conocer todas las claves, muestran un ejemplo extrayéndolas y ya. Pero también existen artículos técnicos y académicos muy buenos que explican toda la lógica detrás de las MIFARE

¿Es necesario en todos los casos conocer todas las claves? ¿Para qué sirven concretamente las claves y los bytes de acceso? Bien, es lo que vamos a ver a continuación. 

Quedémonos con un único sector, ¿ok? Por ejemplo el sector 1. Cuando yo soy un proveedor de un servicio (por ejemplo, tengo una máquina de vending) y quiero que mis clientes puedan comprar con la tarjeta, puedo pensar que la tarjeta sirve como monedero (después veremos porqué esto es un error). Por lo tanto, si la tarjeta almacena, digamos, el importe que queda en el monedero, ese dato en concreto deberá estar en algún lugar de los bloques de datos. Imaginemos que está en el sector 1 como decíamos.

Figura 3: Sector 1 de tarjetas MIFARE Classic 1k

Siguiendo con el ejemplo, dicho importe podrá estar en los bytes 0 a 5, o 10 a 15 de los bloques 0, 1 o 2 del sector 1. Los bytes 6 a 9 como hemos dicho son bytes de acceso. El bloque 3 por tanto es el trailer y almacena las claves A (bytes 0 a 5) y B (bytes 10 a 15). Si conocemos estas claves, los bytes de acceso dirán qué podemos hacer (leer o escribir básicamente) en los bloques 0, 1 y 2 del sector 1 ¿Hasta aquí todo claro?

Bien, lo habitual es que las claves A y B sean cadenas por defecto (por cierto, están en hexadecimal y pueden tomar valores de 0 a F). Por lo tanto, una forma de “adivinar” estas claves es tirando de diccionario con valores típicos (000000000000, FFFFFFFFFFFF...) fácil, rápido y para toda la familia. 

¿Pero qué pasa si todas las claves han sido modificadas y ya no es ninguna de las de por defecto? ¿O si el fabricante ha sido precavido y ha cambiado sólo las claves de aquellos sectores en los que almacena la información importante?

Siempre nos quedará el ataque de diccionario, pero el éxito dependerá de lo bueno que sea el diccionario, y ello determinará el tiempo que tardemos en averiguar las claves que queremos, o todas las claves. Pero si dejamos a un lado el ataque de diccionario, aquí es donde hay que investigar un poco más y ver qué debilidades tienen estas claves o mejor dicho, los algoritmos de generación de las claves que, al final, son gestionadas por un circuito electrónico.


Este es un paper excelente en el que los autores explican cómo han hecho ingeniería inversa a una tarjeta MIFARE, eliminando las capas físicas del chip mediante diferentes técnicas de atacado químico y analizando todos los componentes, semiconductores, etcétera. Según cómo estén dispuestas las capas de sustrato, van deduciendo qué zonas forman la entrada de datos, el generador de números pseudo-aleatorios, puertas lógicas, etcétera. Estamos hablando de unas dimensiones del orden de micrómetros. Recomiendo su lectura porque es realmente impresionante

Veamos ahora cómo funcionan los bytes de acceso, los cuales se almacenan de la manera en que se ve en la imagen siguiente. Mejor dicho, estos son los BITS de acceso, porque realmente son 3 bits los que definen el acceso, y se almacenan de forma original y de forma invertida en las diferentes posiciones del trailer.

Figura 5: Bytes de acceso en MIFARE Classic 1k

Con esta nomenclatura, C1, C2 y C3 representan los bits en sí, y los subíndices representan el bloque al que se refieren (dentro de su sector), por lo que C11 sería el primer bit para el bloque 1, C21 el segundo bit para el bloque 1, y C31 el tercer bit para el bloque 1.

Aunque parezca un poco lioso, no lo es tanto. Para empezar, solo se utilizan los bytes 6, 7 y 8 (el 9 no). El primer bit de cada uno de ellos se utiliza para definir el acceso al bloque 3 (el propio trailer) del sector en el que se encuentre, el segundo bit de cada uno para el bloque 2, el tercero para el bloque 1 y el cuarto para el bloque 0. En esta tabla podemos verlo de una forma un poco más esquemática:

Figura 6: Bits de acceso

C11, C21 y C31 serán los bits que definan el acceso al bloque 1; C12, C22 y C32 para el bloque 2, y así sucesivamente. Y la forma de almacenar estos bits está reflejado en la tabla anterior que vimos, donde se almacenan tanto los valores originales como los invertidos. 

Figura 7: Valores que pueden tomar los bits C1, C2 y C3 para el trailer

Finalmente, los valores que pueden tomar los bits C1, C2 y C3 para el trailer (bloque 3, es decir, C13, C23 y C33) y las condiciones de acceso que establecen son los que vemos en la figura anterior. Y para los bloques de datos (0, 1 y 2):

Figura 8: Bloques de datos

Entonces, si leemos el trailer de un sector cualquiera de una tarjeta, podemos ver algo como esto:

A0A1A2A3A4A51E11EE5AB0B1B2B3B4B5

Donde:
  • A0A1A2A3A4A5 es la key A
  • B0B1B2B3B4B5 es la key B
  • 1E11EE5A son los bytes de acceso
Aquí tenéis un recurso online ( MIFARE Classic 1K Access Bits Calculator ) que te ayudar a calcular los bytes de acceso para unos permisos concretos. 
Pero si queremos hacer la operación inversa, es decir, calcular los permisos en función de los bytes leídos, debemos hacer un proceso. Calculamos los bits de cada byte hexadecimal (recordemos que el último no se usa):
  • 1E → 00011110 (byte 6)
  • 11 → 00010001 (byte 7)
  • EE → 11101110 (byte 8)
Si contrastamos esta disposición de los bits con la tabla donde vimos cómo se almacenaban, tendríamos que los bits C1, C2 y C3 para el bloque 0 serían:
  • C10 = 1; C20 = 0; C30 = 0
Y así sucesivamente con el resto de bloques:
  • C11 = 0; C21 = 1; C31 = 1
  • C12 = 0; C22 = 1; C32 = 1
  • C13 = 0; C23 = 1; C33 = 1 (trailer)
Es decir, el bloque 0 tiene permisos 100. Vamos a la tabla de permisos de los bloques de datos y vemos que esto se traduce en que con ambas claves A y B se pueden leer, escribir, incrementar, decrementar, transferir y restaurar los datos (vamos, todos los permisos habilitados).

Los bloques 1 y 2 tendrían permisos 011, según los cuales es necesaria la clave B para leer y escribir, pero no se puede hacer nada más. Y para el bloque 3 (trailer), como es otra tabla diferente, 011 significa que ni la clave A ni la B se pueden leer y solo se puede modificar conociendo la clave B, los bits de acceso se pueden leer conociendo una de las dos (o las dos) y solo se pueden modificar conociendo la clave BPor lo tanto, podemos deducir que la clave B es especialmente importante para este sector, por lo que puede almacenar información interesante.

Saludos,

**********************************************************************************************
**********************************************************************************************


No hay comentarios:

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares