26 июня агрегатор децентрализованных финансов (DeFi) Chibi Finance подвергся эксплуатации со стороны своего собственного аккаунта deployer, и из его контрактов была выведена криптовалюта на сумму 1 млн. долларов в результате явного мошенничества с перетягиванием ковра или выходом. Официальный пользовательский интерфейс протокола исчез, выдав ошибку 404, а все социальные сети приложения были удалены. После слива средств они были обменены на обернутый эфир (WETH) и переведены на Ethereum, откуда затем злоумышленник отправил их в Tornado Cash.

Цена управляющего токена Chibi Finance (CHIBI) упала более чем на 90% после появления новостей.

Цена токена CHIBI. Источник: CoinGecko.
Цена токена CHIBI. Источник: CoinGecko.

Но в DeFi "вырывание ковров" не должно быть возможным. В конце концов, эти приложения, по определению, не работают на централизованной инфраструктуре. Поэтому создатель приложения не должен иметь возможности сбежать со всеми криптовалютами или наличными.

По этой причине было бы полезно проанализировать, как была провернута предполагаемая афера.

Компания CertiK подготовила подробный отчет после расследования инцидента. В сочетании с данными блокчейна этот отчет может пролить свет на то, как произошла атака и что пользователи могут сделать, чтобы защитить себя от подобных атак или мошенничества в будущем.

Приложение Chibi Finance

До того, как его пользовательский интерфейс перестал работать, Chibi описывал себя как "самый популярный агрегатор доходности на Arbitrum". Он утверждал, что позволяет пользователям получать доходность со всей экосистемы Arbitrum.

По данным CertiK, с момента запуска в апреле агрегатор DeFi растет в общей стоимости блокировки (TVL) - измерение стоимости криптовалют, хранящихся в контрактах приложения. 21 июня Chibi объявил, что его TVL достигла 500 000 долларов. В то время команда поставила перед собой цель достичь $1 млн.

26 июня приложение впервые было размещено на сайте CoinGecko, что позволило ему стать более известным. Похоже, что вскоре после этого события приложение достигло своей цели в 1 миллион долларов, как раз перед тем, как токены были выведены из его контрактов. В результате инвесторы потеряли криптовалюту на сумму более 1 миллиона долларов в результате атаки или аферы.

Финансовые контракты Чиби

Атака использовала лазейку в восьми различных контрактах, используемых в протоколе Chibi Finance. Эти контракты были созданы из других проектов и не были уникальными для Chibi. Например, одним из них был StrategyAave.SOL по адресу 0x45E8a9BA6Fcd612a30ae186F3Cc93d78Be3E7d8d на Arbitrum, который также был развернут на несколько других адресов на Abitrum, Ethereum, BNB Smart Chain и других сетях.

Другим примером является контракт StrategySushiSwap.sol по адресу 0x9458Ea03af408cED1d919C8866a97FB35D06Aae0. Он также имеет несколько версий на Arbitrum и в других сетях.

Эти контракты, похоже, широко используются в приложениях агрегаторов DeFi, а не только в Chibi Finance.

Функция паники

Данные блокчейна показывают, что некоторые контракты, используемые Chibi Finance, содержат функцию "паники", которая может быть использована для изъятия всех токенов из пула и отправки их на определенный адрес. Эта функция была очень важна для метода злоумышленников. Вот объяснение того, как это работает, на примере StrategySushiSwap.sol:

В строках 340-343 файла StrategySushiSwap.sol говорится, что если будет вызвана функция panic(), то будет вызвана вторая функция emergencyWithdraw на контракте ISushiStake.

Функция panic() в контракте StrategySushiSwap.sol. Источник: Данные блокчейна.
Функция panic() в контракте StrategySushiSwap.sol. Источник: Данные блокчейна.

Контракт ISushiStake, в свою очередь, является просто интерфейсом. Он не содержит исполняемого кода. Вместо этого он указывает на контракт SushiSwap: MiniChefV2 по адресу 0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3.

Адрес MiniChefV2 указан как официальный контракт для децентрализованной биржи SushiSwap. Поэтому функция "panic" вызывает функцию "emergencyWithdraw" в SushiSwap.

По адресу SushiSwap функцию emergencyWithdraw можно увидеть на строках 626-643.

SushiSwap MiniChefV2 функция аварийного отключения. Источник: Данные блокчейна.
SushiSwap MiniChefV2 функция аварийного отключения. Источник: Данные блокчейна.

Эта функция позволяет владельцу средств выводить их без получения вознаграждения. Это может быть полезно в чрезвычайных ситуациях. Например, пользователь может захотеть вызвать эту функцию, если ошибка в контракте на вознаграждение приведет к тому, что он не сможет получить вознаграждение.

Функция экстренного изъятия имеет защиту от сбоев для предотвращения использования неавторизованными лицами. В строке 360 говорится: "UserInfo storage user = userInfo[pid][msg.sender]", что означает, что "пользователь" определяется как отправитель сообщения. При нормальных обстоятельствах это должно позволить пользователю экстренно снять свои собственные средства, но не средства, принадлежащие кому-либо еще.

