Анализ инцидента с атакой повторного входа на OrionProtocol
2 февраля 2023 года в послеобеденное время Orion Protocol на Ethereum и Binance Smart Chain подвергся атаке повторного входа из-за уязвимости контракта, в результате чего было потеряно активов на сумму около 2,9 миллиона долларов, включая 2 844 766 USDT на Ethereum и 191 606 BUSD на Binance Smart Chain.
Анализ процесса атаки
Атакующий сначала развернул контракт на создание пользовательского токена и выполнил соответствующие операции по переводу и авторизации, чтобы подготовиться к последующей атаке. Затем атакующий воспользовался функцией swap из Uniswap V2 для заимствования и вызвал метод ExchangeWithAtomic.swapThroughOrionPool протокола OrionProtocol для обмена токенов.
Настройка пути обмена на [USDC, токен атакующего, USDT], где токен атакующего используется для выполнения операции обратного вызова. В процессе обмена, из-за того, что контракт токена атакующего содержит логику обратного вызова, в момент выполнения метода ExchangeWithAtomic.swapThroughOrionPool происходит обратный вызов функции ExchangeWithAtomic.depositAsset через Token.Transfer, что приводит к атаке повторного входа. Это приводит к тому, что сумма депозита накапливается повторно, и в конечном итоге атакующий получает прибыль через операцию вывода.
! [Анализ атаки повторного входа OrionProtocol с PoC](https://img-cdn.gateio.im/webp-social/moments-730464b2d4d7f6e0ff21a0289a2d5d68.webp0192837465674839201
Направление денежных потоков
Начальный капитал злоумышленника поступил из горячего кошелька одной крупной торговой платформы. Из 1,651 эфира, полученных от атаки, 657,5 эфира все еще находятся на кошельке злоумышленника, а оставшаяся часть была переведена через сервисы смешивания.
! [Анализ атак на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-caac189901b7aaad5abd8be30bb4361a.webp(
Анализ уязвимостей
Основная проблема уязвимости возникает в функции doSwapThroughOrionPool. Эта функция вызывает функцию _doSwapTokens, которая обновляет переменную curBalance после выполнения операции перевода. Злоумышленник использует добавленную в функцию transfer пользовательского токена логику обратного вызова, которая снова вызывает функцию depositAsset в процессе перевода, что приводит к неправильному обновлению переменной curBalance. Это позволяет злоумышленнику извлекать дополнительные средства через функцию withdraw после погашения флеш-кредита.
! [Анализ атаки на ре-энтерназии OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-7e21c34158a85d4c387fcdbec136d31b.webp(
! [Анализ атак на ре-энтерназии OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-24819b5154419e86ea523a25a9101f67.webp(
! [Анализ атаки на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-7c4bde9d6a35da4304844a3bbb934fae.webp(
! [Анализ атаки повторного входа OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-7239f8886fe83c1da8b1b42545185811.webp(
! [Анализ реэнтронансной атаки OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-e5042932f0e1b7fa96e3f6e749231957.webp(
! [Анализ атаки на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-4bd31735de09c63c490488e887118038.webp(
! [Анализ атак на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-cd401091e63ab21864f39cd650014b97.webp(
! [Анализ атаки на ре-энтерназии OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-e010d0f0c02fb8bbc648f755b0ac464c.webp(
! [Анализ реэнтронансных атак OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-f3c5f9416cfb9b7b791d86eeffb933be.webp(
Рекомендации по безопасности
Чтобы предотвратить подобные атаки, команде проекта следует обратить внимание на следующие моменты:
При реализации функции обмена токенами необходимо учитывать различные типы токенов и потенциальные риски безопасности, связанные с маршрутами обмена.
Строго следуйте кодировочной модели "Проверки-Эффекты-Взаимодействия" (Checks-Effects-Interactions), то есть сначала проводите проверку состояния, затем обновляйте состояние контракта, и только после этого взаимодействуйте с внешними контрактами.
Реализовать механизмы безопасности, такие как замки повторного входа, чтобы предотвратить возникновение атак повторного входа.
Для ключевых функций, связанных с операциями с финансами, следует проводить полные аудиты безопасности и тестирование.
Рассмотрите возможность введения дополнительных мер безопасности, таких как задержка на вывод средств или многоподписка, чтобы увеличить сложность атак.
Принятие этих мер может значительно снизить риск атак на смарт-контракты и повысить общую безопасность проекта. В экосистеме Web3 безопасность всегда должна быть первоочередным фактором.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
8 Лайков
Награда
8
5
Поделиться
комментарий
0/400
EntryPositionAnalyst
· 8ч назад
Снова команда небрежна, потеряет и запомнит.
Посмотреть ОригиналОтветить0
BearMarketSurvivor
· 8ч назад
Главное поле сражения снова подверглось нападению. Убытки составили 290w.
Посмотреть ОригиналОтветить0
PaperHandSister
· 8ч назад
Снова Рект. Почему вы постоянно следите за уязвимостями контрактов?
Посмотреть ОригиналОтветить0
NeverVoteOnDAO
· 8ч назад
Снова уязвимость в контракте, всё никак не закончится.
OrionProtocol подвергся атаке повторного входа, потеряв активы на сумму 2,9 миллиона долларов
Анализ инцидента с атакой повторного входа на OrionProtocol
2 февраля 2023 года в послеобеденное время Orion Protocol на Ethereum и Binance Smart Chain подвергся атаке повторного входа из-за уязвимости контракта, в результате чего было потеряно активов на сумму около 2,9 миллиона долларов, включая 2 844 766 USDT на Ethereum и 191 606 BUSD на Binance Smart Chain.
Анализ процесса атаки
Атакующий сначала развернул контракт на создание пользовательского токена и выполнил соответствующие операции по переводу и авторизации, чтобы подготовиться к последующей атаке. Затем атакующий воспользовался функцией swap из Uniswap V2 для заимствования и вызвал метод ExchangeWithAtomic.swapThroughOrionPool протокола OrionProtocol для обмена токенов.
Настройка пути обмена на [USDC, токен атакующего, USDT], где токен атакующего используется для выполнения операции обратного вызова. В процессе обмена, из-за того, что контракт токена атакующего содержит логику обратного вызова, в момент выполнения метода ExchangeWithAtomic.swapThroughOrionPool происходит обратный вызов функции ExchangeWithAtomic.depositAsset через Token.Transfer, что приводит к атаке повторного входа. Это приводит к тому, что сумма депозита накапливается повторно, и в конечном итоге атакующий получает прибыль через операцию вывода.
! [Анализ атаки повторного входа OrionProtocol с PoC](https://img-cdn.gateio.im/webp-social/moments-730464b2d4d7f6e0ff21a0289a2d5d68.webp0192837465674839201
Направление денежных потоков
Начальный капитал злоумышленника поступил из горячего кошелька одной крупной торговой платформы. Из 1,651 эфира, полученных от атаки, 657,5 эфира все еще находятся на кошельке злоумышленника, а оставшаяся часть была переведена через сервисы смешивания.
! [Анализ атак на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-caac189901b7aaad5abd8be30bb4361a.webp(
Анализ уязвимостей
Основная проблема уязвимости возникает в функции doSwapThroughOrionPool. Эта функция вызывает функцию _doSwapTokens, которая обновляет переменную curBalance после выполнения операции перевода. Злоумышленник использует добавленную в функцию transfer пользовательского токена логику обратного вызова, которая снова вызывает функцию depositAsset в процессе перевода, что приводит к неправильному обновлению переменной curBalance. Это позволяет злоумышленнику извлекать дополнительные средства через функцию withdraw после погашения флеш-кредита.
! [Анализ атаки на ре-энтерназии OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-7e21c34158a85d4c387fcdbec136d31b.webp(
! [Анализ атак на ре-энтерназии OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-24819b5154419e86ea523a25a9101f67.webp(
! [Анализ атаки на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-7c4bde9d6a35da4304844a3bbb934fae.webp(
! [Анализ атаки повторного входа OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-7239f8886fe83c1da8b1b42545185811.webp(
! [Анализ реэнтронансной атаки OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-e5042932f0e1b7fa96e3f6e749231957.webp(
! [Анализ атаки на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-4bd31735de09c63c490488e887118038.webp(
! [Анализ атак на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-cd401091e63ab21864f39cd650014b97.webp(
! [Анализ атаки на ре-энтерназии OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-e010d0f0c02fb8bbc648f755b0ac464c.webp(
! [Анализ реэнтронансных атак OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-f3c5f9416cfb9b7b791d86eeffb933be.webp(
Рекомендации по безопасности
Чтобы предотвратить подобные атаки, команде проекта следует обратить внимание на следующие моменты:
При реализации функции обмена токенами необходимо учитывать различные типы токенов и потенциальные риски безопасности, связанные с маршрутами обмена.
Строго следуйте кодировочной модели "Проверки-Эффекты-Взаимодействия" (Checks-Effects-Interactions), то есть сначала проводите проверку состояния, затем обновляйте состояние контракта, и только после этого взаимодействуйте с внешними контрактами.
Реализовать механизмы безопасности, такие как замки повторного входа, чтобы предотвратить возникновение атак повторного входа.
Для ключевых функций, связанных с операциями с финансами, следует проводить полные аудиты безопасности и тестирование.
Рассмотрите возможность введения дополнительных мер безопасности, таких как задержка на вывод средств или многоподписка, чтобы увеличить сложность атак.
Принятие этих мер может значительно снизить риск атак на смарт-контракты и повысить общую безопасность проекта. В экосистеме Web3 безопасность всегда должна быть первоочередным фактором.