Cuenta Geth desbloqueada por 2 segundos

Mi pregunta se relaciona con una pregunta anterior sobre este stackexchange.

Detalles
Patrick usó Ethereum Wallet para transferir 1 éter para probar la compra de tokens TheDAO en su computadora de minería. Cuando (hasta ahora parece que) la billetera Ethereum desbloqueó su billetera geth durante 2 segundos (a través de la API de IPC, no expuesta a Internet), un bot que estaba observando la actividad de su billetera geth se abalanzó para enviar una instrucción de transferencia a geth (a través de JSON-RPC, expuesto a Internet) y transfirió los 7218 éteres restantes a la cuenta del hacker.

¿Se solucionó alguna vez este error o todavía está en la versión más nueva de mist? ¿Cómo puedo verificar si soy vulnerable a este ataque o no? ¿El desarrollador tuvo un motivo especial para implementarlo de esta manera o ni siquiera es posible implementarlo de otra manera?

Respuestas (1)

El problema está relacionado con la seguridad de su nodo geth. No encuentro nada que deba arreglarse .

Mira, cuando haces una conexión IPC a tu nodo geth, puedes eliminar las API de RPC. SO, solo los procesos en su sistema pueden acceder a su nodo geth. Por lo tanto, ningún bot (si no se ejecuta en su servidor) puede enviar la transacción a su nodo geth.

En caso de que esté obligado a usar rpcsobre IPC, el método preferido es usar 127.0.0.1como rpcaddr.

Sea muy específico sobre quién puede enviar llamadas RPC a su instancia geth. Entonces, en el caso más vulnerable cuando usa RPC y expone personal sobre RPC. Puede asegurarse de que ningún otro servidor, aparte del que está ejecutando su Dapp, pueda conectarse al nodo geth desde el lado del servidor.

EDITAR:

No estoy seguro del intervalo de 2 segundos. Si puede proporcionar alguna referencia sobre dónde leyó eso. Lo que sé de la documentación es:

La clave sin cifrar se mantendrá en la memoria hasta que expire la duración del desbloqueo. Si la duración de desbloqueo por defecto es de 300 segundos.

Siempre tiene la opción de anular el valor usando:

personal.unlockAccount(address, password, duration_in_seconds)

PD: siempre que tenga la opción de configurar los valores predeterminados, los valores predeterminados no importan mucho.

Por supuesto, puede tomar medidas como hacer que su computadora con su billetera esté completamente sellada para que sea aún más segura. Estos pasos que mencionaste son todos buenos para asegurar tu billetera. Mi pregunta es más por qué incluso hay un intervalo de 2 segundos en el que "hacker" podría ingresar a su billetera. ¿El desarrollador tenía alguna idea detrás de esto o incluso tiene que tener ese intervalo de 2 segundos?
Edite la respuesta ya que el comentario iba largo.
Aquí está la referencia donde leí sobre ese intervalo de 2 segundos: ethereum.stackexchange.com/questions/3887/… y el fragmento de código que desbloquea la cuenta durante dos segundos web3.personal.unlockAccount(Session.get('data').from, pw || '', 2, function(e, res){. ¿Tienes una idea de por qué están hablando de dos segundos?
No hay nada especial en 2 segundos. BokkyPooBah solo estaba dando un ejemplo en el que el atacante golpeaba un nodo cada 2 segundos, por lo que incluso si proporcionas 2 para la duración_en_segundos, no estás lo suficientemente seguro. Puede usar cualquier valor para lo mismo, pero la seguridad va más allá de aplicar cuánto tiempo se desbloqueará la cuenta.
La antigua unlockAccount(...)llamada sendTransaction(...)ahora se reemplazó con web3.eth.personal.signTransaction(...)- github.com/ethereum/mist/blob/master/interface/client/templates/… . La transacción firmada ahora se genera dentro de Ethereum Wallet/Mist, y la transacción firmada se pasa a geth. Ahora no es necesario que Ethereum Wallet / Mist desbloquee gethninguna cuenta.