Ethereum: 20 millones USD desviados en ataque durante 2 años. Qué hacer

ethereum

#1

Hace un tiempo tratando sobre el tema de billeteras, he contado como empresas como Cisco estaban investigando algunas vulnerabilidades en la interfaz RPC de plataformas como Ethereum. La interfaz RPC es la que permite comunicar a aplicaciones externas, como dApps o billeteras, con la red.

Esta semana Slowmist Security Team ha publicado un informe respecto a este problema encontrando que se trata de un ataque con más de dos años de antigüedad y que hasta la fecha ha desviado fondos por cerca de 20 millones de dólares, al cambio en Ether, donde también se encuentran involucrados cerca de 167 tipos tokens ERC20. Les contaremos cómo se ha dado el ataque y algunas reglas de opsec para protegerse.

Proceso de ataque

Se ha realizado un escaneo global de los nodos Ethereum en el puerto 8545 (HTTP JSON RPC API) y puerto 8546 (WebSocket JSON RPC API), y se envían las órdenes de API: eth_getBlockByNumber, eth_accounts, eth_getBalance; que obtiene la altura de bloque, dirección de billetera y balance de ésta.

Se efectúan llamadas eth_sendTransaction para intentar transferir los fondos a la billetera del atacante.

En el momento en que el usuario, propietario de la billetera, ejecuta la orden unlockAccount en la misma, no necesita volver a ingresar su clave para firmar las transacciones durante el periodo de duración de este desbloqueo. A partir de este momento, la orden eth_sendTransaction del atacante se ejecutará correctamente, enviando el balance a una billetera externa del atacante.

Estado de la red Ethereum

Slowmist ha empleado su herramienta MOOZ y ha escaneado 4.2 mil millones de direcciones IPv4 y ha descubierto más de 10 mil nodos Ethereum con la interfaz RPC expuesta a Internet. Todos estos expuestos a este ataque.

¿Qué acciones tomar para prevenirlo?

Como ya puede intuir, este problema se encuentra principalmente en el ámbito de seguridad de la información u opsec, para los colegas. La diferencia es que aquí se trata de fondos que se pueden cambiar por dinero fiat. Las medidas principales para mitigar este tipo de ataques van por ese lado. Si sabes que no se debe exponer el puerto de la base de datos de tu aplicación a Internet, te resultará familiar y también ridículo saber que hay gente que expone su dinero a todo el mundo.

Por tanto, desde el lado del servicio, en el supuesto que realmente necesites exponer este servicio a Internet. Hablaré de esto más adelante.

  • Puedes cambiar el puerto de la API RPC. El parámetro en geth es --wsport 83788
  • Cambiar la configuración para que solo escuche en la interfaz de red local. La orden es: --rpcaddr 192.168.0.100 o --wsaddr 192.168.0.100
  • Configurar reglas de firewall para aceptar ciertas direcciones IP.
  • No almacenar las claves en el mismo nodo. Si esto se da, no se podrán efectuar acciones con los fondos relacionados.
  • Utilizar billeteras de hardware y almacenar los fondos allí.

No, no, no

Como decía un ex presidente, el problema viene de no saber escuchar e informarse, así que mi primer consejo es: No, no, no.

Este ecosistema es bastante nuevo, no más de 3 años, y hay muchas personas que están ingresando a él para hacerse millonarios (:smile:) o “desarrollar” algunas cosas. Las billeteras son en esencia nodos y también software de gestión del par de claves. Las personas prefieren lo más fácil y sencillo, cosa conocida para los colegas del opsec, así que muchas de estas mantienen las configuraciones predeterminadas y cero esquemas de seguridad.

Todas las acciones con estas redes se deben enviar como transacciones a un nodo, y estos deben estar conectados a Internet para estar sincronizados. Lo que no es necesario es tener las interfaces expuestas y menos ¡los fondos en esos nodos! Así que si es su caso, mueva los fondos a una billetera en el móvil o una de hardware, además de hacer lo anterior con el servidor.

Si estas programando aplicaciones tampoco necesitas un nodo público en 99% de los casos. La idea de estas plataformas es justamente la descentralización y no depender de un punto central. Los clientes o usuarios de tus aplicaciones se deberían poder conectar desde sus propios clientes, como Metamask (que también tiene sus problemas), y para el momento del desarrollo puedes agenciarte de un nodo local o un emulador de nodos.

Si todo lo anterior no te ha quedado claro, o no entiendes muy bien, puedes preguntar aquí mismo que con gusto te ayudaremos. No confíes, verifica.


#2

Para este ataque solo necesitas tener una poca de gracia. Madre mía.