SharkTeam: análisis del principio de ataque de la propuesta Tornado.Cash

El motivo de este incidente fue que la comunidad no pudo descubrir los riesgos en la propuesta al verificar la propuesta y no verificó cuidadosamente si el código del contrato de propuesta tenía vulnerabilidades de seguridad.

Escrito por: SharkTeam

El 20 de mayo de 2023, hora de Beijing, Tornado.Cash sufrió un ataque de propuesta y el atacante obtuvo una ganancia de alrededor de 680,000 dólares estadounidenses. SharkTeam realizó un análisis técnico de este incidente por primera vez y resumió las precauciones de seguridad, con la esperanza de que los proyectos posteriores puedan aprender de él y construir una línea de defensa de seguridad para la industria de la cadena de bloques.

1. Análisis de eventos

Dirección del atacante:

0x092123663804f8801b9b086b03B98D706f77bD59

0x592340957eBC9e4Afb0E9Af221d06fDDDF789de9

Contrato de ataque:

0xAF54612427d97489707332efe0b6290F129DbAcb

0x03ecf0d22f9ccd21144a7d492cf63b471916497a

0x7dc86183274b28e9f1a100a0152dac975361353d (contrato de implementación)

0xc503893b3e3c0c6b909222b45f2a3a259a52752d (contrato de propuesta falso)

Contrato atacado:

0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce

Iniciar una transacción de propuesta:

0x34605f1d6463a48b818157f7b26d040f8dd329273702a0618e9e74fe350e6e0d

Transacciones de ataque:

0x3274b6090685b842aca80b304a4dcee0f61ef8b6afee10b7c7533c32fb75486d

Proceso de ataque:

(1) Primero, el atacante (0x08e80ecb) inicia una propuesta al contrato atacado (0x5efda50f), afirmando que esta propuesta es un complemento de la Proposición 16

(2) Pero en realidad hay una función adicional de autodestrucción en la propuesta.

(3) Desafortunadamente, la comunidad no encontró ningún problema en esta propuesta y la mayoría de los miembros votaron para aprobar esta propuesta.

(4) El atacante creó muchos contratos para implementar la transferencia de tokens

(5) El atacante (0x08e80ecb) destruye el contrato de propuesta (0xc503893b) y su contrato de creación (0x7dc86183). El contrato de ataque (0xc503893b) se volvió a implementar posteriormente en la misma dirección.

(6) Después de modificar el contrato de propuesta, el atacante (0x08e80ecb) ejecuta la propuesta y modifica la cantidad de token lock de la dirección del contrato bajo su control a 10000.

(7) Después de ejecutar la propuesta, el atacante (0x08e80ecb) transfiere los tokens a su propia dirección y obtiene la propiedad del contrato atacado.

Análisis de vulnerabilidad: dado que el contrato de creación (0x7dc86183) del contrato de propuesta (0xc503893b) se implementa a través de creat2, después de que se destruyen los dos contratos, se puede implementar un nuevo contrato lógico en la misma dirección y se llama a la ejecución de la propuesta en el formulario de una llamada delegada El contrato atacante puede modificar arbitrariamente el valor en el contrato atacado.

Resumen del incidente: El motivo de este incidente fue que la comunidad no descubrió los riesgos en la propuesta al verificar la propuesta y no verificó cuidadosamente si el código del contrato de propuesta tenía vulnerabilidades de seguridad.

2. Recomendaciones de seguridad

En respuesta a este ataque, debemos seguir las siguientes precauciones durante el proceso de desarrollo:

  • Al diseñar propuestas, considere completamente la seguridad del mecanismo de propuestas y minimice el riesgo de que las propuestas sean controladas centralmente Considere reducir el valor de los ataques, aumentar el costo de obtener derechos de voto y aumentar el costo de ejecutar ataques, etc.
  • Antes de votar sobre la propuesta, la comunidad debe verificar cuidadosamente si el código del contrato tiene una puerta trasera.
  • Antes de que se apruebe la propuesta, se puede contactar a una empresa de auditoría de seguridad de terceros para realizar una auditoría de seguridad del código lógico del contrato.
Ver originales
  • Recompensa
  • Comentar
  • Compartir
Comentar
Sin comentarios
  • Tema