ataques de denegación de servicio en contratos inteligentes
El ataque de denegación de servicio ( DoS ) puede causar que los contratos inteligentes no funcionen correctamente durante un período de tiempo o incluso de forma permanente. Las principales razones incluyen:
La lógica del contrato tiene defectos. Por ejemplo, algunas funciones públicas no consideran la complejidad computacional, lo que puede superar el límite de Gas y provocar el fallo de la transacción.
En el escenario de llamada entre contratos, la ejecución del contrato depende del estado de contratos externos. La ejecución de contratos externos poco confiable puede bloquear la ejecución de este contrato, como el bloqueo de fondos que impide depósitos y retiros.
Factores humanos, como la pérdida de la clave privada por parte del propietario del contrato, que impiden la actualización del estado crítico del sistema.
A continuación, se analizará la vulnerabilidad de ataque de denegación de servicio (DoS) con ejemplos concretos.
1. Recorrido de estructuras de datos grandes que pueden ser modificadas externamente
A continuación se muestra un contrato simple para "distribuir dividendos" a los usuarios registrados:
El estado del contrato incluye una lista de usuarios registrados y un mapeo de saldos de cuentas. Los usuarios pueden registrarse e inicializar a través de register_account().
El administrador distribuye dividendos a los usuarios a través de distribute_token(), recorriendo el arreglo registered para transferir a cada usuario la cantidad especificada de tokens.
El problema es que el tamaño de registered no tiene restricciones y puede ser manipulado maliciosamente, lo que provoca un consumo de Gas demasiado alto durante la iteración, superando el límite.
Recomendación de solución:
Limitar el tamaño de la estructura de datos, asegurando que incluso al alcanzar el valor máximo no supere el límite de Gas
Adoptar el modo de retiro, primero registrar, el usuario puede retirar las recompensas a través de withdraw.
2. La dependencia del estado entre contratos causa bloqueo
Considera un escenario de "subasta" de contratos:
Registrar el actual máximo postor y la cantidad
Los usuarios pueden registrarse para participar en la puja.
Si la oferta es superior al precio más alto actual, devolver el precio más alto anterior y actualizar el estado
El problema es que el reembolso depende del estado del contrato externo. Si la cuenta del anterior licitador más alto ha sido cancelada, el reembolso fallará, lo que impedirá actualizar el precio más alto y bloqueará todo el proceso de subasta.
Solución:
Considerar que las llamadas externas pueden fallar, implementar un manejo razonable de errores. Por ejemplo, almacenar temporalmente los fondos que no se pueden devolver, y luego permitir que el usuario los retire por separado.
3. Pérdida de la clave privada del administrador
Algunas funciones clave (, como pausar/reiniciar transacciones ), solo pueden ser llamadas por el administrador. La pérdida de la clave privada del administrador hará que estas funciones no estén disponibles, y el contrato podría no funcionar correctamente a largo plazo.
Solución:
Adoptar un mecanismo de múltiples firmas en lugar de un único administrador, lograr una gobernanza descentralizada y evitar fallos de un solo punto.
Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
18 me gusta
Recompensa
18
7
Compartir
Comentar
0/400
NFTFreezer
· 07-16 03:27
Ya se esperaba, ¿no se acabó todo cuando se robó la cuenta?
Ver originalesResponder0
BridgeJumper
· 07-15 12:26
Llave privada, ¿por qué no dices que perdiste los pantalones?
Ver originalesResponder0
AirdropF5Bro
· 07-13 07:29
Jefe, primero firma más, asegúrate.
Ver originalesResponder0
MetaEggplant
· 07-13 07:28
El costo real de la prueba es un poco alto.
Ver originalesResponder0
Ser_This_Is_A_Casino
· 07-13 07:26
Demasiado malo, pensé que dos solo podía hacer web.
Ver originalesResponder0
RiddleMaster
· 07-13 07:13
¡Si pierdes la llave privada, envíala directamente!
Análisis de los riesgos de ataques DoS contra contratos inteligentes y estrategias de prevención
ataques de denegación de servicio en contratos inteligentes
El ataque de denegación de servicio ( DoS ) puede causar que los contratos inteligentes no funcionen correctamente durante un período de tiempo o incluso de forma permanente. Las principales razones incluyen:
La lógica del contrato tiene defectos. Por ejemplo, algunas funciones públicas no consideran la complejidad computacional, lo que puede superar el límite de Gas y provocar el fallo de la transacción.
En el escenario de llamada entre contratos, la ejecución del contrato depende del estado de contratos externos. La ejecución de contratos externos poco confiable puede bloquear la ejecución de este contrato, como el bloqueo de fondos que impide depósitos y retiros.
Factores humanos, como la pérdida de la clave privada por parte del propietario del contrato, que impiden la actualización del estado crítico del sistema.
A continuación, se analizará la vulnerabilidad de ataque de denegación de servicio (DoS) con ejemplos concretos.
1. Recorrido de estructuras de datos grandes que pueden ser modificadas externamente
A continuación se muestra un contrato simple para "distribuir dividendos" a los usuarios registrados:
El estado del contrato incluye una lista de usuarios registrados y un mapeo de saldos de cuentas. Los usuarios pueden registrarse e inicializar a través de register_account().
El administrador distribuye dividendos a los usuarios a través de distribute_token(), recorriendo el arreglo registered para transferir a cada usuario la cantidad especificada de tokens.
El problema es que el tamaño de registered no tiene restricciones y puede ser manipulado maliciosamente, lo que provoca un consumo de Gas demasiado alto durante la iteración, superando el límite.
Recomendación de solución:
2. La dependencia del estado entre contratos causa bloqueo
Considera un escenario de "subasta" de contratos:
El problema es que el reembolso depende del estado del contrato externo. Si la cuenta del anterior licitador más alto ha sido cancelada, el reembolso fallará, lo que impedirá actualizar el precio más alto y bloqueará todo el proceso de subasta.
Solución: Considerar que las llamadas externas pueden fallar, implementar un manejo razonable de errores. Por ejemplo, almacenar temporalmente los fondos que no se pueden devolver, y luego permitir que el usuario los retire por separado.
3. Pérdida de la clave privada del administrador
Algunas funciones clave (, como pausar/reiniciar transacciones ), solo pueden ser llamadas por el administrador. La pérdida de la clave privada del administrador hará que estas funciones no estén disponibles, y el contrato podría no funcionar correctamente a largo plazo.
Solución: Adoptar un mecanismo de múltiples firmas en lugar de un único administrador, lograr una gobernanza descentralizada y evitar fallos de un solo punto.