В мире криптовалют безопасность нередко определяется не только надёжностью блокчейна, но и качеством программного кода. Иногда одной ошибки в смарт-контракте* (умном контракте) оказывается достаточно, чтобы злоумышленники вывели десятки миллионов долларов, а доверие к криптопроекту оказалось подорвано всего за несколько часов.
* Смарт-контракт (умный контракт) — программный код, размещённый в блокчейне и выполняющий заранее заданные условия без участия посредников. По сути, это цифровой договор: если наступает определённое событие, смарт-контракт (умный контракт) автоматически выполняет действие, например переводит криптовалюту, распределяет средства, фиксирует сделку или открывает доступ к функции протокола.
Именно так работает атака повторного входа (reentrancy attack) — одна из самых известных и опасных уязвимостей в блокчейн-экосистеме. Несмотря на то что о ней впервые заговорили ещё в 2016 году после взлома The DAO, подобные атаки продолжают происходить и сегодня, становясь всё более сложными и изощрёнными.
Когда смарт-контракт (умный контракт) делает одно и то же дважды
Чтобы понять принцип атаки повторного входа, необязательно разбираться в программировании.
Представьте банкомат, который сначала выдаёт деньги, а лишь затем уменьшает остаток средств на счёте. Если между этими действиями появляется небольшая задержка, злоумышленник теоретически может успеть повторно запросить выдачу денег ещё до того, как система обновит баланс.
В результате банкомат выдаст больше средств, чем должен был.
Похожая ситуация может возникнуть и в смарт-контрактах (умных контрактах). Если программа сначала отправляет пользователю криптовалюту, а только потом фиксирует изменения своего внутреннего состояния, злоумышленник способен повторно вызвать функцию вывода средств до завершения первой операции. Контракт воспринимает каждый новый запрос как законный и снова переводит активы.
Так одна и та же операция выполняется многократно, хотя должна была произойти лишь один раз.
Подобные уязвимости характерны для блокчейнов, поддерживающих работу смарт-контрактов (умных контрактов), включая Ethereum, Solana, TRON, Toncoin и другие аналогичные сети.
Взлом, который изменил историю Ethereum
Самым известным примером атаки повторного входа считается взлом протокола The DAO.
В 2016 году проект называли будущим децентрализованных инвестиций. Ему удалось привлечь около 150 миллионов долларов в ETH — по тем временам это была рекордная сумма. Однако успех оказался недолгим.
Злоумышленники обнаружили ошибку в логике смарт-контракта (умного контракта) и воспользовались атакой повторного входа, постепенно выводя средства. Общий ущерб составил около 70 миллионов долларов.
Но финансовые потери оказались лишь частью проблемы.
Инцидент вызвал серьёзный кризис внутри сообщества Ethereum. Чтобы вернуть украденные средства инвесторам, разработчики приняли беспрецедентное решение — провести хардфорк (разделение сети)* блокчейна. Именно после этих событий появились две самостоятельные сети: современный Ethereum и Ethereum Classic.
* Хардфорк (разделение сети) — радикальное обновление правил работы блокчейна, которое несовместимо со старой версией сети. После хардфорка (разделения сети) участники должны перейти на новое программное обеспечение, иначе они продолжат работать по прежним правилам. Если часть сообщества поддерживает обновление, а другая часть остаётся на старой версии, блокчейн может разделиться на две независимые сети с общей историей до момента разделения.
Фактически одна ошибка в смарт-контракте (умном контракте) изменила дальнейшую историю всей экосистемы.
Curve Finance: проблема оказалась не в контракте
Спустя несколько лет стало очевидно, что даже опытные команды не застрахованы от подобных инцидентов.
Летом 2023 года жертвами атаки стали отдельные пулы стейблкоинов (стабильных монет) крупнейшей децентрализованной биржи Curve Finance.
Причиной оказался не сам протокол, а ошибка в некоторых версиях языка программирования Vyper, который использовался при создании смарт-контрактов (умных контрактов). Из-за этой ошибки встроенная защита от повторного входа работала некорректно.
Хакеры быстро воспользовались ситуацией и вывели криптовалюту примерно на 47 миллионов долларов.
По данным Ancilia, уязвимую версию Vyper использовали более двухсот смарт-контрактов (умных контрактов). После обнаружения проблемы разработчикам пришлось в экстренном порядке обновлять их до безопасных версий.
Этот случай ещё раз показал, что источником угрозы может стать не только логика самого проекта, но и инструменты, которыми пользуются разработчики.
Когда атака выходит за пределы одного блокчейна
Современные атаки повторного входа уже давно перестали ограничиваться одним блокчейном.
Ярким примером стал инцидент с межсетевым мостом Wintermute, обеспечивавшим взаимодействие между Ethereum и OP Mainnet (ранее Optimism).
Мосты используются для передачи криптоактивов между различными блокчейнами. Поскольку сами сети не способны напрямую обмениваться данными, такие протоколы подтверждают перевод в одной сети и выпускают либо разблокируют соответствующие активы в другой.
Именно сложность подобных механизмов нередко становится их слабым местом.
В случае Wintermute злоумышленникам удалось воспользоваться особенностями обработки межсетевых операций, получить контроль над адресом и вывести около 20 миллионов токенов (цифровых активов) OP.
Подобные атаки показывают, насколько сильно изменилась архитектура современных блокчейн-проектов. Если раньше злоумышленники эксплуатировали отдельную функцию одного контракта, то сегодня они ищут ошибки в целых цепочках взаимодействия между различными протоколами.
Почему атака повторного входа считается одной из самых опасных
По оценкам аналитиков Gate, только в период с 2016 по 2021 год различные ошибки в смарт-контрактах (умных контрактах) привели к потерям, превышающим один миллиард долларов. Значительная часть этих инцидентов была связана именно с атаками повторного входа.
Однако ущерб измеряется не только похищенными средствами.
После подобных взломов проекты теряют репутацию, пользователи массово выводят активы, стоимость нативных криптовалют проектов снижается, а разработчики вынуждены срочно исправлять ошибки и проводить дополнительные проверки безопасности.
Вместе с тем именно громкие взломы подтолкнули индустрию к развитию новых механизмов защиты.
Одним из таких направлений стали программы bug bounty (программы поиска уязвимостей)*.
* Bug bounty (программа поиска уязвимостей) — программа вознаграждений за поиск уязвимостей, при которой проект официально приглашает независимых исследователей безопасности проверять его код, смарт-контракты (умные контракты), сайты или инфраструктуру. Если специалист находит ошибку и ответственно сообщает о ней команде проекта, он получает денежное вознаграждение. Для криптоиндустрии такие программы особенно важны: они позволяют находить критические уязвимости до того, как ими воспользуются злоумышленники, а проектам часто обходятся дешевле, чем последствия реального взлома.
По данным Immunefi, к 2025 году подобные программы превратились в один из важнейших инструментов обеспечения безопасности блокчейн-проектов.
Как изменились атаки повторного входа
Если во времена The DAO злоумышленникам было достаточно найти ошибку в одной функции смарт-контракта (умного контракта), то сегодня сценарии атак стали значительно сложнее.
Исследователи информационной безопасности выделяют сразу несколько разновидностей подобных атак.
Межконтрактные (cross-contract) используют взаимодействие нескольких смарт-контрактов (умных контрактов).
Межфункциональные (cross-function) основаны на повторном вызове различных функций внутри одного контракта.
Межсетевые (cross-chain) затрагивают операции между несколькими блокчейнами и мостами.
Наконец, существуют атаки на чтение данных (read-only reentrancy) — атаки, при которых злоумышленник не изменяет состояние смарт-контракта (умного контракта) напрямую, а манипулирует логикой протокола, используя временно некорректные данные.
Поэтому современные проверки безопасности давно перестали ограничиваться анализом отдельных функций. Разработчикам приходится моделировать десятки различных сценариев взаимодействия между контрактами, внешними сервисами и блокчейн-сетями.
Можно ли полностью защититься от атаки повторного входа
Абсолютной защиты от подобных атак сегодня не существует. Даже проекты, регулярно проходящие аудит безопасности, время от времени сталкиваются с новыми типами уязвимостей.
Тем не менее риск можно существенно снизить.
Перед использованием нового протокола стоит обратить внимание на результаты независимых аудитов и рейтинг безопасности проекта. Например, сервис CertiK Skynet публикует информацию о проверках смарт-контрактов (умных контрактов) и текущем уровне защищённости многих популярных платформ.
Разработчикам важно регулярно проводить комплексный аудит не только отдельных функций, но и всей архитектуры приложения, включая взаимодействие с внешними контрактами и межсетевыми мостами.
Пользователям также не следует забывать о базовых принципах управления рисками. Не стоит хранить весь капитал в одном протоколе или одном пуле ликвидности. Даже крупнейшие DeFi-проекты (децентрализованные финансовые проекты) не способны гарантировать стопроцентную защиту от программных ошибок.
Разумная диверсификация активов и использование зрелых платформ с длительной историей работы позволяют значительно снизить вероятность серьёзных потерь в случае успешной атаки.