BTC 104877$
ETH 2527.24$
Tether (USDT) 1$
Toncoin (TON) 2.98$
telegram vk
telegram vk Х
Russian English
"

Что такое атаки с повторным входом в смарт-контракты

Дата публикации:17.05.2024, 11:12
1316
1316
Поделись с друзьями!

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

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

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

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

Что такое атаки с повторным входом в смарт-контрактах?

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

Это позволяет вызываемому контракту повторно войти в вызывающий контракт и, возможно, снова выполнить часть своих операций, что может привести к непредвиденным и часто злонамеренным действиям. Например, ситуация, в которой контракт A вызывает контракт B для отправки средств, а затем изменяет свое собственное состояние. 

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

Несколько протоколов децентрализованного финансирования (DeFi), включая Uniswap, Lend.Me, Burger Swap, SURGEBNB, Cream Finance и Siren Protocol, понесли значительные финансовые потери из-за попыток повторного входа. Эти нарушения привели к убыткам в размере от 3,5 до 25 миллионов долларов, что подчеркивает постоянную угрозу, создаваемую уязвимостями повторного входа в пространство DeFi.

Как работают атаки с повторным входом

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

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

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

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

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

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

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

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

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

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

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

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

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

Использование повторного входа

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

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

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

Манипуляции со стороны государства и неоднократные изъятия средств

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

Последствия атак с повторным входом

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

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

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

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

Как предотвратить атаки с целью повторного входа в систему

Для предотвращения атак с повторным входом необходимо внедрять передовые методы создания интеллектуальных контрактов и аудита. 

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

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

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

Подписывайся на наш Telegram канал. Не трать время на мониторинг новостей. Только срочные и важные новости

https://t.me/block_chain24