Объяснение реентерабельных атак в смарт-контрактах

Самые главные криптоновости в Телеграм-канале CryptoMoon, присоединяйтесь!👇

Cryptomoon Telegram


Потенциальные уязвимости в смарт-контрактах

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

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

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

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

Что такое повторные атаки в смарт-контрактах? «Атаки повторного входа происходят в смарт-контрактах, когда контракт выполняет внешние вызовы к другим контрактам или функциям до завершения собственных изменений состояния».Вызов контракта A контракта B позволяет контракту B возобновить взаимодействие с контрактом A, потенциально повторяя определенные функции и приводя к неожиданным и часто вредным результатам. Примером может служить случай, когда контракт A инициирует транзакцию с контрактом B для перевода средств, но впоследствии меняет свое состояние во время взаимодействия.Функция обратного вызова в коде контракта B может дать злоумышленнику возможность вмешиваться в переходы состояний контракта A, многократно запуская функцию передачи до ее полного завершения. Это вредоносное действие может привести к тому, что злоумышленник успешно выкачает средства из Контракта А несколько раз в течение одной транзакции.В 2016 году произошел печально известный инцидент с участием децентрализованной автономной организации (DAO) в блокчейне Ethereum. Хакер воспользовался уязвимостью в коде смарт-контракта, называемой реентерабельной атакой, что позволило им неоднократно вытягивать средства из DAO. Результатом стала потеря эфира (ETH) на миллионы долларов.Кроме того, различные платформы децентрализованного финансирования (DeFi), такие как Uniswap, Lendf.Me, BurgerSwap, SURGEBNB, Cream Finance и Siren Protocol, столкнулись с существенными финансовыми неудачами из-за повторных атак. Ущерб, причиненный этими вторжениями, варьировался от 3,5 до 25 миллионов долларов, что подчеркивает сохраняющийся риск недостатков повторного входа в сектор DeFi.

Как работают повторные атаки

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

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

Объяснение реентерабельных атак в смарт-контрактах

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

Давайте разберем, как работают повторные атаки, на упрощенном примере:

Смарт-контракт с функцией «вывода»

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

Взаимодействие с пользователем и выполнение функций

Пользователь самостоятельно инициирует вывод средств со своего цифрового кошелька. Используя функцию вывода средств, они вводят указанную сумму, которую хотят снять.

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

Внешний вызов

На этом этапе уязвимость контракта становится очевидной. Внешний вызов другого контракта или счета происходит до списания вывода с баланса пользователя.

Рекурсивный вызов

Если код внешнего контракта содержит функцию, позволяющую ему еще раз вызвать исходный контракт, например переопределенную функцию «вывода», такая настройка приводит к рекурсивному циклу. Следовательно, метод «вывода» может запускаться неоднократно до его завершения.

Реентерабельность эксплуатации

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

Резервная функция

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

Государственное манипулирование и неоднократный вывод средств

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

Последствия повторных атак Пользователи смарт-контрактов сталкиваются со значительным риском повторных атак из-за возможности существенных денежных потерь.Атаки повторного входа могут привести к несанкционированным результатам транзакций, таким как необоснованное снятие наличных или манипулирование средствами в уязвимых смарт-контрактах. Злоумышленники используют эту слабость, неоднократно получая доступ к ресурсам контракта и истощая их, что приводит к существенному финансовому ущербу для пользователей, которые разместили или удерживали активы в рамках скомпрометированного контракта.Доверие к безопасности и надежности смарт-контрактов и технологии блокчейна может быть подорвано повторными атаками. Эти слабости могут привести к значительному ущербу, о чем свидетельствуют такие заметные инциденты, как взлом DAO в сети Ethereum в 2016 году, который привел к значительным финансовым потерям и репутационному ущербу для сообщества.Как исследователь, изучающий влияние повторных атак на блокчейн-платформы и проекты, я обнаружил, что эти атаки могут иметь далеко идущие последствия, выходящие за рамки краткосрочных финансовых последствий. Например, могут последовать нормативные и юридические проверки, которые подрывают доверие инвесторов и потенциально наносят ущерб репутации затронутых экосистем блокчейна. Такое восприятие уязвимости может заставить пользователей проявлять осторожность при использовании смарт-контрактов или инвестировании в децентрализованные приложения (DApps), что в конечном итоге замедляет внедрение и расширение технологии блокчейна в целом.

Как смягчить атаки повторного входа

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

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

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

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

Смотрите также

2024-05-16 15:45