9 апреля 2023 года SushiSwap стал целью эксплойта из-за не прошедшего проверку внешнего параметра. Общий ущерб составил около 3,3 миллиона долларов.
Поскольку такие ведущие протоколы на Ethereum обладают обширной пользовательской базой, они все равно остаются уязвимыми к возникновению серьезных новых проблем при обновлении контрактов. Это напоминание для DeFi-сообщества о том, что безопасность всегда должна быть главным приоритетом. Более того, данный инцидент безопасности был спровоцирован попыткой «белого хакера» спасти средства, что вызвало значительные споры в сообществе. Мы представляем краткий обзор этого инцидента, отмечая его как один из десяти главных инцидентов безопасности 2023 года.
История вопроса
SushiSwap
SushiSwap, известная децентрализованная биржа (DEX), запустила «вампирскую атаку» на Uniswap, добившись колоссального успеха. На пике ее TVL достигал 8 миллиардов долларов, и сейчас он все еще составляет около 400 миллионов долларов.
Одобрение (Approval)
Если кратко: это разрешение контракту получать доступ к определенному токену в вашем кошельке и переводить его.
Для удобства многие контракты по умолчанию запрашивают неограниченное одобрение. Многие пользователи, опасаясь рисков безопасности, вносят лишь небольшие суммы в различные протоколы. Однако эти пользователи предоставляют протоколам одобрение на использование безлимитных средств. Если протокол будет скомпрометирован, все одобренные токены на счете могут быть потеряны.
Уязвимость
Непроверенный внешний параметр
Функция processRoute() контракта RouteProcessor2 позволяет пользователям полностью контролировать поток вызовов (параметр route).
А в uniswapV3SwapCallback() параметр from функции safeTransferFrom() декодируется из предоставленного пользователем route.
В результате пользователи, давшие одобрение контракту RouteProcessor2, потеряли свои активы.
Процесс атаки
Этот инцидент включал множество транзакций атаки, но мы используем первую из них в качестве примера. Транзакция: 0x43ff7e01423044cfb501b4fe9ef1386725c0ddc117dadd6e6620cb68bdeaf4f9
- Злоумышленник вызвал
processRoute()уязвимого контракта RouteProcessor2 с тщательно сконструированным длинным аргументомroute.
processRouteInternal()создаетInputStreamна основе маршрута, предоставленного пользователем.
- Транзакция следовала по
routeатакующего до вызоваswapUniV3(). Обратите внимание, чтоpoolдекодируется изstream, что означает, что злоумышленник контролировал, в каком именноpoolбудет выполнятьсяswap(), установив его какlastCalledPool.
- Это вызвало вредоносный контракт, развернутый атакующим, который затем просто передал вредоносные
calldataдля обратного вызоваuniswapV3SwapCallback()контракта RouteProcessor2. uniswapV3SwapCallback()требует проверкиmsg.sender, но посколькуlastCalledPoolуже был установлен на вредоносный контракт, хакер обошел эту проверку. Важно отметить, что параметрfromфункцииsafeTransferFrom()был декодирован из сконструированных атакующимcalldata.
- Активы жертвы переводятся на вредоносный контракт, развернутый атакующим.
Спорное спасение «белым хакером»
Стоит отметить, что «белый хакер» с никнеймом @trust__90 выявил эту проблему и предпринял попытку спасти средства, но эта попытка обернулась катастрофой.
- Он использовал мемпул для трансляции транзакций вместо приватного RPC.
- Он попытался спасти только 100 Ether вместо всех средств, находящихся под угрозой.
Это открыло путь для MEV-ботов и других злоумышленников к выполнению множества копирующих транзакций, что фактически привело к краже большей части средств. После этих событий @trust__90 столкнулся с критикой и попытался защитить свои действия.
People are saying all kinds of terrible things while being uninformed so allow me to share more details.
— Trust (@trust__90) April 10, 2023
I've initiated coordination privately with Immunefi officials 3 hours before the white-hack. 90 minutes later, I realized the asset is currently used by the frontend and…
Спасение силами BlockSec
В ходе этой атаки мы также спасли 100 Ether и вернули средства жертве, 0xsifu.
На сегодняшний день мы успешно предотвратили более 20 реальных хакерских атак и спасли активов на сумму более 14 000 000 долларов.Hey, @0xsifu We have successfully blocked an attack transaction and rescued 100 Ether. Please get in touch with us.
— BlockSec (@BlockSecTeam) April 9, 2023
Рекомендации по безопасности
Обновления всегда должны проходить аудит
Это напоминание DeFi-сообществу о том, что безопасность всегда должна быть главным приоритетом. Аудиты не являются гарантией безопасности, но отсутствие аудита точно не гарантирует безопасность.
Смягчение проблем с одобрением (Approve)
В 2023 году произошло множество инцидентов, связанных с атаками через одобрения, и мы пользуемся этой возможностью, чтобы вновь подчеркнуть важность управления разрешениями. Практика безопасности заключается в том, чтобы одобрять использование только необходимых сумм, или, если приоритетом является удобство, одобрять лишь немного большую сумму, чем требуется.
Инструмент MetaSuites от BlockSec предлагает удобную функцию диагностики одобрений. Кроме того, для регулярной проверки статусов одобрения можно использовать такие сервисы, как Revoke Cash.
Внедрение механизмов мониторинга и автоматического реагирования
Ethereum — это «темный лес», и каждый в DeFi-сообществе сталкивается с различными рисками и проблемами, даже эксперты по безопасности. В 2023 году мы запустили Phalcon Security — первую в отрасли систему автоматического реагирования, предназначенную не только для мониторинга атак, но и для активной блокировки угроз в режиме реального времени. Проверенные в бою возможности Phalcon доказали свою эффективность, успешно предотвратив более 20 реальных атак и сохранив активы стоимостью более 14 000 000 долларов. Эта инновация гарантирует, что все участники рынка могут спать спокойнее, зная, что для защиты их инвестиций приняты проактивные меры.
Читайте другие статьи из этой серии:
- Вступление: Десять самых «громких» инцидентов безопасности в 2023 году
- #1: Эксплуатация MEV-ботов через уязвимости в ретрансляторе Flashbots
- #2: Инцидент с Euler Finance: Крупнейший взлом 2023 года
- #3: Инцидент с KyberSwap: Виртуозная эксплуатация ошибок округления с невероятно тонкими расчетами
- #4: Инцидент с Curve: Ошибка компилятора создает неисправный байт-код из безобидного исходного кода
- #5: Platypus Finance: Выживание после трех атак благодаря удаче
- #6: Инцидент с Hundred Finance: Катализатор волны эксплойтов, связанных с точностью в уязвимых форкнутых протоколах
- #7: Инцидент с ParaSpace: Гонка со временем, чтобы предотвратить самую критическую атаку в отрасли
- #9: MEV-бот 0xd61492: Из хищника в добычу в гениальном эксплойте
- #10: Инцидент с ThirdWeb: Несовместимость между доверенными модулями открывает уязвимость



