Анализ смарт-контрактов
12.04.2024

Описание детектора Proxy

Продолжаем серию статей, посвященных описанию мошеннических схем в смарт-контрактах. Сегодня мы поговорим о смарт-контракты с функцией прокси-управления (Proxy).

Прокси-смарт-контракты завоевали популярность в блокчейн-пространстве благодаря своей модернизируемости и гибкости. Однако такие контракты таят в себе и большую опасность, особенно при использовании злоумышленниками. Мошенники часто используют обманные схемы в прокси-смарт-контрактах для обмана пользователей. Чтобы определить наличие таких угроз, необходимо понимать возможные риски и быть технически подкованными.

Давайте подробно рассмотрим описание потенциальных опасностей, распространенных схем обмана и способов выявления таких угроз в прокси-смарт-контрактах.

Опасности прокси-смарт-контрактов:

  1. Несанкционированное обновление:
    Прокси-контракты позволяют владельцу обновлять базовый контракт. Однако если этот механизм реализован ненадежно, он может привести к несанкционированному обновлению, что позволит злоумышленникам внедрить в контракт вредоносный код.

  2. Непроверенные внешние вызовы:
    Программисты-мошенники могут использовать внешние вызовы к недоверенным контрактам без надлежащей проверки. Это может привести к уязвимостям, в том числе к атакам типа reentrancy, когда вредоносные контракты неоднократно обращаются к прокси-контракту, что может привести к истощению его средств.

  3. Отсутствие прозрачности:
    Исходный код управляющего контракта, как правило, не верифицирован.

  4. Фальшивые проекты:
    Мошенники создают фальшивые проекты, обещающие привлекательные характеристики, такие как высокая доходность или уникальные функциональные возможности. Они могут использовать прокси-контракты, чтобы создать видимость легитимности, скрывая при этом злой умысел.

  5. Схемы Понци:
    Мошенники строят схемы Понци на основе прокси-контрактов, заманивая пользователей обещаниями высоких доходов. Для поддержания иллюзии правдоподобности такие схемы могут иметь обновляемые компоненты.

  6. Клонированные контракты:
    Мошенники клонируют легитимные проекты и вносят в клонированный контракт уязвимости или изменения. Ничего не подозревающие пользователи могут взаимодействовать с такими клонами, принимая их за оригинал.

Как самостоятельно определить наличие подобных угроз в смарт-контрактах?

Стоит заметить, что если в целевом коде смарт-контракта есть обращение к внешнему контракту (Proxy), то почти в 100% случаев этот Proxy-контракт будет со скрытым исходным кодом. При этом внешний управляющий контракт может выполнять абсолютно любые действия как с целевым контрактом (например: изменение балансов пользователей, включение и выключение торговли, запускать эмиссию и т.д.)

Поэтому стоит понимать, что работа с Proxy смарт-контрактом это игра в рулетку в самом прямом смысле слова (казино всегда выигрывает).

Найти обращения Proxy в смарт-контракте достаточно легко. И, как мы уже сказали ранее, имплементация вредоносных функций находится в управляющем контракте - при этом целевой смарт-контракт выглядит "белым и пушистым" (т.е. в нем, как правило, отсутствуют любые методы, которые могут вызвать подозрение).

Если Вы хотите самостоятельно определять наличие функций Proxy в смарт-контрактах, то следующие советы будут в этом полезны.

  • Провести аудит контрактов: Прежде чем работать с каким-либо смарт-контрактом, изучите его исходный код и функциональность. Обратите внимание на наличие хорошо документированных процессов обновления, механизмов контроля доступа и прозрачности проекта.

  • Убедитесь, что смарт-контракт прошел внешний аудит безопасности, проведенный авторитетными компаниями. Отчет об аудите может дать представление о потенциальных уязвимостях.

  • Изучите команду разработчиков проекта. Прозрачные и заслуживающие доверия команды с меньшей вероятностью будут заниматься мошенничеством.

  • Обратитесь к сообществу проекта и узнайте отзывы других пользователей, имеющих опыт работы с контрактом. Мошенники часто избегают публичного обсуждения.

  • При работе с контрактами используйте известные программы и инструменты для кошельков, которые обеспечивают дополнительные функции безопасности и защиты транзакций.

  • Будьте осторожны при работе с новыми и непроверенными контрактами, особенно с теми, которые обещают высокую доходность или демонстрируют необычное поведение.

  • Если что-то в контракте кажется слишком хорошим, чтобы быть правдой, или вызывает подозрения, доверьтесь своей интуиции и избегайте его.

  • Будьте в курсе последних событий в нашем сообществе (Телеграм-канал) и лучших практик по выявлению мошенничества (наш Блог и YouTube-канал).

 

