Saltar al contenido

Hackeo de Liquid: la conversación on-chain completa entre el hacker y Blockstream, mensaje a mensaje

Cada mensaje que el explotador de Liquid y Blockstream han intercambiado dentro de transacciones de Bitcoin desde el 6 de septiembre, atribuido por la propiedad de las monedas y la firma PGP: un resumen y, después, el hilo completo.

  • El hacker de Liquid y Blockstream negociaron devolver 4.000 BTC por mensajes OP_RETURN. 3.400 BTC volvieron el 7 de septiembre; 598,5 BTC siguen retenidos.
  • 27 entradas atribuidas hasta ahora: 12 del explotador, 14 de Blockstream, muchas cifradas, más la devolución. Se excluye el spam enviado a la dirección.

El 6 de septiembre, unos 4.000 BTC, por valor de aproximadamente 320 millones de dólares, salieron de la cartera que respalda Liquid Network, la sidechain de Bitcoin de Blockstream, a través de un fallo en el software Elements y no de una clave robada. Nuestro outlook de ese mismo día cuenta esa historia. Esta página trata de lo que ocurrió después, y de dónde: la persona o el grupo que retiene las monedas y Blockstream hablaron entre sí en la propia blockchain de Bitcoin, con mensajes escritos dentro de transacciones, y todo el intercambio es público. Abajo encontrará cómo funciona una conversación así, qué se dijo en resumen y, después, cada mensaje atribuido en orden, con un enlace a la transacción que lo contiene.

Cómo vive una conversación dentro de transacciones de Bitcoin

Las transacciones de Bitcoin pueden llevar un pequeño fragmento de datos arbitrarios en un tipo de salida llamado OPRETURN. El explotador lo usó como buzón: cada mensaje es una transacción que gasta una pequeña parte de las monedas robadas, envía 1.000 satoshis a la otra parte como portador y escribe el texto en una salida OPRETURN. Blockstream respondió de la misma manera, primero desde una dirección de contacto y luego desde direcciones nuevas. Algunos mensajes son texto claro. Algunos están firmados con la clave de seguridad publicada por Blockstream, de modo que cualquiera puede comprobar que realmente proceden de la empresa. Muchos están cifrados: las notas del explotador a Blockstream están cifradas para la clave PGP pública de la empresa, y las notas de Blockstream al explotador están cifradas para la clave que hay detrás de la propia dirección de Bitcoin del explotador, con el esquema ECIES integrado en las carteras Electrum. Los mensajes cifrados existen en la cadena a la vista de todos, pero solo el destinatario previsto puede abrirlos. Los mostramos como cifrados y describimos su tamaño; no podemos leerlos, y nadie más tampoco, a menos que el explotador publique la clave privada, como ha amenazado con hacer.

La atribución sigue dos reglas que cualquiera puede verificar. Un mensaje es del explotador cuando la transacción gasta monedas de la dirección que retiene los fondos robados: las monedas son el micrófono. Un mensaje es de Blockstream cuando se gasta desde la dirección de contacto de la empresa, o cuando su texto es un mensaje PGP firmado en claro cuya firma se verifica contra la clave publicada en blockstream.com, huella 1176 542D A98E 71E1 3372 2EF7 4AC8 CC88 6844 A2D6. Nuestra cronología verificada coincide con la auditoría independiente publicada por Sjors Provoost, contribuidor de Bitcoin Core.

Qué no está en este hilo

Una dirección de Bitcoin discutida públicamente atrae ruido. Desde el 6 de septiembre, la dirección del explotador ha recibido cerca de 300 transacciones más con texto: anuncios de memecoins, peticiones de una parte de las monedas, acusaciones que nombran a personas y presentan el robo como un trabajo desde dentro, y al menos un mensaje que afirma venir del consejero delegado de Blockstream. Ninguna gasta las monedas robadas y ninguna lleva una firma válida de Blockstream, así que ninguna forma parte de la conversación, y no las reproducimos.

La discusión en resumen

Primer contacto, 6 de septiembre. Cuatro horas después del vaciado, la dirección que retiene las monedas escribió "we are whitehats. contact us on chain" ("somos white hats. contáctennos en la cadena"). Blockstream respondió en menos de una hora con la dirección de correo de su equipo de seguridad. El explotador nunca la usó; todo lo que siguió se quedó en la cadena.

