Атака повторного входа (Reentrancy)
Что такое Атака повторного входа (Reentrancy)?
Атака повторного входа (Reentrancy)Эксплойт смарт-контракта, в котором внешний вызов позволяет атакующему рекурсивно повторно входить в функцию до обновления состояния и опустошать средства.
Reentrancy возникает, когда контракт отправляет ETH или токены на внешний адрес (через call, transfer или ERC-777-хук) до того, как обновит собственное состояние. Атакующий управляет этим адресом и в обратном вызове снова обращается к функции вывода, повторяя цикл до опустошения контракта. Существуют варианты: однофункциональный, межфункциональный, межконтрактный и read-only. Меры защиты: шаблон checks-effects-interactions, ReentrancyGuard от OpenZeppelin, паттерн pull-payment и отказ от низкоуровневых вызовов недоверенных контрактов. Атака на The DAO в 2016 году — канонический пример, приведший к хардфорку Ethereum и Ethereum Classic.
● Примеры
- 01
Взлом The DAO (июнь 2016) увёл около 3,6 млн ETH через рекурсивные вызовы splitDAO.
- 02
Инцидент в Cream Finance в 2021 году использовал межфункциональную реентрантность через колбэки ERC-777.
● Частые вопросы
Что такое Атака повторного входа (Reentrancy)?
Эксплойт смарт-контракта, в котором внешний вызов позволяет атакующему рекурсивно повторно входить в функцию до обновления состояния и опустошать средства. Относится к категории Web3 и блокчейн в кибербезопасности.
Что означает Атака повторного входа (Reentrancy)?
Эксплойт смарт-контракта, в котором внешний вызов позволяет атакующему рекурсивно повторно входить в функцию до обновления состояния и опустошать средства.
Как работает Атака повторного входа (Reentrancy)?
Reentrancy возникает, когда контракт отправляет ETH или токены на внешний адрес (через call, transfer или ERC-777-хук) до того, как обновит собственное состояние. Атакующий управляет этим адресом и в обратном вызове снова обращается к функции вывода, повторяя цикл до опустошения контракта. Существуют варианты: однофункциональный, межфункциональный, межконтрактный и read-only. Меры защиты: шаблон checks-effects-interactions, ReentrancyGuard от OpenZeppelin, паттерн pull-payment и отказ от низкоуровневых вызовов недоверенных контрактов. Атака на The DAO в 2016 году — канонический пример, приведший к хардфорку Ethereum и Ethereum Classic.
Как защититься от Атака повторного входа (Reentrancy)?
Защита от Атака повторного входа (Reentrancy) обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Атака повторного входа (Reentrancy)?
Распространённые альтернативные названия: Рекурсивный вызов.
● Связанные термины
- web3№ 1056
Безопасность смарт-контрактов
Практика проектирования, проверки и эксплуатации программ on-chain так, чтобы их нельзя было использовать для кражи средств или нарушения бизнес-правил.
- web3№ 1055
Аудит смарт-контрактов
Независимая проверка исходного кода смарт-контракта, конфигурации деплоя и экономической модели перед запуском или обновлением.
- web3№ 424
Атака с использованием flash-кредита
Эксплойт DeFi, при котором атакующий в одной транзакции берёт огромный беззалоговый flash-кредит, чтобы манипулировать ценами или управлением и вывести средства до возврата.
- web3№ 106
Безопасность блокчейна
Направление, защищающее распределённые реестры, их механизмы консенсуса, смарт-контракты и связанную инфраструктуру от компрометации, мошенничества и хищений.
- vulnerabilities№ 895
Состояние гонки
Дефект, при котором безопасность или корректность системы зависит от тайминга или порядка параллельных операций, позволяя атакующему вклиниваться и обходить проверки.
- web3№ 765
Манипуляция оракулом
Атака, искажающая цену или поток данных, на которые опирается смарт-контракт, чтобы он принимал неверные решения о кредитах, ликвидациях и расчётах.