Sitio web para almacenar criptomonedas tiene alojado un código malicioso con una puerta trasera
Un sitio web que se presenta a sí mismo como una forma más segura de almacenar Bitcoin y otras monedas digitales ha estado utilizando un juego de programación para generar claves privadas que son sospechosamente triviales para que los operadores las adivinen, dejando todo el dinero almacenado en las billeteras abierto al robo.
Investigadores lo afirmaron el viernes.
WalletGenerator.net proporciona código para crear lo que se conoce como billeteras de papel para 197 criptomonedas diferentes.
Las billeteras de papel una vez se presentaron como una forma segura de almacenar monedas digitales porque, al menos en teoría, las claves privadas que desbloquean las billeteras se almacenan en papel, en lugar de en un dispositivo conectado a Internet que puede ser hackeado. (En realidad, las billeteras de papel están abiertas para hackearse por una variedad de razones).
Si bien el sitio aconseja a las personas que descarguen el código de esta página de Github y lo ejecuten mientras la computadora está desconectada de Internet, también alberga algo más simple, solo el servicio sobre todas las instrucciones para generar las mismas billeteras.
Investigadores de MyCrypto, que proporciona una herramienta de código abierto para usuarios de criptomonedas y blockchain, compararon el código alojado en Github y WalletGenerator.net y encontraron algunas diferencias notables.
En algún momento entre el 17 de agosto y el 25 de agosto del año pasado, se cambió el código de WalletGenerator.net para alterar la forma en que produjo los números aleatorios que son cruciales para que las claves privadas estén seguras.
Cómo funciona el código
Anteriormente, los movimientos del mouse o las pulsaciones de teclas proporcionadas por el visitante del sitio proporcionaban la entrada aleatoria necesaria para garantizar que los números no fueran predecibles.
El código modificado introducido en agosto pasado todavía permitía a los usuarios finales ver el texto que les pedía mover el mouse o escribir caracteres, y mostraba una barra de progreso y gráficos que respondían en tiempo real a medida que los visitantes cumplían las instrucciones.
Pero “tras bambalinas”, según los investigadores de MyCrypto, el código ignoró completamente estas instrucciones.
En su lugar, el código de WalletGenerator.net usó imágenes suministradas por el sitio para proporcionar la entrada aleatoria. Estos cambios resultaron de la adición de una función llamada SecureRandomAdvanced, que modificó la función SecureRandom utilizada anteriormente.
El código alojado en WalletGenerator.net volvió a su versión anterior el jueves, luego de que los investigadores de MyCrypto informaron el comportamiento al operador del sitio.
Como mencionamos anteriormente, los visitantes que siguieron el consejo de usar el código alojado en Github, y no el código alojado en WalletGenerator.net, nunca se vieron afectados.
“En este extraño giro de los acontecimientos, todavía no tenemos idea de si el propietario actual del sitio es la parte maliciosa, si el servidor es inseguro o ambos”, escribió Harry Denley, director de seguridad de MyCrypto, en un post publicado el viernes.
“Todavía estamos considerando esto como altamente sospechoso y aún recomendamos a los usuarios que generaron pares de llaves públicas/privadas después del 17 de agosto de 2018 a transferir sus fondos. No recomendamos el uso de WalletGenerator.net para continuar, incluso si el código en este momento no es vulnerable”.
Desenterrando una puerta trasera
Una de las primeras diferencias que los investigadores de MyCrypto notaron en el cambio de código fue que solicitó que se descargara una imagen del sitio. Esta solicitud sorprendió a los investigadores porque la imagen ya se había cargado cuando el navegador visitó la página por primera vez.
Después de más investigaciones, descubrieron que la función SecureRandomAdvanced recién agregada ingresaba datos dentro de la imagen para la entrada aleatoria que provenía de movimientos del mouse o caracteres ingresados.
Los investigadores descubrieron algunas características inusuales en la imagen. Por un lado, era grande. Aún más extraño, aunque parecía ser visualmente idéntica cada vez, diferentes instancias producían diferentes huellas dactilares criptográficas conocidas como sumas de comprobación (checksums).
Los diferentes sha256sums parecían variar dependiendo de la dirección IP de la computadora que descargó la imagen. A continuación, se encontraban las sumas de comprobación para el mismo archivo, llamado bitcoin.png, junto con el tamaño del archivo y la ubicación de IP que lo recibió:
sha256sum
hashes of the file bitcoin.png
:
$ sha256sum bitcoin.png (United Kingdom) 27cfafd3fe3810a89375a2f3ccc253cd6b2f03b5ff30ec6b41a76f8f2393085d local.png $ du -hs bitcoin.png 156K bitcoin.png
$ sha256sum bitcoin.png (Netherlands) 4798d4167a98b56dc112878aed578f64ff9fb20fc58774a468e9b53f9aa1fc59 nl.png $ du -hs bitcoin.png 16K bitcoin.png
$ sha256sum bitcoin.png (California) 4798d4167a98b56dc112878aed578f64ff9fb20fc58774a468e9b53f9aa1fc59 na_cali.png $ du -hs bitcoin.png 16K bitcoin.png
$ sha256sum bitcoin.png (N. Virginia us-east-1) 86b475b38b137e50e317ce4478cc9abf41d33c158e12d2174dc1dd6f786ec45f onvpn.png $ du -hs bitcoin.png 156K bitcoin.png
$ sha256sum bitcoin.png (Spain) 4798d4167a98b56dc112878aed578f64ff9fb20fc58774a468e9b53f9aa1fc59 offvpn.png $ du -hs bitcoin.png 16K bitcoin.png
Resultado del código
La segunda y tercera entrada, con la suma de comprobación que comenzaban a partir de 479, corresponden a la imagen no modificada. Los otros tres fueron modificados de alguna manera.
Los investigadores utilizaron una herramienta llamada binwalk para analizar las imágenes modificadas, pero aún no están seguros de qué causa que las imágenes modificadas tengan diferentes sumas de comprobación, aunque todas parezcan visualmente idénticas.
Los investigadores sospechan que las imágenes modificadas contienen datos ocultos que la función SecureRandomAdvanced usó para generar los números aleatorios.
“Sabemos que algo está sucediendo para manipular la imagen, pero no podemos determinar qué está sucediendo exactamente”, escribió Denley. “La mayoría de las herramientas de esteganografía incluyen una funcionalidad de contraseña, lo que significa que descifrar con éxito los datos ‘ocultos’ es imposible sin conocer la contraseña proporcionada al momento de construir la imagen”.
Los investigadores probaron su hipótesis utilizando una función masiva para generar 1,000 claves. El código de Github proporcionó 1,000 pares de claves únicas. El código alojado en WalletGenerator.net, sin embargo, produjo solo 120 pares de claves únicas.
Cuando los investigadores actualizaron su navegador, cambiaron la ubicación IP utilizada por su red privada virtual y usaron el código de WalletGenerator.net para producir lotes subsiguientes de 1,000 pares de llaves, una vez más obtendrían solo 120 pares únicos, pero cada vez eran diferentes a los de sesiones anteriores. Aquí hay un video que muestra con más detalles este hecho:
Más hechos sospechosos
Los investigadores también encontraron que el uso de una imagen con la misma suma de comprobación en una fecha posterior generó exactamente el mismo conjunto de 120 pares de claves que se generó anteriormente.
Con eso, tenían pruebas de que los pares de claves eran totalmente deterministas basados en la imagen. Pero eso todavía no explica cómo o por qué se generaron 120 pares de claves únicas cada vez. En un correo electrónico, Denley escribió:
No estoy muy versado en criptografía, pero la idea general es que solo se generan 120 pares de llaves en lugar de 1,000. Estos 120 pares de llaves son deterministas según el icono de moneda modificado que tenga (ya que las claves se derivan de los bytes inyectados de ese archivo).
Hubo otras partes de la lógica modificada que no se ilustraron en el artículo que podrían explicar mejor las matemáticas detrás de _por qué_ 120, pero, en resumen, la lógica se modificó con un número aleatorio entre 0 y 119 para que sea un resultado completamente predecible (el atacante tendría que colocar la lógica con los mismos bytes de la imagen y ejecutarla 120 veces para obtener una clave que un usuario _probablemente_ haya usado).
Si ejecutas la lógica con el mismo icono de moneda, obtendrás la misma dirección cada vez, por lo que se agregó un número aleatorio entre 0 y 119, lo que dio la ilusión de una generación de par de llaves no determinista.
Respuesta por parte del sitio
Los intentos de llegar a los operadores de WalletGenerator.net para comentar en Twitter no tuvieron éxito. Según la publicación del viernes, los operadores le dijeron a MyCrypto:
“No pudieron verificar nuestras observaciones y nos preguntaron si quizás estábamos en un sitio de phishing”.
En defensa de los operadores, el sitio instruye a los usuarios en dos lugares separados para que no ejecuten el código alojado en el sitio y, en cambio, descarguen el código no modificado de Github. Cualquiera que siguiera esas instrucciones no se vería afectado por el servicio inseguro alojado en WalletGenerator.net.
Además, no hay evidencia, al menos hasta ahora, de que las billeteras se hayan usado para robar las criptomonedas de los usuarios.
Aun así, los hallazgos en la publicación del viernes son una alerta roja, no solo sobre WalletGenerator.net en particular, sino por todos los servicios gratuitos que ofrecen herramientas supuestamente seguras para almacenar criptomonedas.
Mantener las monedas digitales seguras de los ciberdelincuentes es un trabajo de tiempo completo que requiere habilidad y diligencia.
Las personas deben mostrar mucho escepticismo antes de decidirse por una billetera.