Análisis de smart contracts
12.04.2024

Descripción del detector de Proxy

Continuamos nuestra serie de artículos dedicados a describir esquemas fraudulentos en los contratos inteligentes. Hoy hablaremos de los contratos inteligentes controlados por proxy (Proxy).

Los contratos inteligentes controlados por proxy han ganado popularidad en el espacio blockchain debido a su modernizabilidad y flexibilidad. Sin embargo, estos contratos también conllevan un gran peligro, especialmente cuando los utilizan actores maliciosos. Los estafadores suelen utilizar esquemas engañosos en los contratos inteligentes proxy para estafar a los usuarios. Para identificar estas amenazas, necesitas comprender los posibles riesgos y ser técnicamente experto.

Echemos un vistazo más de cerca a la descripción de los peligros potenciales, los esquemas engañosos más comunes y cómo identificar dichas amenazas en los contratos inteligentes proxy.

Los peligros de los contratos inteligentes proxy son:

  1. Actualizaciones no autorizadas:
    Los contratos proxy permiten al propietario actualizar el contrato subyacente. Sin embargo, si este mecanismo no se implementa de forma segura, puede dar lugar a actualizaciones no autorizadas, permitiendo a los atacantes inyectar código malicioso en el contrato.

  2. Llamadas externas no verificadas:
    Los programadores deshonestos pueden utilizar llamadas externas a contratos no fiables sin la verificación adecuada. Esto puede dar lugar a vulnerabilidades, incluyendo ataques de reentrada, en los que contratos maliciosos llaman repetidamente a un contrato proxy, lo que puede agotar sus fondos.

  3. Falta de transparencia:
    El código fuente del contrato de gestión no suele verificarse.

  4. Proyectos falsos:
    Los estafadores crean proyectos falsos que prometen características atractivas, como altos rendimientos o una funcionalidad única. Pueden utilizar contratos indirectos para crear una apariencia de legitimidad mientras ocultan intenciones maliciosas.

  5. Esquemas Ponzi:
    Los estafadores crean esquemas Ponzi basados en contratos proxy, atrayendo a los usuarios con promesas de grandes beneficios. Estos esquemas pueden tener componentes actualizables para mantener la ilusión de verosimilitud.

  6. Contratos clonados:
    Los estafadores clonan proyectos legítimos e introducen vulnerabilidades o cambios en el contrato clonado. Los usuarios desprevenidos pueden interactuar con dichos clones, confundiéndolos con el original.

¿Cómo puedes detectar de forma independiente la presencia de tales amenazas en los contratos inteligentes?

Cabe señalar que si el código de destino de un contrato inteligente contiene una referencia a un contrato externo (Proxy), en casi el 100% de los casos este contrato Proxy tendrá un código fuente oculto. En este caso, el contrato de control externo puede realizar absolutamente cualquier acción como con el contrato objetivo (por ejemplo: cambiar los saldos de los usuarios, activar y desactivar el comercio, iniciar la emisión, etc.).

Por lo tanto, conviene entender que trabajar con un contrato inteligente Proxy es un juego de ruleta en el sentido más estricto de la palabra (el casino siempre gana).

Es bastante fácil encontrar referencias al Proxy en un contrato inteligente. Y, como hemos dicho antes, la implementación de las funciones maliciosas se encuentra en el contrato de control, con el contrato inteligente objetivo de aspecto "blanco y esponjoso" (es decir, generalmente está libre de cualquier método que pueda levantar sospechas).

Si quieres determinar por ti mismo si las funciones Proxy están presentes en los contratos inteligentes, los siguientes consejos te serán útiles para hacerlo.

  • Realiza una auditoría del contrato: Antes de trabajar con cualquier contrato inteligente, examina su código fuente y su funcionalidad. Presta atención a la existencia de procesos de actualización bien documentados, mecanismos de control de acceso y transparencia del proyecto.

  • Asegúrate de que el contrato inteligente ha sido sometido a una auditoría de seguridad externa por parte de empresas acreditadas. El informe de la auditoría puede proporcionar información sobre posibles vulnerabilidades.

  • Estudia al equipo de desarrollo del proyecto. Los equipos transparentes y dignos de confianza son menos propensos al fraude.

  • Acércate a la comunidad del proyecto y busca opiniones de otros usuarios que hayan tenido experiencia con el contrato. Los estafadores suelen evitar el debate público.

  • Cuando trabajes con contratos, utiliza software de confianza y herramientas de monedero que proporcionen funciones de seguridad adicionales y protección de las transacciones.

  • Sé precavido al tratar con contratos nuevos y no probados, especialmente con los que prometen grandes beneficios o muestran un comportamiento inusual.

  • Si algo en un contrato parece demasiado bueno para ser verdad o es sospechoso, confía en tu intuición y evítalo.

  • Mantente al día de las últimas novedades de nuestra comunidad (canal de Telegram) y de las mejores prácticas para la detección del fraude (nuestro Blog y canal de YouTube).

 

