Hacking de tarjetas NFC: MIFARE Classic 1k (Parte 1 de 4)
Figura 2: Show me the (e-)money. Hacking a sistemas de pagos digitales por Salvador Mendoza (Netxing) |
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:
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.
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.
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.
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:
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.
Entonces, si leemos el trailer de un sector cualquiera de una tarjeta, podemos ver algo como esto:
A0A1A2A3A4A51E11EE5AB0B1B2B3B4B5
- 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.
- 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).
Powered by WPeMatico