Robo masivo de bitcoins en monederos ColdCard por un fallo en la generación de claves

Tecnologia
Cientos de propietarios de monederos físicos ColdCard sufrieron un robo millonario de bitcoins, valorado en unos 89 millones de dólares. El incidente se produjo debido a un grave fallo en la generación de las claves de seguridad, lo que permitió a los atacantes 'adivinar' las contraseñas sin necesidad de acceso físico a los dispositivos. Este evento pone en entredicho la seguridad de estos monederos, que prometían proteger las criptomonedas de robos.

Quienes han invertido alguna vez en criptomonedas saben que los monederos físicos, también conocidos como 'cold wallets', eran considerados la forma ideal de proteger los activos digitales de posibles robos. Estos dispositivos siempre garantizaban que las claves necesarias para mover el dinero nunca saldrían del aparato. Sin embargo, esta promesa resultó ser falsa.

El pasado 31 de julio, cientos de usuarios de monederos ColdCard presenciaron cómo en apenas 40 minutos sus fondos desaparecieron de sus dispositivos. El atacante no necesitó acceso físico, ni infectar los aparatos, ni siquiera conectarse a ellos. Su método fue algo que, en teoría, debería haber sido imposible: adivinar las claves para sustraer el dinero.

El robo afectó a 1.367 bitcoins, equivalentes a unos 89 millones de dólares según los precios actuales, y se sustrajeron de 4.585 direcciones de monederos diferentes. Aunque se considera un robo 'menor' en comparación con otros incidentes pasados, su relevancia radica en la forma en que se produjo.

El ataque no comprometió el aislamiento inherente de los monederos ni extrajo las claves almacenadas en ellos. El fallo era aún más crítico: ocurrió en el momento en que el dispositivo creaba esas claves. Un monedero de bitcoin genera primero una semilla, que es una secuencia de datos aleatorios. A partir de esta semilla se derivan las claves privadas y las direcciones. Si la semilla es verdaderamente impredecible, probar todas las combinaciones posibles resulta inviable, incluso para los superordenadores más potentes del mundo. El problema surge si la semilla no es lo suficientemente aleatoria, pues en ese caso, el aislamiento y la seguridad del monedero son irrelevantes.

En 2021, los desarrolladores de ColdCard modificaron parte del código utilizado para generar semillas, integrando una biblioteca llamada libNgU. La intención era utilizar el generador físico de números aleatorios del dispositivo. No obstante, un error de integración hizo que el programa terminara utilizando como alternativa un generador pseudoaleatorio de MicroPython embebido, que exponía la librería libsecp256k1 y otras primitivas de bitcoin, como se detalla en un análisis técnico del desastre de seguridad que afectó a las ColdCard.

El generador alternativo tomaba datos como el identificador fijo del chip y varios registros relacionados con el reloj del dispositivo. Estos valores pueden producir números que parecen aleatorios, pero no constituyen un recurso criptográfico suficientemente robusto porque podían acotarse. Con un conocimiento suficiente del firmware y del comportamiento del hardware, un atacante podía recrear, fuera del dispositivo, una lista de semillas candidatas.

En los modelos Mk2 y Mk3 afectados, se estima que el espacio efectivo para generar semillas se reducía a 40 bits. En los Mk4 y Mk5, aunque había un elemento de entropía adicional, las semillas alcanzaban los 72 bits. Sin embargo, el análisis de expertos reveló que un problema en ese firmware limitaba las semillas a tan solo 32 bits. Esto significaba que 'adivinar' las claves ya no era virtualmente imposible, sino simplemente una cuestión de potencia de cálculo y tiempo.

Esos 32 bits dan lugar a aproximadamente 4.300 millones de posibles claves distintas. Esta cifra es enorme para un ser humano, pero totalmente manejable para máquinas capaces de realizar cálculos masivos. Para cada semilla, el atacante podía determinar las posibles direcciones y luego compararlas con la cadena de bloques de bitcoin. Cuando una coincidencia mostraba fondos, se obtenía la clave para moverlos. No importaba que el monedero físico estuviera resguardado incluso en una caja fuerte: el atacante ni siquiera necesitaba acceso a él, porque con esos datos era como si tuviera el monedero en sus manos.

La primera gran operación de transferencia de bitcoins vació 1.082,65 BTC de 1.196 monederos en apenas 41 minutos el 31 de julio. Nuevos barridos elevaron el total a 1.367 bitcoin, cerca de 89 millones de dólares. Un estudio de Galaxy Research sugiere que lo más probable es que el responsable fuera un único atacante, aunque también es posible que varios atacantes diferentes exploraran el mismo conjunto de claves débiles.

Coinkite ya ha lanzado actualizaciones de firmware que corrigen el problema para los dispositivos afectados. Sin embargo, instalar estas actualizaciones solo evita la creación de nuevas semillas defectuosas, pero no hace segura una semilla generada previamente. La recomendación de los creadores de ColdCard es actualizar primero el dispositivo, luego crear una semilla completamente nueva y, finalmente, transferir los fondos.

Los responsables de ColdCard reconocen que su código era público y que las revisiones anteriores verificaron la presencia del generador físico de números aleatorios y semillas, pero no examinaron en detalle qué implementación utilizaba realmente la función que creaba las semillas. Confiesan haber empleado un modelo avanzado de inteligencia artificial para intentar analizar la seguridad de su software, pero el problema no fue detectado. Se especula con que alguien pudo haber utilizado un modelo de IA para revisar versiones antiguas y localizar el fallo, aunque no hay pruebas de que la brecha de seguridad se haya descubierto de esa manera.