Сканер безопасности Lotus Market находит все распространенные (в том числе скрытые) функции внешнего управления (Proxy). Используйте нашу премиум подписку и защитите свои средства от угроз.

 

 

Далее мы приведем примеры распространенных "красных флажков" и подозрительных паттернов, на которые следует обратить внимание при изучении смарт-контрактов для выявления потенциально вредоносной функциональности. Важно понимать эти признаки, чтобы защитить себя и других от потенциального мошенничества. Рассмотрим некоторые варианты шаблонов кода и советы, которые помогут вам выявить подозрительную функциональность в смарт-контракте:

 

Основное правило - если в коде контракта есть вызов функций Call, CallCode или DelegateCall значит контракт обращается к внешнему коду и передает ему управление своими данными.

tips around proxy

Рассмотрим основные примеры использования Proxy контрактов.

1. Неинициализированные переменные хранения.

Одной из наиболее распространенных уязвимостей в прокси-контрактах является неправильное использование переменных хранения. Когда прокси-контракт используется с DelegateCall для вызова функций на контракте реализации, переменные хранения прокси-контракта модифицируются. Однако если в хранилище прокси-контракта имеются неинициализированные значения или значения по умолчанию, это может привести к неожиданному поведению.


    contract Implementation {
        address public owner;

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

В данном примере, если переменная owner в контракте Proxy неинициализирована, вызов функции owner() на контракте proxy вернет переменную owner контракта реализации, что может оказаться не тем, чего ожидает пользователь.

2. Непроверенные внешние вызовы.

Мошеннические контракты могут использовать внешние вызовы ненадежных контрактов без надлежащих проверок. Если прокси-контракт прямо или косвенно вызывает вредоносный контракт через DelegateCall, то вредоносный контракт может выполнить произвольные действия, включая атаки реентерабельности, без надлежащих мер защиты.


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

Если пользователь отправляет в качестве целевого адреса произвольный контракт и вредоносные данные, это может привести к выполнению несанкционированных действий от имени пользователя.

3. Неправомерный контроль доступа.

Мошеннические контракты могут иметь неправомерный контроль доступа, что позволяет неавторизованным пользователям выполнять административные функции. При использовании прокси-контракта следует тщательно контролировать, кто имеет разрешение на обновление контракта внедрения. Невыполнение этого требования может привести к несанкционированным изменениям в поведении контракта.


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

В данном примере, если адрес владельца не контролируется должным образом или отсутствуют проверки на то, кто может вызывать функцию обновления, неавторизованные лица могут изменить реализацию на вредоносный контракт.

4. Риски, связанные с версионированием и управлением.

В прокси-контрактах часто используются механизмы версионирования и управления, позволяющие обновлять логику контракта. Если эти механизмы не реализованы надежно, они могут стать уязвимыми для атак или манипуляций со стороны злоумышленников.


    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;
        }
    }

В этом случае злоумышленник может предложить новый "чистый" контракт, а затем сразу же сделать обновления, фактически введя свой вредоносный код в эксплуатацию.

tips around proxy

