Precio de Bitcoin Precio de Bitcoin
Ctrl+D Precio de Bitcoin
ads
Casa > Filecoin > Info

Práctica de seguridad de contrato inteligente (2) | practica "ojos agudos" para ver los constructores verdaderos y falsos de un vistazo

Author:

Time:

"El verdadero viajero se queja en el monte Luojia, y el falso rey mono transcribe el texto en Shuiliandong".

En "Viaje al Oeste", el macaco de seis orejas finge ser el rey mono Sun Wukong y engaña al monje Tang y a los dioses confundiendo lo falso con lo real. Incluso el espejo del demonio no puede distinguir lo real de lo real. el falso. Ahora, cuando el contrato inteligente se encuentre con el "macaco de seis orejas", ¿qué tipo de chispa creará?

En el contrato inteligente, el constructor es responsable de la inicialización de algunos datos y el valor del propietario generalmente se coloca en el constructor para la inicialización. propietario es el título del propietario del contrato inteligente y, a menudo, se utiliza como superadministrador del contrato. Para el contrato de token, los derechos que se le pueden asignar al propietario incluyen: acuñar/destruir tokens, congelar tokens, etc. Si el desarrollador crea un "constructor" con una sintaxis incorrecta, lo que hace que falten constructores, lo que hace que el "macaco de seis orejas" engañe al desarrollador y, finalmente, haga que el atacante sea el propietario del contrato, entonces el atacante puede depender de la autoridad de el propietario, operaciones como la emisión adicional o la destrucción de tokens pueden provocar el colapso de todo el token.

En el lenguaje Solidity, cuando el nombre de la función es el mismo que el nombre del contrato, esta función es el constructor del contrato. Cuando se crea el objeto del contrato, se llamará primero al constructor para inicializar los datos relevantes.

Ethereum Solidity versión 0.4.22 presenta la palabra clave constructor, una nueva forma de declaración de constructor: constructor() public { }, el propósito de la introducción es reemplazar la forma gramatical en la que se usa el nombre del contrato como nombre del constructor en la versión inferior , De esta manera, se evita el problema del error de nomenclatura del constructor causado por el error administrativo del desarrollador. La palabra clave presentada parece ordinaria, pero tiene un significado profundo, déjame decirte lentamente.

La plataforma de préstamos encriptados CoinLoan coopera con Blaze Information Security para fortalecer la seguridad de la red: según las noticias del 26 de julio, la plataforma de préstamos en criptomonedas CoinLoan cooperó con Blaze Information Security, un proveedor de soluciones de seguridad de redes financieras, para realizar pruebas de seguridad y fortalecer la seguridad de la red. (Beincrypto)[2022/7/26 2:38:16]

Tomemos el título de Fallout del campo de tiro ethernaut como ejemplo para el análisis. A primera vista, este parece ser un código de contrato normal sin lagunas, pero después de una observación cuidadosa, se descubre que hay un error fatal en el contrato: el nombre del constructor no es coherente con el nombre del contrato y el constructor del contrato de Fallout se escribe incorrectamente como Fall1out (la letra l y el número 1), tal error lo convierte en una función ordinaria modificada por public, que pierde la característica de que el constructor solo se llama cuando se implementa el contrato, por lo que cualquiera puede llamarlo El código fuente de este tema se muestra a continuación:

Figura 1

En la función Fall1out, la dirección de la persona que llama a la función se especifica directamente como propietario, por lo que solo es necesario llamar a la función Fall1out para realizar el cambio del propietario del contrato. Como se muestra abajo:

Figura 2

El "rey de los monos falsos" Fall1out quería confundir al público con la diferencia visual de caracteres similares en algunos tipos de fuentes, pero al final no logró escapar de nuestros "ojos dorados".

Incidentes de seguridad similares han ocurrido en el pasado. Los contratos que contenían constructores falsos se lanzaron con éxito a la cadena principal. El más famoso es el "Incidente MorphToken", que provocó que se emitieran adicionalmente miles de Tokens con un valor de mercado de 10,000. Dirección del código de contrato: https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code

