El reversado y hackeo de unidades auto-cifradas externas es un pasatiempo que tengo desde hace mucho tiempo. En el pasado, he trabajado con modelos como Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Recientemente, un colega me trajo otro ejemplar: Patriot (Aigo) SK8671, que sigue un diseño típico: un indicador LCD y un teclado para ingresar el código PIN. Esto es lo que resultó...

1. Introducción

Caja

Embalaje
El acceso a los datos guardados en el disco, que supuestamente están cifrados, se obtiene tras ingresar el PIN. Algunas observaciones iniciales sobre este dispositivo:
- Para cambiar el PIN, se debe presionar F1 antes de desbloquear;
- El PIN debe contener entre 6 y 9 dígitos;
- Después de 15 intentos fallidos, el disco se borra.
2. Arquitectura del hardware
Primero desarmamos el dispositivo en partes para entender de qué componentes está hecho. La tarea más tediosa es abrir la carcasa: hay muchos tornillos microscópicos y plásticos. Al abrir la carcasa, vemos lo siguiente (presta atención al conector de cinco pines que soldé):

2.1. Placa base
La placa base es bastante simple:

Las partes más notables (ver de arriba a abajo):
- conector para el indicador LCD (CN1);
- buzzer (SP1);
- Pm25LD010 () memoria flash SPI (U2);
- controlador Jmicron JMS539 () para USB-SATA (U1);
- conector USB 3 (J1).
La memoria flash SPI almacena el firmware para JMS539 y algunas configuraciones.
2.2. Placa del indicador LCD
En la placa LCD no hay nada notable.


Solo hay:
- Indicador LCD de origen desconocido (probablemente de un conjunto de fuentes chinas); con control en serie;
- conector de cinta para la placa del teclado.
2.3. Placa del teclado
Al inspeccionar la placa del teclado, las cosas toman un giro más interesante.

Aquí, en la parte posterior, vemos un conector de cinta, así como el Cypress CY8C21434 – un microcontrolador PSoC 1 (de ahora en adelante, lo llamaremos simplemente PSoC)

El CY8C21434 utiliza un conjunto de instrucciones M8C (ver. ). En [la página del producto]( () se indica que soporta la tecnología (una solución de Cypress para teclados táctiles). Aquí se ve el conector de cinco pines que soldé: es un enfoque estándar para conectar un programador externo a través de la interfaz ISSP.
2.4. Mirando los cables
Vamos a ver qué está conectado aquí. Para ello, basta con probar los cables con un multímetro:

Explicación de este diagrama dibujado a mano:
- El PSoC está descrito en las especificaciones técnicas;
- el siguiente conector, el que está a la derecha, es la interfaz ISSP, que por pura casualidad coincide con lo que se describe en Internet;
- el conector más a la derecha es el terminal para el conector de cinta con la placa del teclado;
- el rectángulo negro es el diagrama del conector CN1, destinado a conectar la placa principal con la placa del LCD. P11, P13 y P4 están conectados a los pines PSoC 11, 13 y 4 en la placa LCD.
3. Secuencia de pasos del ataque
Ahora que sabemos de qué componentes se compone este dispositivo, necesitamos: 1) asegurarnos de que la funcionalidad básica de cifrado está realmente presente; 2) averiguar cómo se generan/almacenan las claves de cifrado; 3) encontrar exactamente dónde se verifica el PIN.
Para ello, realicé los siguientes pasos:
- saqué el volcado de datos de la memoria flash SPI;
- intenté obtener el volcado de datos de la memoria flash del PSoC;
- me aseguré de que la comunicación de datos entre el Cypress PSoC y el JMS539 contiene realmente las teclas presionadas;
- verifiqué que al cambiar la contraseña, no se sobrescribe nada en la memoria flash SPI;
- fui demasiado perezoso para hacer ingeniería inversa del firmware del 8051 del JMS539.
3.1. Obteniendo el volcado de datos de la memoria flash SPI
Este procedimiento es muy sencillo:
- conectar las sondas a los pines de la memoria flash: CLK, MOSI, MISO y (opcionalmente) EN;
- "snipear" las comunicaciones con un sniffer, utilizando un analizador lógico (yo usé );
- decodificar el protocolo SPI y exportar los resultados a CSV;
- usar , para analizar los resultados y obtener el volcado.
Tenga en cuenta que este enfoque funciona especialmente bien con el controlador JMS539, ya que este controlador carga toda la firmware desde la memoria flash durante la inicialización.
$ decode_spi.rb boot_spi1.csv dump
0.039776 : WRITE DISABLE
0.039777 : JEDEC READ ID
0.039784 : ID 0x7f 0x9d 0x21
---------------------
0.039788 : READ @ 0x0
0x12,0x42,0x00,0xd3,0x22,0x00,
[...]
$ ls --size --block-size=1 dump
49152 dump
$ sha1sum dump
3d9db0dde7b4aadd2b7705a46b5d04e1a1f3b125 dumpAl obtener el volcado de la memoria flash SPI, llegué a la conclusión de que su única tarea es almacenar el firmware para el controlador JMicron, que está integrado en el microcontrolador 8051. Desafortunadamente, obtener el volcado de la memoria flash SPI resultó ser inútil:
- al cambiar el código PIN, el volcado de la memoria flash sigue siendo el mismo;
- después de la fase de inicialización, el dispositivo no accede a la memoria flash SPI.
3.2. Examinando las comunicaciones
Este es uno de los métodos para identificar qué chip se encarga de verificar las comunicaciones para el tiempo/contenido de interés. Como ya sabemos, el controlador USB-SATA está conectado al chip Cypress PSoC a través del conector CN1 y dos cintas. Por lo tanto, conectamos las sondas a los tres pines correspondientes:
- P4, entrada/salida general;
- P11, I2C SCL;
- P13, I2C SDA.