Los términos, primeras horas del 7 de septiembre. Blockstream envió su primera nota cifrada. El explotador propuso entonces, en texto claro, devolver "most" ("la mayor parte") de las monedas a la cartera de la federación de Liquid y preguntó si eso era aceptable. Minutos después añadió una condición: arreglar primero el fallo, asegurarse de que todos los nodos estén parcheados, y solo entonces el dinero se movería con seguridad. El detalle técnico de la vulnerabilidad siguió, cifrado para la clave de Blockstream. Blockstream respondió con un "Yes, thank you." firmado ("Sí, gracias.").

Parcheado, y devuelto. A las 09:41 UTC, Blockstream publicó un mensaje firmado: los nodos del puente estaban parcheados y era seguro devolver los fondos. El explotador pidió una confirmación más de la dirección de destino, envió más detalles cifrados sobre la corrección, y a las 16:09 UTC una sola transacción movió 3.400 BTC a la cartera de peg. Los 598,5 BTC restantes, alrededor de un quince por ciento, se quedaron en la dirección del explotador.

A puerta cerrada, del 7 al 8 de septiembre. Desde esa tarde el intercambio se volvió opaco: Blockstream envió una serie de notas firmadas y cifradas, incluida una breve instrucción sobre cómo descifrarlas, y el explotador respondió del mismo modo. La única línea legible del explotador en esta fase es una cara triste, publicada a última hora del 7 de septiembre.

Texto claro, y un ultimátum, del 8 al 9 de septiembre. En la tarde del 8 de septiembre el explotador anunció que todos los mensajes siguientes irían en texto claro. El 9 de septiembre llegó el mensaje más largo del hilo: una acusación de que Blockstream destinó demasiado poco a la seguridad (apenas 1,5 millones de dólares, según el mensaje), una exigencia de que la empresa pague un 10 por ciento de su propio dinero como recompensa por el fallo, una amenaza de que, de lo contrario, sus usuarios cargarían con una pérdida del 15 por ciento, y una promesa de publicar la clave privada que desbloquearía la conversación cifrada. Blockstream respondió en la misma hora, cifrado y firmado, y de nuevo a primera hora del 10 de septiembre. No ha aceptado, ni en la cadena ni en otro lugar, el planteamiento de la recompensa.

La conversación completa

Las horas son UTC. "Explotador" es la dirección que retiene las monedas vaciadas; la etiqueta de white hat es suya. "Blockstream" marca los mensajes gastados desde la dirección de contacto de la empresa o verificados contra su clave publicada. El texto entre comillas se reproduce exactamente como está escrito en la cadena.

6 sept., 18:30 UTC, bloque 965.818, Explotador: "we are whitehats. contact us on chain" (transacción)

6 sept., 19:31 UTC, bloque 965.822, Blockstream: "Please contact security@blockstream.com" (transacción)

7 sept., 01:49 UTC, bloque 965.865, Blockstream: "Encrypted to the key behind bc1ql4mfu6aundtkksxklfajs2h3t9nzcd6gyqjlte (Electrum BIE1 ECIES):" seguido de un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 1.297 bytes). No legible por terceros. (transacción)

7 sept., 02:20 UTC, bloque 965.869, Explotador: "sending most back to bc1qdlld6antmv4xug242ed83q7k4rqw50cwfns38szx4qu2f4jwaxxsuhwxxr, is that ok" (transacción)

7 sept., 03:30 UTC, bloque 965.875, Explotador: "Please fix the bug first. The chain is under risk at latest commit right now. Make sure every node is patched. Then we will transfer the money back safely after confirming the fix. The detail is as follows (encrypted using https://blockstream.com/pgp.txt)." seguido de una sección cifrada para Blockstream, no legible por terceros. (transacción)

7 sept., 03:30 UTC, bloque 965.875, Blockstream: "Yes, thank you." (firmado con PGP, verificado) (transacción)

7 sept., 09:41 UTC, bloque 965.912, Blockstream: "Bridge nodes are patched, safe to return the funds." (firmado con PGP, verificado) (transacción)

7 sept., 12:43 UTC, bloque 965.930, Explotador: "plz confirm again that we are sending the coins back to bc1qdlld6antmv4xug242ed83q7k4rqw50cwfns38szx4qu2f4jwaxxsuhwxxr More details about the vuln fix:" seguido de una sección cifrada para Blockstream, no legible por terceros. (transacción)