Похоже, что в этой функции SushiSwap нет ничего вредоносного. Однако проблема может возникнуть, если пользователь не вызывает эту функцию непосредственно из собственного кошелька.

Например, когда пользователь вносил средства с помощью Chibi Finance, его криптовалюта отправлялась в SushiSwap контрактом StrategySushiSwap, а не конечным пользователем напрямую. Это означало, что приложение Chibi Finance было признано "пользователем" при попытке экстренного изъятия средств. Это, в свою очередь, позволяло Chibi выводить средства пользователей от их имени.

Однако средства должны были оставаться в безопасности до тех пор, пока функция паники могла быть вызвана только конечным пользователем.

К сожалению, функция паники не имеет такого требования. Вместо этого она просто указана в контракте Chibi Finance как функция "onlyGov", что означает, что администратор может вызвать ее, но никто другой. Злоумышленник воспользовался этой лазейкой для осуществления своей атаки.

Как была осуществлена атака на Chibi Finance

Согласно отчету CertiK, 15 июня Ethereum-пользователь Shadowout.ETH вывел 10 Ether (ETH) из Tornado Cash. Эти средства были переведены на Arbitrum, и 0,2 ETH было отправлено от этого пользователя на адрес 0x80c1ca8f002744a3b22ac5ba6ffc4dc0deda58e3. Затем 23 июня эта вторая учетная запись создала вредоносный контракт по адресу 0xb61222189b240be3da072898eda7db58b00fd6ee.

Злоумышленник вызвал функцию "add pool" на этом вредоносном контракте восемь раз 23 июня. Поскольку контракт непроверенный, код функции "add pool" неизвестен. Однако CertiK предположил, что каждая из этих операций могла добавить контракт Chibi Finance в список данных вредоносного контракта, в результате чего в списке оказалось восемь контрактов.

27 июня учетная запись разработчика Chibi Finance передала права администратора для восьми контрактов Chibi Finance вредоносному контракту. Это было сделано с помощью восьми отдельных транзакций, каждая из которых вызывала функцию "setGov" для определенного контракта.

Изменены права администратора для одного из контрактов Chibi Finance. Источник: Данные блокчейна.
Изменены права администратора для одного из контрактов Chibi Finance. Источник: Данные блокчейна.

После того, как вредоносный контракт получил эти права управления, его создатель вызвал свою функцию "execution". Это вызвало вызов "panic" на каждом из восьми контрактов, которые, в свою очередь, вызвали "emergencyWithdraw" на связанных пулах в приложениях DeFi, таких как SushiSwap, Aave и Global Hectare.

В результате все средства, внесенные пользователями в эти пулы через Chibi Finance, были слиты злоумышленником, в результате чего инвесторы понесли убытки на сумму более $1 млн.

Как избежать перетягивания ковра в стиле Чиби?

Учитывая, что атака основывалась на функции "паники", которая позволяла администратору выкачать все средства пользователей, одним из способов избежать ковровой атаки в стиле Чиби является отказ от использования приложений с такой функцией.

С другой стороны, если агрегатор не имеет функции "паники", существует риск, что средства пользователя могут застрять, если в приложении агрегатора будет обнаружена ошибка или эксплойт. Пользователи могут захотеть рассмотреть эти компромиссы, если они решат использовать приложения-агрегаторы вместо прямого взаимодействия с базовыми пулами.

Пользователи DeFi также могут принять во внимание, что код смарт-контракта может быть чрезвычайно сложным, и большинство пользователей не смогут самостоятельно определить, есть ли в приложении недостатки безопасности. Как утверждает CertiK в своем отчете:

"Инцидент с Chibi Finance демонстрирует риски, связанные с централизацией в пространстве Web3.[...]Нереально ожидать, что обычные инвесторы смогут заметить и понять риски централизации в таких проектах, как Chibi Finance, просто проведя собственное исследование".

По этой причине пользователи могут захотеть проверить опубликованные аудиты приложения, прежде чем использовать его, заявила CertiK.

Chibi Finance утверждала, что была проверена фирмой SolidProof, специализирующейся на безопасности блокчейна. Содержание предполагаемого аудита больше не доступно, так как GitHub проекта был удален и не был сохранен в интернет-архивах. Cointelegraph не смог выяснить, были ли раскрыты в аудиторском отчете риски, связанные с функцией "паники", и вообще проводился ли аудит.

Cointelegraph обратился в SolidProof за комментариями, но не получил ответа до момента публикации.

Вытягивание ковра или мошенничество при выходе из бизнеса стало распространенной проблемой в сфере DeFi. 1 июня компания Beosin, специализирующаяся на безопасности блокчейна, сообщила, что в мае в результате "ковровых перетяжек" было потеряно более 45 миллионов долларов, что превышает количество обычных эксплойтов DeFi. В апреле протокол Ordinals Finance также был якобы взломан на $1 млн с помощью функции передачи "safuToken".

Источник