El escáner de seguridad de Lotus Market encuentra todas las funciones comunes (incluidas las ocultas) de control externo (Proxy). Utiliza nuestra suscripción Premium y protege tus fondos de las amenazas.

 

 

Los siguientes son ejemplos de banderas rojas comunes y patrones sospechosos a los que hay que prestar atención cuando se examinan contratos inteligentes para identificar funcionalidades potencialmente maliciosas. Es importante comprender estas señales para protegerte a ti mismo y a los demás de posibles fraudes. Veamos algunas opciones de patrones de código y consejos para ayudarte a identificar una funcionalidad sospechosa en un contrato inteligente:

 

La regla principal es que si el código de un contrato contiene una llamada a las funciones Call, CallCode o DelegateCall, significa que el contrato llama al código externo y le pasa el control de sus datos.

tips around proxy

Veamos los principales ejemplos de utilización de los contratos Proxy.

1. Variables de almacenamiento no inicializadas.

Una de las vulnerabilidades más comunes en los contratos proxy es el uso indebido de las variables de almacenamiento. Cuando se utiliza un contrato proxy con DelegateCall para llamar a funciones de un contrato de implementación, se modifican las variables de almacenamiento del contrato proxy. Sin embargo, si hay valores no inicializados o valores por defecto en el almacenamiento del contrato proxy, esto puede provocar un comportamiento inesperado.


    contract Implementation {
        address public owner;

        constructor() {
            owner = msg.sender;
        }
    }

En este ejemplo, si la variable owner del contrato Proxy no está inicializada, llamar a owner() en el contrato Proxy devolverá la variable owner del contrato de implementación, que puede no ser lo que el usuario espera.

2. Llamadas externas no verificadas.

Los contratos fraudulentos pueden utilizar llamadas externas a contratos no fiables sin las comprobaciones adecuadas. Si un contrato proxy invoca directa o indirectamente a un contrato malicioso mediante DelegateCall, el contrato malicioso puede realizar acciones arbitrarias, incluidos ataques de reentrada, sin las defensas adecuadas.


    contract Proxy {
        function execute(address target, bytes memory data) external {
            target.delegatecall(data);
        }
    }

Si un usuario envía un contrato arbitrario y datos maliciosos como dirección de destino, puede provocar que se realicen acciones no autorizadas en nombre del usuario.

3. Control de acceso inadecuado.

Los contratos fraudulentos pueden tener controles de acceso inadecuados, que permitan a usuarios no autorizados realizar funciones administrativas. Cuando se utiliza un contrato proxy, debe controlarse cuidadosamente quién tiene permiso para actualizar el contrato de aplicación. Si no se hace así, pueden producirse cambios no autorizados en el comportamiento del contrato.


    contract Proxy {
        address public owner;
        address public implementation;
                                        
        function upgrade(address newImplementation) external {
            require(msg.sender == owner, "Only the owner can upgrade.");
            implementation = newImplementation;
        }
    }

En este ejemplo, si la dirección del propietario no se controla adecuadamente o no hay controles sobre quién puede invocar la función de actualización, personas no autorizadas pueden cambiar la implementación a un contrato malicioso.

4. Riesgos de versionado y gestión.

Los contratos proxy suelen utilizar mecanismos de versionado y gestión para actualizar la lógica del contrato. Si estos mecanismos no se implementan de forma segura, pueden ser vulnerables a ataques o manipulaciones por parte de actores malintencionados.


    contract Proxy {
        address public owner;
        address public implementation;
        address public pendingImplementation;
            
        function upgrade(address newImplementation) external {
            require(msg.sender == owner, "Only the owner can upgrade.");
            pendingImplementation = newImplementation;
        }
        function claimUpgrade() external {
            require(msg.sender == owner, "Only the owner can claim the upgrade.");
            implementation = pendingImplementation;
        }
    }

En este caso, el atacante puede ofrecer un nuevo contrato "limpio" y luego realizar actualizaciones inmediatamente, poniendo en funcionamiento su código malicioso.

tips around proxy

