Cuatro años para descubrir cómo hackear su cartera de criptomonedas con 2 millones de dólares perdidos: así fue la odisea

A principios de 2018, Dan Reich y un amigo decidieron gastar 50.000 dólares en Bitcoin en un lote de tokens Theta, que en aquel momento era una nueva criptodivisa que valía solo 21 céntimos cada uno. Al principio, tenían los tokens en una plataforma de intercambio con sede en China.

Pero unas semanas más tarde, el gobierno del país decidió perseguir a estas plataformas (algo que sucede a menudo allí) y para evitar perder el acceso a su dinero hicieron una transferencia de sus monedas a una cartera de hardware o monedero físico de criptomonedas. Reich y su amigo eligieron un monedero de hardware Trezor One, configuraron un PIN y se olvidaron de él.

Solo 16 intentos

criptomonedas
criptomonedas

A finales de ese año, el token se había hundido a menos de una cuarta parte de su valor, había vuelto a subir y luego se había vuelto a hundir. Reich decidió que quería cobrar, pero su amigo había perdido el papel donde había escrito el PIN y no podía recordar ese código. Intentaron adivinar lo que creían que era un PIN de cuatro dígitos (en realidad eran cinco), pero tras cada intento fallido, la cartera duplicaba el tiempo de espera antes de que pudieran volver a adivinarlo.

Todo esto sabiendo que a los 16 intentos los datos de la cartera se borraban automáticamente. Cuando llegaron a una docena de intentos decidieron dejarlo. Pero el precio de esas monedas volvió a subir y mucho. Desde un mínimo de unos 12.000 dólares, el valor de sus criptomonedas empezó a dispararse. A finales de 2020 valían más de 400.000 dólares, aumentando brevemente a más de 3 millones de dólares.

Era difícil entrar en la cartera sin el PIN, pero no era imposible. Buscaron en internet alternativas hasta que encontraron una charla en una conferencia de 2018 de tres expertos en hardware que hablaban de una forma de acceder a la clave de un monedero Trezor sin conocer el PIN. Los ingenieros se negaron a ayudarles, pero al menos sabían que sí había alternativas.

Entonces encontraron a un financiero en Suiza que decía tener socios en Francia que podían descifrar la cartera en un laboratorio. Pero había una trampa: Reich no podía saber sus nombres ni ir al laboratorio. Tendría que entregar su cartera al financiero en Suiza, que la llevaría a sus socios franceses. Era una idea con muchos riesgos (podían ser unos timadores y robarles todo, por ejemplo).

Finalmente, se decidieron a aceptarlo, y cuando iban a venia a Europa se toparon con la pandemia. El plan se ralentizó y finalmente encontraron a un hacker estadounidense llamado Joe Grand

Entra en juego Joe Grand

Grand es un ingeniero eléctrico e inventor que lleva pirateando hardware desde que tiene 10 años, según él mismo. En su historia, entre otras cosas, testificó ante el Senado de Estados Unidos sobre una vulnerabilidad que podría utilizarse para derribar Internet o permitir a una agencia de inteligencia espiar el tráfico. En la actualidad, imparte clases de hacking de hardware a organizaciones y empresas que diseñan sistemas complejos y quieren entender cómo los hackers pueden atacar sus productos. Reich habló con él y confió en sus capacidades.

Grand decidió comprar varias carteras idénticas a la que tenían Reich y su amigo y les instaló la misma versión de firmware.

Luego pasó tres meses investigando y atacando sus carteras con diversas técnicas. Acordaron que Reich no iría a la ciudad de Grand con su cartera hasta que Grand consiguiera crackear tres carteras con la misma técnica.

Grand recurrió a una investigación previa: en 2017, un hacker de hardware de 15 años en el Reino Unido llamado Saleem Rashid había desarrollado un método para desbloquear con éxito una cartera Trezor perteneciente a un periodista tecnológico y le ayudó a liberar 30.000 dólares en Bitcoin.

Idea del crackeo

monedero Trezor
monedero Trezor

