Sé que todo el mundo está hablando del ataque ByBit, y este es probablemente el artículo número cien que has leído sobre el tema, pero aun así creo que vale la pena compartir algunas reflexiones al respecto.
En resumen, el grupo norcoreano Lazarus logró robar 1.500 millones de dólares de la billetera fría de ByBit. La billetera fría era una billetera multifirma segura y la transacción fue firmada por todas las partes autorizadas ya que, desde la interfaz de usuario, parecía ser una transacción completamente válida.
Más tarde se descubrió que la interfaz de usuario segura había sido comprometida. Los atacantes obtuvieron las credenciales de AWS S3 de la máquina de un desarrollador, lo que les permitió modificar la interfaz de usuario.
Esa es la historia en pocas palabras. No creo que señalar con el dedo ni asignar culpas sea particularmente útil. En cambio, tiene mucho más sentido centrarse en las conclusiones clave y en cómo esta tecnología puede ser aún más segura.
Entiendo que la visión retrospectiva siempre es perfecta y no pretendo afirmar que yo lo hubiera hecho mejor. El equipo de Safe hace un trabajo excelente y todo lo que voy a comentar aquí se refiere a componentes externos a Safe (la billetera multifirma basada en contratos inteligentes).
Tuiteé mis pensamientos después del incidente. En este artículo, me gustaría desarrollarlos con más detalle.
Una de las mejores características de una billetera segura es que sus capacidades se pueden ampliar mediante módulos y protectores . Los módulos agregan nuevas funcionalidades a la billetera, mientras que los protectores realizan verificaciones antes de que se ejecute una transacción. Estas características hacen que la billetera sea altamente personalizable y mejoran significativamente su seguridad.
Por ejemplo, es posible restringir la billetera para que solo permita transacciones ERC-20 (en este caso, la transacción maliciosa se ejecutó mediante un delegatecall
). También es fácil implementar una regla que requiera firmas adicionales para transacciones que superen un cierto umbral, de manera similar a cómo los bancos permiten a los usuarios establecer límites para transacciones de alto valor.
Incluso el uso adecuado de sólo esta característica podría prevenir muchos ataques o al menos minimizar posibles pérdidas.
Cada sistema es tan fuerte como su componente más débil. En este caso, el eslabón más débil no fue el desarrollador cuyas credenciales S3 fueron robadas, sino algo mucho más profundo. No importa cuán segura sea la tecnología Web3 (blockchain y contratos inteligentes), si la interfaz de usuario basada en Web2 es vulnerable, todo el sistema sigue estando en riesgo.
La solución obvia es utilizar una interfaz de usuario Web3 inmutable. Tecnologías como IPFS, Ethereum Swarm u otras soluciones de almacenamiento Web3 pueden proporcionar esto. La implementación más simple es almacenar el hash del contenido de la interfaz de usuario como una variable constante en el contrato inteligente, lo que garantiza que cualquier cambio en la interfaz de usuario requiera modificar el contrato inteligente en sí.
Este enfoque vincula por completo la interfaz de usuario al contrato inteligente, lo que hace imposible alterar la interfaz sin antes hackear el contrato en sí. Con esta sencilla solución, se pueden prevenir eficazmente los ataques basados en la interfaz de usuario.
Incluso si el contrato inteligente es seguro y la interfaz de usuario es inmutable, el sistema sigue siendo vulnerable si los dispositivos de los firmantes pueden verse comprometidos. Si un atacante obtiene acceso al dispositivo de un firmante, aún puede reemplazar la interfaz de usuario en el lado del cliente.
Por este motivo, quien tenga grandes cantidades en una billetera fría debería utilizar un dispositivo dedicado exclusivamente a la firma de transacciones (por ejemplo, un iPad). Este dispositivo debería cumplir únicamente con este propósito: no debería tener instaladas otras aplicaciones, ni correo electrónico ni navegación web, sino únicamente el entorno necesario para firmar transacciones.
Si alguien administra miles de millones de dólares, gastar unos cientos de dólares en un dispositivo de firma dedicado no es un gasto significativo.
Se puede agregar un auditor externo a la billetera como firmante adicional, módulo o guardia para revisar transacciones y bloquearlas si parecen sospechosas. La detección de dichas transacciones sospechosas se puede realizar mediante patrones relativamente simples, por ejemplo, mover una cantidad inusualmente grande de fondos o ejecutar una llamada de delegado.
En caso de una transacción sospechosa, el sistema de auditoría externa puede notificar a los firmantes y solicitarles que revisen manualmente la transacción. Si aún la consideran legítima, pueden volver a firmarla como confirmación, lo que agrega una capa adicional de seguridad.
No existe ningún sistema invulnerable, pero las soluciones sencillas descritas anteriormente pueden dificultar considerablemente un ataque. Si alguien maneja miles de millones de dólares, vale la pena invertir algo de tiempo y esfuerzo en implementar estas sencillas medidas de seguridad.
No puedo enfatizar lo suficiente que todas estas soluciones se basan en la brillante arquitectura de Safe y en características como módulos y protectores.
Como dice el dicho, lo que no te mata te hace más fuerte. ¡Y hoy, Safe es más fuerte que nunca!