Анализ инцидента с атакой повторного входа на OrionProtocol
2 февраля 2023 года OrionProtocol на Ethereum и Binance Smart Chain подвергся атаке повторного входа из-за уязвимости контракта, в результате чего общие убытки составили около 2,9 миллиона долларов США, включая 2,844,766 USDT на Ethereum и 191,606 BUSD на BSC.
Анализ процесса атаки
Атакующий сначала развернул специальный Token контракт и выполнил операции по его передаче и авторизации, подготовив почву для последующей атаки. Затем атакующий осуществил заимствование через метод swap на одном из DEX и вызвал метод ExchangeWithAtomic.swapThroughOrionPool для обмена токенов. Путь обмена установлен как USDC → токен атакующего → USDT.
В процессе выполнения метода ExchangeWithAtomic.swapThroughOrionPool, из-за наличия функции обратного вызова в контракте Token злоумышленника, происходит повторный вызов метода ExchangeWithAtomic.depositAsset во время Transfer токена, что приводит к атаке повторного входа. Это позволяет сумме депозита многократно увеличиваться, в конечном итоге злоумышленник получает чрезмерную прибыль через операции вывода.
! [Анализ атаки повторного входа OrionProtocol с PoC](https://img-cdn.gateio.im/webp-social/moments-730464b2d4d7f6e0ff21a0289a2d5d68.webp0192837465674839201
Направление денежных средств
Начальный капитал атакующего поступил из горячего кошелька одной из торговых платформ. Из 1,651 ETH, полученного в результате атаки, 657.5 все еще находятся в кошельке атакующего, остальные были переведены с помощью сервиса смешивания.
! [Анализ атак на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-caac189901b7aaad5abd8be30bb4361a.webp(
Анализ уязвимостей
Основная уязвимость заключается в функциях doSwapThroughOrionPool и _doSwapTokens. Ключевая проблема заключается в том, что контракт обновляет переменную curBalance только после осуществления перевода токенов, что создает условия для атаки повторного входа. Злоумышленник добавляет логику обратного вызова в функцию transfer своего токена, что приводит к повторному вызову функции depositAsset во время перевода, что приводит к неправильному обновлению curBalance.
! [Анализ атаки на ре-энтерназии 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(
Воспроизведение уязвимости
Исследователи предоставили часть кода POC, смоделировавшего процесс атаки. Результаты тестирования показали, что злоумышленник успешно использовал уязвимость для получения дополнительного USDT.
![Анализ повторного использования атак 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), то есть сначала проводить проверку состояния, затем обновлять состояние контракта, и только потом взаимодействовать с внешними контрактами.
При реализации функции обмена токенов необходимо учитывать потенциальные риски безопасности, связанные с множеством токенов и путей обмена.
Для ключевых функций, связанных с операциями с финансами, следует реализовать блокировку повторного входа или использовать безопасные библиотеки, такие как ReentrancyGuard от OpenZeppelin.
Регулярно проводите аудит кода и оценку безопасности, чтобы своевременно обнаруживать и устранять потенциальные уязвимости.
Рассмотреть возможность введения ограничений на сумму сделки или механизма временной блокировки, чтобы снизить возможные потери от однократной атаки.
Путем принятия этих мер проектная команда может эффективно повысить безопасность смарт-контрактов и снизить риск遭受类似攻击.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
OrionProtocol подвергся атаке повторного входа, убытки составили 2,9 миллиона долларов. Анализ рекомендаций по безопасности.
Анализ инцидента с атакой повторного входа на OrionProtocol
2 февраля 2023 года OrionProtocol на Ethereum и Binance Smart Chain подвергся атаке повторного входа из-за уязвимости контракта, в результате чего общие убытки составили около 2,9 миллиона долларов США, включая 2,844,766 USDT на Ethereum и 191,606 BUSD на BSC.
Анализ процесса атаки
Атакующий сначала развернул специальный Token контракт и выполнил операции по его передаче и авторизации, подготовив почву для последующей атаки. Затем атакующий осуществил заимствование через метод swap на одном из DEX и вызвал метод ExchangeWithAtomic.swapThroughOrionPool для обмена токенов. Путь обмена установлен как USDC → токен атакующего → USDT.
В процессе выполнения метода ExchangeWithAtomic.swapThroughOrionPool, из-за наличия функции обратного вызова в контракте Token злоумышленника, происходит повторный вызов метода ExchangeWithAtomic.depositAsset во время Transfer токена, что приводит к атаке повторного входа. Это позволяет сумме депозита многократно увеличиваться, в конечном итоге злоумышленник получает чрезмерную прибыль через операции вывода.
! [Анализ атаки повторного входа OrionProtocol с PoC](https://img-cdn.gateio.im/webp-social/moments-730464b2d4d7f6e0ff21a0289a2d5d68.webp0192837465674839201
Направление денежных средств
Начальный капитал атакующего поступил из горячего кошелька одной из торговых платформ. Из 1,651 ETH, полученного в результате атаки, 657.5 все еще находятся в кошельке атакующего, остальные были переведены с помощью сервиса смешивания.
! [Анализ атак на повторный вход OrionProtocol с PoC])https://img-cdn.gateio.im/webp-social/moments-caac189901b7aaad5abd8be30bb4361a.webp(
Анализ уязвимостей
Основная уязвимость заключается в функциях doSwapThroughOrionPool и _doSwapTokens. Ключевая проблема заключается в том, что контракт обновляет переменную curBalance только после осуществления перевода токенов, что создает условия для атаки повторного входа. Злоумышленник добавляет логику обратного вызова в функцию transfer своего токена, что приводит к повторному вызову функции depositAsset во время перевода, что приводит к неправильному обновлению curBalance.
! [Анализ атаки на ре-энтерназии 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(
Воспроизведение уязвимости
Исследователи предоставили часть кода POC, смоделировавшего процесс атаки. Результаты тестирования показали, что злоумышленник успешно использовал уязвимость для получения дополнительного USDT.
![Анализ повторного использования атак 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), то есть сначала проводить проверку состояния, затем обновлять состояние контракта, и только потом взаимодействовать с внешними контрактами.
При реализации функции обмена токенов необходимо учитывать потенциальные риски безопасности, связанные с множеством токенов и путей обмена.
Для ключевых функций, связанных с операциями с финансами, следует реализовать блокировку повторного входа или использовать безопасные библиотеки, такие как ReentrancyGuard от OpenZeppelin.
Регулярно проводите аудит кода и оценку безопасности, чтобы своевременно обнаруживать и устранять потенциальные уязвимости.
Рассмотреть возможность введения ограничений на сумму сделки или механизма временной блокировки, чтобы снизить возможные потери от однократной атаки.
Путем принятия этих мер проектная команда может эффективно повысить безопасность смарт-контрактов и снизить риск遭受类似攻击.