Rashid descubrió que cuando el monedero Trezor se encendía, hacía una copia del PIN y la clave, que se almacenaban en la memoria flash del monedero y colocaba la copia en la memoria RAM. Una vulnerabilidad en el monedero le permitió ponerlo en modo de actualización del firmware e instalar su propio código no autorizado en el dispositivo, lo que le permitió leer el PIN y la clave en la memoria RAM.

Pero la instalación de su código hizo que el PIN y la clave almacenados en la memoria flash de larga duración se borraran, dejando solamente la copia en la RAM. Para Grand había un riesgo: si borraba inadvertidamente la RAM antes de poder leer los datos, la clave sería irrecuperable.

Grand decidió entonces recurrir al método utilizado en la charla de la conferencia de 2018 que Reich también había examinado anteriormente. En este caso, los investigadores descubrieron que, a pesar de que Trezor eliminaba el PIN y la clave que se copiaban en la RAM durante el arranque, el PIN y la clave aparecían en la RAM durante otra etapa. Descubrieron que en algún momento durante el modo de actualización del firmware, el PIN y la clave se movían temporalmente a la RAM -para evitar que el nuevo firmware escribiera sobre el PIN y la clave- y luego se volvían a mover a la memoria flash una vez instalado el firmware.

Así que idearon una técnica denominada “wallet.fail”. Este ataque utilizaba un método de inyección de fallos, conocido como glitching, para socavar la seguridad que protege la RAM y permitirles leer el PIN y la clave cuando estaban brevemente en la RAM.

Hay tres niveles de seguridad disponibles para el microcontrolador utilizado en los monederos Trezor: RDP2, el más seguro, que no permite leer la RAM, y RDP1 y RDP0, que sí lo permiten. Al realizar un ataque de inyección de fallos contra el chip -que afecta al voltaje que va al microcontrolador- el equipo de wallet.fail descubrió que podía rebajar la seguridad de RDP2 a RDP1. Entonces pudieron forzar el monedero en el modo de actualización del firmware, enviando el PIN y la clave a la RAM, y leerlos.

Era similar al ataque de Rashid, excepto que la inyección de fallos les permitía acceder a la RAM sin necesidad de explotar el código. La técnica era estupenda para un proyecto de investigación, pero arriesgada para la vida real, según la información de los protagonistas de esta historia.

Si se hacía algo mal, Grand podría borrar inadvertidamente la RAM, junto con la clave y el PIN.

Mientras intentaba solucionar el problema, Grand dio con una solución mejor. Descubrió que en la versión de firmware instalada en el monedero de Reich, la clave y el PIN seguían copiándose en la memoria RAM cuando se encendía el dispositivo. Si Grand hacía un glitch en el dispositivo en el momento adecuado, podía rebajar la seguridad a RDP1 y leer la RAM. Y como la clave y el PIN sólo se copiaban a la RAM en ese momento y no se movían, a diferencia del escenario wallet.fail, esto significaba que seguían existiendo en la memoria flash si Grand borraba la RAM sin querer. Era una solución mucho más segura.

El glitching requería miles de intentos

El único problema era que el glitching requería miles de intentos: encender la cartera repetidamente y utilizar diferentes parámetros para afectar al voltaje del microcontrolador cada vez, en un intento de dar con el momento exacto que le permitiera rebajar la seguridad del microcontrolador. Tardó entre tres y cuatro horas y no había garantía de que funcionara en el monedero de Reich.

Cuando llegó el momento de hacer el hackeo de verdad el pasado mes de mayo, Reich voló a Portland durante dos días. Pasaron el primer día preparando todo –filmaron el hackeo con un equipo profesional– y al día siguiente, Grand llevó a cabo su acción.

Tuvieron que esperar más de tres horas y media. Hasta que el hackeo consiguió su fin y en la pantalla de Grand apareció la clave y el PIN de cinco dígitos.

Inmediatamente sacó los tokens Theta de su cuenta y envió un porcentaje a Grand por sus servicios.

En ese momento, la cantidad de dinero en el hardware ascedía a 2 millones de dólares al cambio.
Desde el pasado mes de mayo, Grand ha recibido peticiones de otras personas que perdieron el acceso a sus fondos y que necesitan la clave para descifrar sus carteras. Eso sí, Trezor ya ha solucionado parte del problema que explotó Grand en versiones posteriores de su firmware.

VÍA | The Verge