7 sept., 15:31 UTC, bloque 965.948, Explotador: Mensaje cifrado a Blockstream (PGP, 979 bytes). No legible por terceros. (transacción)

7 sept., 16:09 UTC, bloque 965.950, Explotador: Envió 3.400 BTC a la cartera de peg de Liquid, sin mensaje adjunto. (transacción)

7 sept., 17:54 UTC, bloque 965.956, Blockstream: "To decrypt: this is Electrum BIE1 ECIES to your key. In Electrum, Tools > Encrypt/Decrypt Message, paste below, decrypt with the private key for bc1ql4mfu6aundtkksxklfajs2h3t9nzcd6gyqjlte. Or any ECIES/BIE1 library." seguido de un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 1.408 bytes). No legible por terceros. (transacción)

7 sept., 17:54 UTC, bloque 965.956, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 1.275 bytes). No legible por terceros. (transacción)

7 sept., 17:54 UTC, bloque 965.956, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 1.211 bytes). No legible por terceros. (transacción)

7 sept., 17:54 UTC, bloque 965.956, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 1.147 bytes). No legible por terceros. (transacción)

7 sept., 18:35 UTC, bloque 965.962, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 1.275 bytes). No legible por terceros. (transacción)

7 sept., 18:35 UTC, bloque 965.962, Explotador: Mensaje cifrado a Blockstream (PGP, 962 bytes). No legible por terceros. (transacción)

7 sept., 18:35 UTC, bloque 965.962, Explotador: Mensaje cifrado a Blockstream (PGP, 1.052 bytes). No legible por terceros. (transacción)

7 sept., 21:03 UTC, bloque 965.973, Explotador: ":(" (transacción)

8 sept., 00:11 UTC, bloque 965.992, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 1.120 bytes). No legible por terceros. (transacción)

8 sept., 06:02 UTC, bloque 966.023, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 3.168 bytes). No legible por terceros. (transacción)

8 sept., 09:41 UTC, bloque 966.052, Explotador: Mensaje cifrado a Blockstream (PGP, 2.019 bytes). No legible por terceros. (transacción)

8 sept., 12:59 UTC, bloque 966.079, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 4.230 bytes). No legible por terceros. (transacción)

8 sept., 14:25 UTC, bloque 966.087, Explotador: Mensaje cifrado a Blockstream (PGP, 1.356 bytes). No legible por terceros. (transacción)

8 sept., 14:25 UTC, bloque 966.087, Explotador: "All messages will be in plaintext." (transacción)

9 sept., 11:45 UTC, bloque 966.199, Explotador: "Your dereliction of duty is obvious that you allocated only $1.5M (maybe even 0) to secure $5B assets. This is a flagrant neglect of security and a sign of complete mismanagement. You SHALL pay 10% using your own money as bug bounty or you will cause all your holders a 15% loss for your irresponsibility and stinginess. Even companies that participate in bug bounty programs cannot guarantee complete security, let alone one like yours that remains delusional, greedy, and arrogant to this very day. Anyway we are going to publish the privatekey to decrypt our conversations afterwards." (transacción)

9 sept., 11:45 UTC, bloque 966.199, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 2.222 bytes). No legible por terceros. (transacción)

10 sept., 02:18 UTC, bloque 966.296, Blockstream: un mensaje cifrado al explotador (ECIES, firmado con PGP por Blockstream, 4.889 bytes). No legible por terceros. (transacción)

Léalo usted mismo

Cada entrada de arriba enlaza a su transacción en mempool.space, donde la salida OP_RETURN puede decodificarse a partir del script en bruto. La versión en vivo de este hilo corre en nuestra portada, actualizada a medida que se confirman nuevos bloques, y la página de consulta de bloques explica cómo se hace la atribución y qué se deja fuera deliberadamente. Los mensajes cifrados se muestran también allí como cifrados. Si el explotador publica la clave prometida, la parte cerrada de esta conversación se volverá legible, y actualizaremos esta página.

Esta publicación constituye un análisis de mercado, no una recomendación de compra o venta.

Qué cambiaría la visión

  • Un nuevo mensaje en texto claro de cualquiera de las partes, en particular cualquier declaración de Blockstream sobre la recompensa exigida del 10 por ciento.
  • Movimiento de los 598,5 BTC que siguen retenidos en la dirección del explotador, en cualquier dirección.
  • La publicación de la clave privada que el explotador prometió, que haría legibles para todos los mensajes cifrados.

Fuentes