Resumen: Los ataques de reentrada son esencialmente similares a las llamadas recursivas en la programación, pueden ocurrir cuando un contrato envía Ethereum a una dirección desconocida, amenazando la seguridad de los contratos inteligentes de Ethereum. Sabiendo que Chuangyu Blockchain Security Lab comienza con cuatro aspectos del método de transferencia, la función de respaldo, el código de vulnerabilidad y el análisis del código fuente, un análisis en profundidad de la causa del ataque y una explicación detallada del incidente DAO. El concepto de contrato inteligente (inglés: Smart contract) fue propuesto por primera vez por Nick Szabo en 1995. Es un protocolo informático diseñado para difundir, verificar o ejecutar contratos de manera informatizada, transacciones de confianza, que son rastreables e irreversibles. Sin embargo, los contratos inteligentes no son seguros. La vulnerabilidad de ataque Re-Entrance es uno de los métodos de ataque en Ethereum. Ya en 2016, el evento DAO provocó una bifurcación dura de Ethereum. En Ethereum, los contratos inteligentes pueden llamar al código de otros contratos externos. Dado que los contratos inteligentes pueden llamar a contratos externos o enviar ether, estas operaciones requieren contratos para enviar llamadas externas, por lo que los atacantes pueden usar estas llamadas externas para provocar ataques. contrato para ser re-ejecutado en cualquier posición, pasando por alto las restricciones en el código original, por lo que se producen ataques de reingreso. Los ataques de reentrada son esencialmente similares a las llamadas recursivas en la programación, por lo que pueden ocurrir cuando un contrato envía ether a una dirección desconocida. En pocas palabras, hay dos condiciones para una vulnerabilidad de ataque de reentrada: se llama a un contrato externo y el contrato es inseguro. La llamada de función del contrato externo es anterior a la modificación de la variable de estado. Aquí hay un ejemplo de fragmento de código simple : Arriba El fragmento de código es la operación de retiro más simple. A continuación, analizaremos en detalle las razones del ataque de reentrada. CEO de Polygon Studios: Polygon estará profundamente involucrado en los campos de arte y PFP en 2023: Noticias del 27 de diciembre, el CEO de Polygon Studios, Ryan Wyatt, dijo: En 2022, Polygon establecerá o ampliará la cooperación con OpenSea, Magic Eden, Coinbase, Robinhood y Phantom relaciones, y ha estado involucrado en juegos, DeFi y música. Polygon estará profundamente involucrado en PFP y las artes en 2023. [2022/12/28 22:11:26] Antes de analizar formalmente los ataques de reentrada, presentemos algunos conocimientos clave. El método de transferencia se enviará durante la operación de transferencia debido a los ataques de reingreso, y los métodos de transferencia comúnmente utilizados en Solidity son <address>.transfer(), <address>.send() y <address>.gas ().call.vale()(), los siguientes tres métodos de transferencia se describen a continuación: <address>.transfer(): solo se enviarán 2300 gas para llamar, y cuando el envío falla, se realizará la operación de reversión a través del tiro, evitando así el ataque de reentrada. <dirección>.send(): Solo se enviarán 2300 gas para llamar, y se devolverá el valor booleano falso cuando falle el envío, evitando así ataques de reentrada. <address>.gas().call.vale()(): todo el gas se enviará al llamar, y el valor booleano falso se devolverá cuando falle el envío, lo que no puede prevenir eficazmente los ataques de reingreso. función alternativa Shanghái: Aplicación en profundidad de blockchain para mejorar las funciones de liquidación transfronteriza en línea: Jinse Finance informó que el Gobierno Popular Municipal de Shanghái emitió hoy las "Opiniones de implementación sobre la aceleración del desarrollo de nuevos modelos comerciales y nuevos modelos de comercio exterior en este City", que señaló que se explorará la aplicación de la tecnología blockchain en el campo de la segmentación comercial, la construcción de una plataforma de promoción de transacciones comerciales digitales, la aplicación profunda de la tecnología blockchain y big data, y la mejora de las funciones de liquidación transfronteriza en línea. [2021/10/15 20:32:30] A continuación, expliquemos la función de respaldo. Función alternativa: la función alternativa es una y solo una función sin nombre en cada contrato, y esta función no tiene parámetros ni valor de retorno, como se muestra a continuación: function() public payable{ La función alternativa se ejecuta en las siguientes situaciones: ninguna función coincide cuando se llama al contrato; no se pasan datos; el contrato inteligente recibe ether (para aceptar ether, la función de reserva debe marcarse como pagadera). El código debajo del código de vulnerabilidad tiene un ataque de reingreso. Implementa un contrato similar a una billetera pública. Todos los usuarios pueden usar deposit() para depositar en el contrato de reingreso, o usar retirar() para retirarse del contrato de reingreso. Por supuesto, todos también pueden usar balanceof() para consultar el saldo de ellos mismos o de otros en el contrato. Primero use una cuenta (0x5B38Da6a701c568545dCfcB03FcB875f56beddC4) para actuar como víctima y haga clic en el botón Implementar para implementar el contrato en el IDE de Remix. Universidad Central de Finanzas y Economía: Cooperación profunda con el Banco de China en el campo del renminbi digital: Jinse Finance informó que la Universidad Central de Finanzas y Economía firmó recientemente un acuerdo de cooperación estratégica con el Banco de China. economía digital y renminbi digital para promover la implementación de proyectos de cooperación. Según el acuerdo, las dos partes llevarán a cabo una cooperación más profunda en los campos del acoplamiento del sistema banco-escuela y el renminbi digital. (Cuenta oficial de la Universidad Central de Finanzas y Economía) [2021/10/5 17:24:39] Después de implementar el contrato con éxito, complete 5 en el cuadro de configuración de VALOR, cambie la unidad a éter y haga clic en depositar para depositar 5 éteres. Haga clic en monedero para ver el saldo del contrato y descubra que el saldo es de 5 ether, lo que indica que nuestro depósito se realizó correctamente. El siguiente código es un ataque contra el contrato vulnerable anterior: use otra cuenta (0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2) para actuar como atacante, copie la dirección del contrato vulnerable en el cuadro de configuración Implementar y haga clic en Implementar para implementar el contrato de ataque anterior. El Tribunal Provincial de Jilin promueve aún más la aplicación innovadora de la tecnología blockchain: según las noticias del 2 de marzo, recientemente, el Tribunal Provincial de Jilin ha realizado más implementaciones en la seguridad de la red y la construcción de informatización de los tribunales de la provincia este año. Entre ellos, el contenido de implementación incluye la integración de varios recursos de datos para realizar el almacenamiento masivo, la clasificación científica, la recuperación múltiple y el análisis en profundidad de los recursos de información judicial. Promueva profundamente la aplicación innovadora de la tecnología blockchain y acelere de manera integral la investigación y el desarrollo de aplicaciones innovadoras en 9 escenarios comerciales. (Jilin Daily) [2020/3/2] Después de una implementación exitosa, primero llame a la función wallet() para verificar que el saldo del contrato de ataque sea 0. El atacante primero deposita 1 éter en el contrato vulnerable, aquí establece el VALOR en 1 éter y luego hace clic en el depósito del contrato de ataque para realizar un depósito. Vuelva a llamar a la función de billetera del contrato para verificar el saldo del contrato vulnerable y descubra que se ha convertido en 6 ether. El atacante (0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2) llama a la función de ataque del contrato de ataque para simular el ataque y luego llama a la función de billetera del contrato atacado para verificar el saldo del contrato y descubre que ha vuelto a cero. al contrato de ataque para verificar el saldo, y descubre que 6 ether en el contrato atacado Todos los fondos se han retirado al contrato del atacante, lo que provocó un ataque de reingreso. Noticias | China Telecom BestPay llevará a cabo una profunda cooperación en innovación técnica en la aplicación central de blockchain: Jinse Finance informa que China Telecom BestPay profundizará la cooperación en innovación \"5G+tecnología financiera\", en innovación de medios de pago, marketing de precisión del usuario, En términos de otorgamiento de crédito inteligente, control de riesgo inteligente, asesoría de inversión inteligente y aplicaciones centrales de blockchain, etc., llevar a cabo una cooperación profunda en innovación tecnológica y explorar el nuevo modelo de \"5G+tecnología financiera\". [2019/12/12] Análisis del código fuente Lo anterior explica cómo llevar a cabo ataques de reentrada y las causas de las vulnerabilidades. Aquí clasificamos el código fuente de las vulnerabilidades y los pasos del ataque, y enumeramos los códigos clave. El 17 de junio de 2016, el proyecto TheDAO sufrió un ataque de reingreso, lo que resultó en la separación de más de 3 millones de Ethereum del grupo de activos de TheDAO, y el atacante usó la función splitDAO() en el contrato inteligente de TheDAO para reutilizar su propio transporte de activos de DAO. realizar ataques de reingreso, separando constantemente los activos DAO del conjunto de activos del proyecto TheDAO y transfiriéndolos a sus propias cuentas. El siguiente código es parte del código en la función splitDAO(), el código fuente está en TokenCreation.sol, transferirá tokens del DAO principal al DAO secundario. La matriz de saldos uint fundToBeMoved = (balances[msg.sender] * p.splitData.splitBalance) / p.splitData.totalSupply determina la cantidad de tokens que se moverán. El siguiente código es para la operación de recompensa de retiro, cada vez que el atacante llama a esta función, p.splitData es el mismo (es un atributo de p, es decir, un valor fijo), y p.splitData.totalSupply y saldos El valor de [msg.sender] ocurrió después de la operación de transferencia debido al orden de las funciones y no se actualizó. payOut[_account] += recompensa La variable de estado actualizada se coloca después de la llamada a la función payOut en el código en cuestión. Emita una llamada .call.value a _recipient, transfiera _amount Wei y la llamada .call.value utilizará todo el gas restante actual de forma predeterminada. A través del análisis anterior del ataque de reentrada, podemos encontrar que el punto clave de la vulnerabilidad del ataque de reentrada es usar funciones como fallback para volver a llamar a sí mismo para hacer que las llamadas recursivas realicen operaciones de transferencia circular. Por lo tanto, existen las siguientes soluciones para la vulnerabilidad de ataque de reentrada. Use otras funciones de transferencia para usar la función transfer() incorporada de Solidity cuando envíe transferencias de Ethereum a direcciones externas, porque transfer() solo enviará 2300 gas para llamar cuando transfiera dinero, que no será suficiente para llamar a otro contrato, use transfer( ) reescribe el retiro () del contrato original de la siguiente manera: Modifica primero la variable de estado De esta manera se asegura que la modificación de la variable de estado sea anterior a la operación de transferencia, es decir, el modo de controles-efectos-interacciones (controles- efectos-interacciones) recomendado oficialmente por Solidity. Use un mutex Un mutex es para agregar una variable de estado que bloquea el contrato durante la ejecución del código para evitar ataques de reingreso.
Tags:
En Internet, la sostenibilidad de los contenidos se enfrenta a dos problemas básicos: la direccionabilidad y la permanencia. El direccionamiento se refiere a la forma en que los usuarios de Internet encuentran conteni.
Desde las ventas de las principales galerías hasta el Premio Nobel.
Todo puede ser NFT. Recientemente, NFT se ha hecho cargo con éxito de DeFi y se ha convertido en un nuevo tema candente en el círculo de divisas. Los efectos de celebridades han jugado un papel muy importante en el de.
Resumen: Los ataques de reentrada son esencialmente similares a las llamadas recursivas en la programación, pueden ocurrir cuando un contrato envía Ethereum a una dirección desconocida.
El Departamento de Justicia de EE. UU. anunció que recuperó parte del rescate en criptomonedas pagado por Colonial Pipeline al ransomware DarkSide.Se informa que Colonial Pipeline.
Datos DeFi 1. El valor de mercado total de DeFi: 92.
Escrito por Li Hua Los agregadores, como Google, Facebook, Uber y Airbnb, son los mayores captadores de valor en Internet. Cuando se digitaliza una industria.