Luego, iniciamos el analizador lógico Saleae y escribimos en el teclado: "123456~". Como resultado, vemos el siguiente diagrama.

En él podemos ver tres canales de intercambio de datos:
- en el canal P4, varios picos cortos;
- en P11 y P13 – intercambio de datos casi continuo.
Aumentando el primer pico en el canal P4 (el rectángulo azul del dibujo anterior), vemos lo siguiente:

Aquí se puede ver que en P4 hay casi 70 ms de señal uniforme, que al principio pensé que era una señal de sincronización. Sin embargo, después de dedicar un poco de tiempo a verificar mi suposición, descubrí que no es una señal de sincronización, sino un flujo de audio que se reproduce a través del zumbador al presionar las teclas. Por lo tanto, esta parte de la señal no contiene información útil para nosotros. Sin embargo, se puede utilizar como un indicador, para saber el momento en que el PSoC registra la pulsación de una tecla.
Sin embargo, el último flujo de audio en el canal P4 es un poco diferente de los demás: ¡es el sonido de 'PIN incorrecto'!
Volviendo al diagrama de las pulsaciones de teclas, al aumentar el diagrama del último flujo de audio (ver nuevamente el rectángulo azul), obtenemos:

Aquí vemos señales uniformes en P11. Así que parece que este es el señal de sincronización. Y P13 – los datos. Nota cómo el patrón cambia después de que termina la señal de audio. Sería interesante ver qué sucede aquí.
Los protocolos que funcionan con dos cables son generalmente SPI o I2C, y en la especificación técnica de Cypress se indica que estos pines corresponden a I2C, lo que como vemos es cierto también en nuestro caso:

El chipset USB-SATA interroga constantemente al PSoC para leer el estado del botón, que por defecto es "0". Luego, al presionar el botón "1", cambia a "1". La transferencia final, justo después de presionar “~”, es diferente si se ingresa un código PIN incorrecto. Sin embargo, hasta ahora no he verificado qué se está transmitiendo realmente. Pero sospecho que probablemente no sea la clave de cifrado. De todos modos, mira la siguiente sección para entender cómo extraje el volcado del firmware interno del PSoC.
Fuente: habr.com