En el contrato Owned, debido a la mayúscula incorrecta de la primera letra, Owned, que debería haber sido una función constructora, se ha convertido en una función ordinaria Owned, que es modificada por public y puede ser llamada por cualquier persona. Como se muestra abajo:

Figura 3

El contrato MorphToken hereda el contrato Owned e inicializa el propietario en su propio constructor, pero cualquiera puede llamar a la función owned del contrato principal Owned, y un atacante puede cambiar el propietario del contrato llamando a la función owned. El código de inicialización del propietario se muestra en la siguiente figura:

Figura 4

De lo anterior, podemos ver que cualquiera puede convertirse en propietario del contrato llamando a la función de propiedad del contrato. Como se muestra abajo:

Figura 5

Una pequeña falla, una gran diferencia, un pequeño error de letra, pero provocó el colapso de las fichas del contrato. Los tokens también se emitieron maliciosamente. Como se muestra abajo:

Figura 6

Se recomienda reemplazar Solidity 0.4.22 y superior, y usar la sintaxis constructor() correcta. Como se muestra abajo:

Figura 7

Recuerde: no hay ninguna función antes de constructor(), y la función constructor() public { } es la forma de constructor incorrecta.

Si desea utilizar una versión anterior a la 0.4.22, debe verificar si el nombre de la función es consistente con el nombre del contrato. Como se muestra abajo:

Figura 8

En los contratos inteligentes, debido al descuido de los desarrolladores, los incidentes de brechas de seguridad surgen sin cesar. "El terraplén de mil millas se derrumba en un nido de hormigas". Chengdu Lianan-Security Lab ofrece las siguientes sugerencias:

1.  Al escribir funciones confidenciales de contratos inteligentes (como constructores y funciones de respaldo), los desarrolladores deben seguir estrictamente las especificaciones oficiales de escritura de código y tener cuidado de no cometer errores de caracteres, etc.

2.  En algunos casos, el compilador emitirá una advertencia por el uso incorrecto del constructor, y el desarrollador debe tratarlo correctamente y no puede ignorarlo, ya que es solo un mensaje de advertencia.

3.  Antes de que se lance oficialmente el contrato, es necesario encontrar una organización profesional y creíble para hacer un buen trabajo de auditoría del código del contrato.

Tags:

Filecoin
El segundo trimestre de Ethereum: el número de usuarios se duplicó y el volumen de transacciones aumentó significativamente

El informe de mercado de Dapp.com para el segundo trimestre de 2020 muestra que bajo la catálisis de la fiebre DeFi.

La "moneda falsificada" de DeFi está muy extendida, ¿es demasiado abierta la política de listado de monedas en los intercambios descentralizados?

Los tokens fraudulentos en intercambios descentralizados y fondos de liquidez son un problema creciente debido a la política de cotización pública del protocolo Uniswap.

¿Cuál es la lógica subyacente de la tendencia de digitalización de activos?

Con el desarrollo de la cadena de bloques, hay una tendencia que se hace cada vez más evidente, es decir, la digitalización de los activos.Creo que hoy nadie debería dudar más de esta tendencia, después de todo.

Práctica de seguridad de contrato inteligente (2) | practica "ojos agudos" para ver los constructores verdaderos y falsos de un vistazo

"El verdadero viajero se queja en el monte Luojia, y el falso rey mono transcribe el texto en Shuiliandong".En "Viaje al Oeste".

Golden Hardcore | Las Stablecoins censurables son una garantía DeFi tóxica

Golden Finance lanzó recientemente la columna Hardcore para brindar a los lectores introducciones o interpretaciones detalladas de proyectos populares.Prensa: Recientemente.

Polkadot: ¿Qué es la información externa?

Un extrínseco es una información que proviene de fuera de la cadena y se incluye en un bloque. La información externa se puede dividir en tres categorías: inherentes.

ads