El 30 de julio, un atacante robó 1.196 direcciones de Bitcoin en 41 minutos,
sustrayendo 1082,65 BTC, con un valor aproximado de 70,2 millones de dólares
en ese momento.
Galaxy Research mapeó el ataque
y lo relacionó con una vulnerabilidad en el firmware de Coldcard, la
billetera de hardware exclusiva para Bitcoin fabricada por la empresa
canadiense Coinkite.
Según un
análisis en profundidad de Galaxy Research, el
robo principal
se desarrolló en una oleada muy bien coordinada que duró unos 25 minutos,
mientras que un análisis más amplio relacionó posteriormente unas 1.196
direcciones y hasta 1.083 bitcoins, valorados en casi 70 millones de dólares,
con una actividad que se prolongó durante aproximadamente 41 minutos. Las
cifras definitivas podrían variar a medida que los investigadores continúan
rastreando las transacciones en la cadena de bloques pública de Bitcoin.
Actualización: Galaxy Research ha identificado dos oleadas adicionales
de robos presuntamente relacionados con Coldcard, elevando su estimación
observada a 1.367,05 BTC, con un valor aproximado de 88,6 millones de dólares,
en 4.585 direcciones.
Las carteras afectadas pertenecían en su mayoría a titulares a largo plazo que
generaron sus semillas de recuperación utilizando
dispositivos Coldcard que ejecutaban un firmware vulnerable
lanzado a partir de marzo de 2021. Coldcard es una cartera de hardware con
aislamiento físico (air-gapped) fabricada por la empresa canadiense Coinkite y
diseñada para mantener las claves de bitcoin (BTC) aisladas de los
dispositivos conectados a Internet.
Un error de integración del firmware, ocurrido en marzo de 2021, redirigió la
generación de semillas a un generador de números pseudoaleatorios (PRNG) de
software determinista en lugar del generador de números aleatorios (RNG) de
hardware STM32.
Según Block, un atacante que pueda determinar o restringir suficientemente el
UID del dispositivo, el estado del temporizador y el historial de llamadas al
RNG puede reproducir secuencias de salida candidatas sin conexión, sin
necesidad de acceder al dispositivo. Las semillas candidatas se pueden
verificar derivando sus direcciones y comparándolas con los datos públicos de
la cadena de bloques.
Coinkite lanzó un firmware de emergencia para todos los modelos y versiones
afectados el 31 de julio, pero su instalación no repara las semillas
existentes.
Coinkite recomienda a los usuarios con semillas expuestas que generen una
nueva con el firmware parcheado y
transfieran sus criptomonedas.
Restaurar la semilla antigua en un firmware actualizado o en otra billetera
perpetúa la vulnerabilidad. Ningún informe público ha logrado reconstruir la
semilla de una víctima y asociarla a una dirección drenada.
Block rastreó el fallo
hasta la configuración de producción de Coldcard, que define
MICROPY_HW_ENABLE_RNG como cero porque Coinkite proporciona su propio
envoltorio de generación de números aleatorios por hardware. La biblioteca
libngu comprobaba si la macro existía en lugar de si estaba habilitada,
vinculando la compilación al mecanismo de reserva Yasmarang de MicroPython.
Este mecanismo se inicializaba a partir del ID único del chip y los registros
del temporizador, y no recopilaba entropía nueva tras la inicialización.
Coinkite publicó avisos de seguridad
y
corrigió el firmware tras darse cuenta
de la amenaza activa. La empresa indicó que los usuarios que generaron
semillas en el firmware afectado deben crear una semilla completamente nueva
utilizando una versión corregida y transferir sus bitcoins a direcciones
controladas por dicha semilla.
No basta con instalar la actualización. Una semilla creada en el sistema
defectuoso seguirá siendo vulnerable de forma permanente, ya que la
actualización del firmware no puede añadir aleatoriedad a las palabras que ya
existen.
El modelo más reciente aumenta el número de candidatos, pero Block afirma que
el costo práctico depende de la información UID disponible, el tiempo de
arranque, las llamadas RNG previas y el costo de derivación. La exposición
depende del firmware que se ejecutaba cuando se creó la semilla, no de la
versión instalada actualmente:
-
Mk2 y Mk3: Coinkite enumera las versiones 4.0.1 a 4.1.9 de Mk3, corregidas
en la versión 4.2.0, y no menciona Mk2. Block incluye las versiones 4.0.0 a
4.1.9 de Mk2 y Mk3 en la ruta vulnerable. - Mk4 y Mk5: cualquier versión anterior a la 5.6.0.
- Q: cualquier versión anterior a la 1.5.0Q.
-
Versiones Edge: anteriores a la 6.6.0X para Mk4 y Mk5, anteriores a la
6.6.0QX para Q.
Nadie ha identificado al atacante. Galaxy, que mapeó el barrido de 1196
direcciones, afirmó no haber encontrado otras transacciones de Bitcoin en los
30 días anteriores con la misma firma de 30 sat/vB sin cambios.
Advirtió que el patrón identifica al operador, no al robo, porque un barrido
«se ve igual que si un propietario de criptomonedas decidiera transferir
monedas».
La
firma indicó que las oleadas 1 y 2
podrían compartir operador, según sus patrones de transacción, pero advirtió
que no se debe asumir que la oleada 3 involucre al mismo atacante. Galaxy
también advirtió que sus hallazgos se basan en análisis en cadena y que no ha
confirmado computacionalmente que todas las direcciones identificadas se
generaron con entropía Coldcard débil.
Galaxy afirmó que la actividad continúa y que ha informado a investigadores
federales, empresas de cumplimiento normativo e investigadores de
ciberseguridad sobre aproximadamente 600 direcciones IP sospechosas
controladas por atacantes.
El generador de números aleatorios de Coldcard falló de forma silenciosa
Una semilla de monedero de Bitcoin es un secreto, que suele mostrarse como 12
o 24 palabras, a partir del cual el monedero genera sus direcciones y claves
privadas. Una semilla de 12 palabras generada correctamente contiene 128 bits
de entropía, una medida técnica que describe un número enorme de combinaciones
posibles y que hace que adivinar la semilla sea prácticamente imposible.
Se suponía que los dispositivos Coldcard obtenían esa aleatoriedad de un
generador de números aleatorios por hardware integrado en el microcontrolador
del dispositivo. Este componente se basa en el ruido eléctrico físico, que un
observador externo no debería poder predecir.
Sin embargo, durante una migración de bibliotecas de software en 2021,
Coinkite
reveló que
se produjo una confusión entre
dos funciones de números aleatorios
con interfaces coincidentes. Una de ellas accedía al generador de hardware
propio del dispositivo. La otra era una solución alternativa de software poco
segura, destinada a placas que carecían del hardware adecuado.
Un parámetro de configuración desactivaba la ruta de hardware predeterminada
de MicroPython, ya que Coinkite proporcionaba su propio envoltorio de
hardware. El software solo comprobaba si ese parámetro existía, no si estaba
activado. Dado que el parámetro estaba presente pero tenía asignado un valor
de cero, la compilación se completó con éxito, mientras que la generación de
semillas se desplazó silenciosamente al generador de software más débil.
Coinkite
estima una entropía efectiva
de aproximadamente 40 bits en el Mk3 y de unos 72 bits en los Mk4, Mk5 y Q,
frente a los 128 bits de una semilla BIP-39 de 12 palabras. Block no
proporciona una cifra práctica. Establece límites máximos condicionales por
debajo de 240,7 y 273,3, y advierte que este último no equivale a la seguridad
criptográfica de 73 bits. Se publicó en la prueba de fuerza bruta.
Esta revelación se produce tras la investigación de Coinspect sobre
Ill Bloom
a principios de julio, que reveló una vulnerabilidad de PRNG débil en
monederos de software antiguos vinculada a más de 5 millones de dólares
sustraídos de direcciones de Bitcoin, Ethereum, Tron, Rootstock y Polygon
desde mayo.
Fuente:
THN