На что обращать внимание, при изучение Proxy-контрактов и какие угрозы они представляют?

  1. Несанкционированный перевод средств:
    Одним из наиболее распространенных способов хищения денег мошенниками является перевод средств владельцем контракта на себя или на другой адрес без соответствующего разрешения.

  2. Скрытые "черные ходы":
    Мошенники могут скрывать вредоносный код за обфусцированными или вводящими в заблуждение названиями функций, что затрудняет обнаружение пользователями их истинных намерений. Невнятные или вводящие в заблуждение имена функций. Условные операторы, предоставляющие особые привилегии определенным адресам.

  3. Поддельные токены и биржи:
    Мошенники часто создают поддельные токены или поддельные обменные платформы, чтобы обманом заставить пользователей перевести свои активы на вредоносный контракт. Обращайте внимание на контракты с токенами, поведение которых вызывает подозрения, например, они чеканят неограниченное количество токенов или принимают несанкционированные переводы.

  4. Несанкционированная эмиссия или функции передачи владения:
    Внешний контракт может изменить владельца токенов или запустить новую эмиссию, вызывая инфляцию цены.

  5. Вводящая в заблуждение документация или комментарии, не соответствующие поведению кода:
    Мошенники могут предоставлять вводящую в заблуждение или неточную документацию или комментарии в своем коде, чтобы ввести пользователей в заблуждение относительно истинной функциональности контракта. Всегда проводите перекрестную проверку документации с реальным поведением кода.

  6. Отсутствие проверок безопасности:
    Опасайтесь контрактов, в которых отсутствуют надлежащие проверки безопасности, механизмы контроля доступа или не реализованы средства защиты от таких распространенных уязвимостей, как реентерабельность. При рассмотрении смарт-контракта всегда тщательно изучайте код, ищите хорошо документированные и прозрачные проекты, проверяйте внешние аудиты безопасности и изучайте отзывы сообщества. Кроме того, будьте осторожны при взаимодействии с контрактами, в которых присутствуют какие-либо из перечисленных признаков, поскольку они могут быть направлены на хищение средств или осуществление других вредоносных действий.

  7. Сложные условные выражения:
    Мошенники могут использовать сложные условные выражения или логику, за которой трудно уследить, что затрудняет понимание истинной функциональности контракта. Ищите излишне запутанный код: чрезмерно сложную или неясную логику, а также условия, не имеющие отношения к цели контракта.

  8. Неясные схемы управления и владения (Ownership):
    Мошенники часто используют прокси-контракты с неясными механизмами управления или скрытой структурой владения, что затрудняет пользователям определение того, кто контролирует контракт.

  9. Имитация известных проектов:
    Мошенники часто создают контракты, имитирующие функциональность или внешний вид известных, легальных проектов. Всегда проверяйте подлинность проекта и убеждайтесь, что он не является подделкой. Обращайте внимание на незначительные различия в названиях, логотипах или брендинге. Проекты, претендующие на официальность, но не имеющие надлежащего подтверждения.

  10. Поспешное или анонимное развертывание:
    Мошенники могут разворачивать контракты поспешно, без четкой идентификации и с минимальной информацией о проекте или его разработчиках. Обращайте внимание на контракты, развернутые без должной тщательности и планирования, выпущенные неизвестной командой.

  11. Отсутствие публичной верификации или аудита:
    Если контракт не предлагает публичной проверки исходного кода или не прошел аудит безопасности третьей стороной, следует подходить к нему с особой осторожностью.

  12. Необычное или скрытое хранение данных:
    Мошенники могут использовать нетрадиционные или скрытые схемы хранения данных для маскировки вредоносной функциональности. Обращайте внимание, что данные могут хранятся в неожиданных местах в рамках контракта.

  13. Поддельные пулы ликвидности:
    В случае проектов DeFi следует опасаться пулов ликвидности, обещающих высокую доходность. Мошенники могут создавать поддельные пулы для привлечения ликвидности и последующей эксплуатации пользователей. Непостоянно высокие доходы от предоставления ликвидности. Отсутствие прозрачности и документации о механизме работы пула.

tips around proxy

Для защиты от подобных уязвимостей необходимо тщательно проверять и аудировать контракты, использующие прокси-шаблоны и DelegateCall, применять механизмы контроля доступа и обеспечивать безопасность внешних вызовов. Пользователям следует проявлять осторожность при взаимодействии с контрактами, особенно со сложными механизмами обновления, и всегда проявлять должную осмотрительность перед взаимодействием со смарт-контрактом на блокчейне.

В быстро развивающемся мире Blockchain необходимо сохранять бдительность и информированность, чтобы защитить себя и свои активы от возможных мошеннических схем и уязвимостей, связанных с прокси-контрактами и функциями DelegateCall.

 

Надеемся, что эта информация помогла Вам лучше разобраться со схемами управляемых (Proxy) смарт-контрактов.

 

Поскольку вся информация в блокчейне открыта (конечно, при условии верифицированного исходного кода контракта), то вооружившись этими знаниями Вы можете самостоятельно изучать смарт-контракты и выявлять различные схемы скама.

Однако, мы все уже сделали за Вас! Подключайте премиум подписку и откройте для себя доступ к эксклюзивным фильтрам по функциям смарт-контрактов и свежую аналитику. Повысьте шансы на успешные инвестиции в прибыльные токены.

С уважением, команда Lotus Market.

All posts

Connect to a wallet

Metamask