El hacker que robó 165 ETH ($32.000) de SpankChain ha accedido a devolver sus ganancias mal obtenidas. El Ethereum -basada en la plataforma de entretenimiento para adultos confirmó esto en una serie de tweets hoy.
https://twitter.com/SpankChain/status/1050533900001243136
Aquí, en su totalidad, está su mensaje Medium sobre la violación de seguridad: «A las 6 pm PST sábado, un atacante desconocido drenó 165.38 ETH (~ $38.000) de nuestro contrato inteligente de canal de pago que también resultó en $4.000 de BOOTY en el contrato se inmovilizó. De los robados/inmovilizados ETH/BOOTY, 34.99 ETH (~ $8.000) y 1271.88 BOOTY pertenecen a usuarios (~ $9.300 total), y el resto pertenecía a SpankChain.
Desafortunadamente, ya que estábamos en medio de investigar otros errores de contrato inteligentes, no nos dimos cuenta de que el hackeo había tenido lugar hasta las 7:00 pm PST domingo, momento en el que pusimos Spank.Live fuera de línea para evitar que se depositaran fondos adicionales en el contrato inteligente de los canales de pago.
Nuestra prioridad inmediata ha sido proporcionar reembolsos completos a todos los usuarios que perdieron fondos. Estamos preparando una lanzadera de aire ETH para cubrir todos los $9.300 de ETH y BOOTS que pertenecían a usuarios. Los fondos se enviarán directamente a las cuentas de SpankPay de los usuarios y estarán disponibles en cuanto reiniciemos Spank.Live.
Nuestro plan es mantener el camping abajo durante los próximos 2-3 días (pero posiblemente más) mientras nosotros:
- Vuelva a implementar el contrato inteligente del canal de pago con un parche para evitar cualquier piratería en el futuro
- Actualice Spank.Live para utilizar el nuevo contrato de canal de pago
- Airdrop ETH equivalente al 100% del ETH+BOOTY perdido por cada usuario en sus cuentas de SpankPay
- Corrige los errores que originalmente estábamos trabajando en torno a la actualización BOOTY
Para el momento en que reiniciemos SpankPay, todos los espectadores y ejecutantes tendrán el 100% del valor total en BOOTY+ETH que tenían en su SpankPay lanzados por aire a sus direcciones actuales de SpankPay, por lo que los usuarios no necesitan hacer nada.
El sitio continuará funcionando exactamente como era antes con una sola excepción - debido a los 4.000 BOOTS actualmente inmovilizados, reduciremos temporalmente el límite de BOOTS para cada espectador a 10 BOOTS. Esto significa que los espectadores solo podrán propina 10 BOOTS a la vez, y al gastar los 10 BOOTS automáticamente recargarán sus 10 BOOTS con cualquier ETH adicional que hayan depositado, hasta que agoten por completo su saldo ETH.
Durante los próximos días nuestro equipo está preparando una investigación en profundidad del ataque.
Esto es lo que sabemos hasta ahora:
En resumen, el ataque se capitalizó en un error de «reentrancy», al igual que el explotado en The DAO. El atacante creó un contrato malintencionado disfrazado de un token ERC20, donde la función de «transferencia» volvió a llamar al contrato del canal de pago varias veces, drenando algo de ETH cada vez.
El contrato malintencionado primero llamado CreateChannel para configurar el canal, luego llamó a LcopenTimeout repetidamente a través de reentrancy. El lcopenTimeout está ahí para permitir a los usuarios salir rápidamente de los canales de pago a los que aún no se ha unido la contraparte.
El lcopenTimeout transfiere al usuario su saldo inicial de depósito ETH y su saldo de depósito de token, ambos inicialmente establecidos en la función CreateChannel. Críticamente, la función LcopenTimeout sólo elimina los datos del canal en cadena (que pone a cero los saldos de canal) después de la función de transferencia de token. Esto permite que la función de transferencia del contrato malintencionado llame a lcopenTimeout en un bucle, cada vez que envía al atacante ETH equivalente a su balance de canal.
Contrato del canal de pago: https://etherscan.io/address/0xf91546835f756da0c10cfa0cda95b15577b84aa7#code
Dirección del atacante: https://etherscan.io/address/0xcf267ea3f1ebae3c29fea0a3253f94f3122c2199
Txs internos (reentrancy) de la cuenta del atacante: https://etherscan.io/address/0xcf267ea3f1ebae3c29fea0a3253f94f3122c2199#internaltx
Contrato malintencionado del atacante: https://etherscan.io/address/0xc5918a927c4fb83fe99e30d6f66707f4b396900e
Txs internos (reentrancy) del contrato malintencionado del atacante: https://etherscan.io/address/0xc5918a927c4fb83fe99e30d6f66707f4b396900e#internaltx
Fue nuestra decisión renunciar a una auditoría de seguridad para el contrato del canal de pago. En realidad hicimos que Zeppelin llevara a cabo una auditoría que costó $17.000 para la biblioteca de canales de pago unidireccional anterior. Lo consideramos bastante caro, dado que la mayor parte de los fondos en poder de ese contrato sólo alcanzó los 17.000 dólares en total.
Para este contrato de canal de pago no privativo mucho más sofisticado, se nos citó $30.000 - $50.000 para auditorías de seguridad, pero teniendo en cuenta tanto el valor de percepción como el costo de oportunidad del tiempo dedicado a reaccionar ante el hackeo, habría valido la pena. Esto se debe a nuestro ágil proceso de desarrollo, ya que el sitio está en fase beta, y lo rápido que hemos estado iterando y redesplegando los contratos (de los cuales estamos presionando cada 2-3 semanas). Esto identificó un problema en nuestro proceso de desarrollo e implementación, y haremos los cambios adecuados para garantizar que no vuelva a ocurrir, mientras seguimos innovando al ritmo que todos están familiarizados.
A medida que avancemos y crezcamos, intensificaremos nuestras prácticas de seguridad y nos aseguraremos de obtener varias auditorías internas para cualquier código de contrato inteligente que publiquemos, así como al menos una auditoría externa profesional».
Disclaimer: The views and opinions expressed by the author should not be considered as financial advice. We do not give advice on financial products.