¿A qué debo prestar atención al estudiar los contratos de representación y qué amenazas plantean?

  1. Transferencia no autorizada de fondos:
    Una de las formas más habituales que tienen los estafadores de robar dinero es la transferencia de fondos por parte del titular del contrato a sí mismo o a otra dirección sin autorización.

  2. Puertas traseras ocultas:
    Los estafadores pueden ocultar código malicioso tras nombres de función ofuscados o engañosos, dificultando que los usuarios detecten sus verdaderas intenciones. Nombres de funciones no ofuscados o engañosos. Sentencias condicionales que conceden privilegios especiales a direcciones específicas.

  3. Falsos tokens e intercambios:
    Los estafadores suelen crear falsos tokens o falsas plataformas de intercambio para engañar a los usuarios y que transfieran sus activos a un contrato malicioso. Busca contratos de tokens cuyo comportamiento sea sospechoso, como acuñar tokens ilimitados o aceptar transferencias no autorizadas.

  4. Funciones de emisión o transferencia de propiedad no autorizadas:
    Un contrato externo puede cambiar el propietario de los tokens o desencadenar una nueva emisión, provocando la inflación de los precios.

  5. Documentación engañosa o comentarios incoherentes con el comportamiento del código:
    Los estafadores pueden proporcionar documentación o comentarios engañosos o inexactos en su código para engañar a los usuarios sobre la verdadera funcionalidad del contrato. Comprueba siempre la documentación con el comportamiento real del código.

  6. Falta de comprobaciones de seguridad:
    Desconfía de los contratos que carecen de comprobaciones de seguridad adecuadas, controles de acceso, o no implementan protecciones contra vulnerabilidades comunes como la reentrada. Cuando consideres un contrato inteligente, examina siempre el código, busca diseños bien documentados y transparentes, comprueba las auditorías de seguridad externas y estudia los comentarios de la comunidad. Además, ten cuidado al interactuar con contratos que presenten alguno de los atributos anteriores, ya que pueden estar diseñados para robar fondos o llevar a cabo otras actividades maliciosas.

  7. Expresiones condicionales complejas:
    Los estafadores pueden utilizar expresiones condicionales complejas o una lógica difícil de seguir, lo que dificulta la comprensión de la verdadera funcionalidad del contrato. Busca código innecesariamente enrevesado: lógica demasiado compleja o poco clara, y condiciones irrelevantes para la finalidad del contrato.

  8. Patrones de gobierno y propiedad poco claros:
    Los defraudadores suelen utilizar contratos de representación con acuerdos de gobierno poco claros o estructuras de propiedad ocultas, lo que dificulta que los usuarios determinen quién controla el contrato.

  9. Imitación de proyectos conocidos:
    Los estafadores suelen crear contratos que imitan la funcionalidad o el aspecto de proyectos conocidos y legítimos. Comprueba siempre la autenticidad del proyecto y asegúrate de que no es falso. Presta atención a las pequeñas diferencias en los nombres, logotipos o marcas. Proyectos que dicen ser oficiales pero no están debidamente validados.

  10. Despliegue apresurado o anónimo:
    Los defraudadores pueden desplegar contratos precipitadamente, sin una identificación clara y con una información mínima sobre el proyecto o sus desarrolladores. Ten cuidado con los contratos desplegados sin la debida diligencia y planificación, lanzados por un equipo desconocido.

  11. Falta de verificación pública o auditoría:
    Si un contrato no ofrece verificación pública del código fuente o no se ha sometido a una auditoría de seguridad por parte de terceros, debe abordarse con extrema precaución.

  12. Almacenamiento de datos no convencional u oculto:
    Los estafadores pueden utilizar esquemas de almacenamiento de datos no convencionales u ocultos para enmascarar la funcionalidad maliciosa. Ten en cuenta que los datos pueden almacenarse en ubicaciones inesperadas dentro del contrato.

  13. Falsos fondos de liquidez:
    En el caso de los proyectos DeFi, debes desconfiar de los fondos de liquidez que prometen grandes rendimientos. Los estafadores pueden crear pools falsos para atraer liquidez y luego explotar a los usuarios. Rentabilidad incoherente de la provisión de liquidez. Falta de transparencia y documentación sobre el mecanismo de funcionamiento del pool.

tips around proxy

Para protegerse contra estas vulnerabilidades, los contratos que utilicen plantillas proxy y DelegateCall deben revisarse y auditarse cuidadosamente, deben implementarse mecanismos de control de acceso y deben asegurarse las llamadas externas. Los usuarios deben tener cuidado al interactuar con los contratos, especialmente los que tienen mecanismos de actualización complejos, y siempre deben realizar la diligencia debida antes de interactuar con un contrato inteligente en la blockchain.

En el mundo en rápida evolución de Blockchain, es imperativo permanecer vigilante e informado para protegerte a ti y a tus activos de posibles esquemas fraudulentos y vulnerabilidades relacionadas con los contratos proxy y las funciones de DelegateCall.

 

Esperamos que esta información te haya ayudado a comprender mejor los esquemas de contratos inteligentes gestionados (Proxy).

 

Dado que toda la información de la cadena de bloques es abierta (siempre que, por supuesto, se verifique el código fuente del contrato), armado con este conocimiento puedes estudiar de forma independiente los contratos inteligentes e identificar diversas estafas.

Sin embargo, ¡ya lo hemos hecho todo por ti! Regístrate para obtener una suscripción Premium y accede a filtros exclusivos sobre las características de los contratos inteligentes y a nuevos análisis. Aumenta tus posibilidades de invertir con éxito en tokens rentables.

Saludos, equipo de Lotus Market.

All posts

Connect to a wallet

Metamask