El 15 de mayo de 2024, Sonne Finance fue atacada y el proyecto perdió más de 20 millones de dólares estadounidenses.

SharkTeam realizó un análisis técnico de este incidente de inmediato y resumió las precauciones de seguridad. Esperamos que los proyectos posteriores puedan aprender de esto y construir conjuntamente una línea de defensa de seguridad para la industria blockchain.

1. Análisis de transacciones de ataque

Atacante: 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43

Contrato de ataque: 0x02fa2625825917e9b1f8346a465de1bbc150c5b9

Contrato de destino: 0xe3b81318b1b6776f0877c3770afddff97b9f5fe5

Transacción de ataque: 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0

El proceso de ataque es el siguiente:

1. Préstamo rápido 35, 569, 150 VELO y transfiera estos tokens VELO al contrato soVELO

Debido a que es una transferencia directa (donación), VELO Token no se acuña. Por lo tanto, en el contrato soVELO, el efectivo total aumentó en 35, 569, 150 VELO, y el suministro total de soVELO permaneció sin cambios.

2. El atacante crea un nuevo contrato 0xa16388a6210545b27f669d5189648c1722300b8b y lanza un ataque al contrato objetivo en el nuevo contrato. El proceso de ataque es el siguiente:

(1) Transferir 2 soVELO al nuevo contrato

(2) Declarar soWETH y soVELO como garantía

(3) Pedir prestado 265, 842, 857, 910, 985, 546, 929 WETH de soWETH

Del proceso de ejecución de la función de préstamo anterior, según el valor de retorno de la función getAccountSnapshot, encontramos:

Para el contrato soWETH, el saldo del nuevo contrato es 0, el monto del préstamo es 0 y el tipo de cambio (exchangeRate) es 208, 504, 036, 856, 714, 856, 032, 085, 073

Para el contrato soVELO, el saldo del nuevo contrato es 2, es decir, se hipotecan 2 wei de soVELO, el monto del préstamo es 0 y el tipo de cambio (tipo de cambio) es 17, 735, 851, 964, 756, 377, 265, 143, 988, 000, 000, 000, 000, 000, 000

El tipo de cambio se calcula de la siguiente manera:

Con 1 wei de soVELO hipotecado, no puede pedir prestado más de 17, 735, 851, 964, 756, 377, 265, 143, 988 VELO, y pedir prestado 265, 842, 857, 910, 985, 546, 929 WETH, necesita hipotecar al menos 265, 842, 857, 910, 985, 546, 929 soWETH,

El precio de soWETH: soWETHPrice = 2, 892, 868, 789, 980, 000, 000, 000,

El precio de soVELO: soVELOPrice = 124, 601, 260, 000, 000, 000

La cantidad de WETH que soVELO puede pedir prestada con una hipoteca de 1 wei es la siguiente:

1 * tipo de cambio * soVELOPrice / soWETHPrice = 763, 916, 258, 364, 900, 996, 923 

Aproximadamente 763 WETH. Sólo 1 wei de la hipoteca soVELO es suficiente para respaldar este préstamo.

El préstamo de 265, 842, 857, 910, 985, 546, 929 WETH (aproximadamente 265 WETH) se convierte en garantía soVELO. La cantidad mínima de soVELO necesaria para ser hipotecado es:

265, 842, 857, 910, 985, 546, 929 * soWETHPrice / soVELOPrice / exchangeRate = 0,348 

Es decir, 1 wei de garantía soVELO es suficiente.

De hecho, se utilizaron 2 wei de la garantía soVELO para pedir prestado solo 1 wei.

(4) Redimir los activos subyacentes, a saber, 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO

tipo de cambio = 17, 735, 851, 964, 756, 377, 265, 143, 988, 000, 000, 000, 000, 000, 000 

La cantidad de garantía soVELO requerida para canjear 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO es

35, 471, 603, 929, 512, 754, 530, 287, 976 * 1 e 18 / tipo de cambio = 1,99999436 

Al realizar el cálculo, debido a que el cálculo utiliza truncamiento en lugar de redondeo, la garantía real requerida calculada es 1 wei de soVELO.

La garantía real son 2 wei de soVELO, de los cuales 1 wei se utiliza para el préstamo anterior de 265 WETH y el 1 wei restante se utiliza para canjear 35 M VELO.

(5) Transferir los 265 WETH prestados y los 35 M VELO canjeados al contrato de ataque

3. Repita 3 veces (4 veces en total) para crear un nuevo contrato y repetir el ataque.

4. Finalmente, reembolse el préstamo flash.

2. Análisis de vulnerabilidad

Durante el ataque anterior se explotaron dos vulnerabilidades:

(1) Ataque de donación: transfiera (done) directamente el token VELO al contrato soVELO, cambiando el tipo de cambio, lo que permite al atacante prestar alrededor de 265 WETH con solo 1 wei soVELO como garantía.

(2) Problema de precisión del cálculo: utilizando la pérdida de precisión durante el proceso de cálculo y el tipo de cambio modificado, se pueden canjear 35 M VELO cuando solo se hipoteca 1 wei soVELO

3. Sugerencias de seguridad

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

(1) Durante el proceso de diseño y desarrollo del proyecto, se debe mantener la integridad y el rigor de la lógica, especialmente las cuestiones de depósito, prenda, actualización de variables de estado y la compensación de los resultados de los cálculos de multiplicación y división durante el proceso. proceso de cálculo. Se deben considerar tantas situaciones como sea posible para que La lógica esté completa y no haya lagunas.

(2) Antes de que el proyecto entre en funcionamiento, una empresa de auditoría profesional externa debe realizar una auditoría de contrato inteligente.

Sobre nosotros

La visión de SharkTeam es proteger el mundo Web3. El equipo está formado por profesionales de seguridad experimentados e investigadores senior de todo el mundo, que dominan la teoría subyacente de blockchain y contratos inteligentes. Proporciona servicios que incluyen identificación y bloqueo de riesgos, auditoría de contratos inteligentes, KYT/AML, análisis en cadena, etc., y ha creado una plataforma inteligente de bloqueo e identificación de riesgos en cadena ChainAegis, que puede combatir eficazmente la amenaza persistente avanzada (Advanced Amenaza persistente) en el mundo Web3, APT). Ha establecido relaciones de cooperación a largo plazo con actores clave en diversos campos del ecosistema Web3, como Polkadot, Moonbeam, Polygon, Sui, OKX, imToken, Collab.Land, TinTinLand, etc.

Sitio web oficial: https://www.sharkteam.org

Twitter: https://twitter.com/sharkteamorg

Telegrama: https://t.me/sharkteamorg

Discordia: https://discord.gg/jGH9xXCjDZ