Атака флеш -кредита 13 марта на Euler Finance привела к убыткам более 195 миллионов долларов. Это заставило инфекцию распространяться по многочисленным протоколам децентрализованного финансирования (DeFi), и по меньшей мере 11 протоколов, отличных от Эйлера, понесли потери из -за атаки.
В течение следующих 23 дней, и к большому облегчению многих пользователей Эйлера, злоумышленник вернул все эксплуатируемые средства.
Но в то время как крипто -сообщество может отпраздновать возвращение средств, остается вопрос, могут ли подобные атаки привести к огромным потерям в будущем.
Анализ того, как произошла атака, и могут ли разработчики и пользователи сделать что -либо, чтобы предотвратить такие атаки в будущем, может быть полезным.
К счастью, Docs Euler's Docs четко объясняют, как работает протокол, и сам блокчейн сохранил полный отчет о атаке.
Как работает Euler Finance
Согласно официальным документам протокола, Эйлер является кредитной платформой, похожей на соединение или Aave. Пользователи могут внести криптографию и позволить протоколу одолжить его другим, или они могут использовать депозит в качестве залога, чтобы одолжить крипто.
Значение обеспечения пользователя всегда должно быть больше, чем то, что он одолжил. Предположим, что обеспечение пользователя падает ниже определенного соотношения залосной стоимости к задолженности. В этом случае платформа позволит им быть «ликвидированными», что означает, что их залог будет распродан, чтобы погасить свои долги. Точная сумма обеспечения, которое потребности пользователя зависит от депонированного актива по сравнению с заимствованным активом.
Etokens - это активы, в то время как dtokens являются долгами
Всякий раз, когда пользователи вносят в себя Эйлер, они получают Etokens, представляющие депонированные монеты. Например, если пользователь депонирует 1000 монетов в долларах США (USDC), он получит одинаковую сумму EUSDC в обмен.
Поскольку они становятся стоимостью больше, чем основные монеты, поскольку депозит зарабатывает проценты, у Etokens не есть переписка 1: 1 с базовым активом с точки зрения стоимости.
Euler также позволяет пользователям получать рычаги, добывая Etokens. Но если они сделают это, протокол отправит им токены долгов (DTOKens), чтобы уравновесить созданные активы.
Например, документы говорят, что если пользователь вносит 1000 USDC, он может манить 5000 EUSDC. Однако, если они это сделают, протокол также отправит им 5000 долгового токена, называемого «DUSDC».
Переносная функция для DTOKEN написана иначе, чем стандартный токен ERC-20. Если у вас есть токен долга, вы не можете передать его другому человеку, но любой может забрать у вас DTOKENKEN, если захотят.
Согласно Docs Euler, пользователь может манить только столько eTokens, сколько он мог бы занять и заимствовать снова и снова, как заявляет: «Функция монетного двора имитирует то, что произойдет, если пользователь внесет 1000 долларов США, тогда Заимствовал 900 долларов США USDC, затем перераспределил этот USDC в размере 900 долларов, чтобы одолжить 810 долларов США больше USDC и так далее ».
Пользователи ликвидировались, если оценки здоровья падают до 1 или ниже
Согласно сообщению в блоге от Euler, каждый пользователь имеет «оценку здоровья», основанную на стоимости eTokens, удерживаемых в их кошельках и стоимости удерживаемых DTOKens. Пользователь должен иметь более высокую стоимость Etokens больше, чем dtokens, но от того, насколько больше зависит от конкретных монет, они заимствуют или депонируют. Несмотря на это, пользователь с достаточным количеством Etokens будет иметь оценку здоровья, превышающую 1.
Если пользователь едва падает ниже требуемого количества eTokens, у него будет оценка здоровья точно 1. Это будет подвергнуть их «мягкой ликвидации». Ликвидаторные боты могут вызвать функцию для передачи некоторых eTokens и dtokens пользователя и DTOKens до тех пор, пока оценка здоровья заемщика не вернется до 1,25. Поскольку пользователь, который едва ниже требований по обеспечению, все еще будет иметь более обеспечение, чем долг, ликвидатор должен получить прибыль от этой транзакции.
Если оценка здоровья пользователя падает ниже 1, то ликвидатор отдается увеличение скидки на основе того, насколько плох, оценка здоровья. Чем хуже оценка здоровья, тем больше скидка на ликвидатор. Это предназначено для того, чтобы убедиться, что кто -то всегда ликвидирует учетную запись, прежде чем он накапливает слишком много плохого долга.
В сообщении Эйлера утверждается, что другие протоколы предлагают «фиксированную скидку» для ликвидации, и утверждает, почему он считает, что переменные скидки превосходят.
Как произошла атака Эйлера
Данные блокчейна показывают, что злоумышленник участвовал в серии атак, которые истощали различные токены из протокола. Первая атака слила DAI на сумму около 8,9 млн. Долл. США (DAI) из бассейна DAI. Затем он повторялся снова и снова для других бассейнов депозитов, пока общая сумма не была осушена.
Злоумышленник использовал три разных адреса Ethereum для выполнения атаки. Первым был умный контракт, который Etherscan назвал «Exploer Exploit Contract 1», используемый для заимствования у AAVE. Второй адрес использовался для отложения и заимствования у Эйлера, а третий был использован для выполнения ликвидации.
Чтобы избежать неоднократного изложения адресов, которые Etherscan не пометил, вторая учетная запись будет упоминаться как «Заемщик» и третью учетную запись «ликвидатор», как показано ниже:
Первая атака состояла из 20 транзакций в том же блоке.
Во -первых, контракт на Euler Exploit 1 позаимствовал 30 миллионов DAI у AAVE в флеш -кредите. Затем он отправил этот кредит на счет заемщика.
Получив 30 миллионов DAI, заемщик внес 20 миллионов из них Эйлеру. Затем Эйлер ответил, манеруя примерно 19,6 миллиона Эдай и отправив его заемщику.
Эти монеты Edai были квитанцией за депозит, поэтому в процессе не было четко не удалось чистого количества DDAI. А поскольку каждый Edai может быть выкуплен на чуть более одного DAI, заемщик получил только 19,6 миллиона вместо полных 20 миллионов.
После выполнения этого первоначального депозита заемщик преодолел приблизительно 195,7 млн. Эдай. В ответ Эйлер преодолел 200 миллионов DDAI и отправил его заемщику.
В этот момент заемщик находился рядом с их пределом монетного двора Эдай, так как теперь они одолжили примерно в 10 раз превышают сумму дай, которую они внесли. Таким образом, их следующим шагом было погасить некоторые долги. Они внесли остальные 10 миллионов DAI, на которые они удерживали, эффективно выплачивая 10 миллионов долларов ссуды. В ответ Эйлер взял 10 миллионов DDAI из кошелька заемщика и сжег его, сократив долг заемщика на 10 миллионов долларов.
Затем злоумышленник был свободен больше, чтобы больше Эдай. Заемщик преодолел еще 195,7 млн. Эдай, в результате чего их общий общий общий объем EDAI до 391,4 млн. 19,6 млн. EDAI в депозитных поступлениях принесли общую сумму EDAI заемщика до 411 миллионов.
В ответ Эйлер ударил еще 200 миллионов DDAI и отправил его заемщику, в результате чего общий долг заемщика до 400 миллионов долларов.
После того, как Заемщик максимизировал свою мощность в майке Эдай, они отправили 100 миллионов Эдай по нулевым адресам, эффективно уничтожив его.
Это увеличило их оценку здоровья значительно ниже 1, так как теперь у них было 400 миллионов долларов в долгах, а также примерно 320 миллионов долларов.
Именно здесь появляется учетная запись ликвидатора. Она называется функцией ликвидации, введя адрес заемщика в качестве учетной записи, которая будет ликвидирована.
В ответ Эйлер инициировал процесс ликвидации. Сначала он взял около 254 миллионов DDAI от заемщика и уничтожил его, а затем изгонял 254 миллиона новых DDAI и передал его ликвидатору. Эти два шага перевели долг на сумму 254 миллиона долларов от заемщика в ликвидатор.
Далее Эйлер ударил еще 5,08 миллиона DDAI и отправил его ликвидатору. Это привело к ликвидатору до 260 миллионов долларов. Наконец, Эйлер перевел приблизительно 310,9 млн. Эдай из заемщика в ликвидатор, завершив процесс ликвидации.
В конце концов, заемщик не остался без эдай, без дай и 146 миллионов DDAI. Это означало, что на счете не было активов и долга на сумму 146 миллионов долларов.
С другой стороны, ликвидатор имел приблизительно 310,9 млн. Эдай и всего 260 миллионов DDAI.
После того, как ликвидация была завершена, ликвидатор выкупил 38 миллионов Edai (38,9 млн. Долл. США), получив 38,9 млн. DAI. Затем они вернули 30 миллионов DAI плюс проценты по контракту с Expliter Expliter Expliter, который контракт использовал для возврата кредита от AAVE.
В конце концов, ликвидатор остался с ок. 8,9 млн. Долл. США прибыли, которая была использована от других пользователей протокола.
Эта атака была повторена для множества других токенов, включая обернутые биткойны (WBTC), Stoked Ether (STETH) и USDC, составив 197 миллионов долларов на эксплуатируемые криптовалюты.
Что пошло не так в атаке Эйлера
Фирмы по безопасности блокчейна Omniscia и Slowmist проанализировали атаку, чтобы попытаться определить, что могло бы ее предотвратить.
Согласно отчету Omniscia от 13 марта, основной проблемой с Euler была функция «Donatetoreserves». Эта функция позволила злоумышленнику пожертвовать свои резервы Edai на резервы Euler, удаляя активы из их кошелька без удаления соответствующей суммы долга. Omnisica говорит, что эта функция не была в оригинальной версии Euler, но была введена в предложении Euler Unferment 14 (EIP-14).
Код для EIP-14 показывает, что он создал функцию, называемую DonateToreserves, которая позволяет пользователю переносить токены из своего собственного баланса в переменную протокола, называемую «assetStorage.ReserveBance». Всякий раз, когда называется эта функция, контракт издает событие «запрос -проверки», которое предоставляет информацию о транзакции.
Данные блокчейна показывают, что это событие RequestDonate было выделено для стоимости 100 миллионов токенов. Это точная сумма, которую были сожжены Etherscan, подталкивая учетную запись в несостоятельность.
В своем анализе 15 марта Slowmist согласился с Omniscia о важности функции Donatetoreserve, заявив:
«Неспособность проверить, находился ли пользователь в состоянии ликвидации после пожертвования средств на резервный адрес привели к прямым запускам механизма мягкой ликвидации».
Злоумышленник, возможно, также смог провести атаку, даже если бы функции пожертвований не существовало. Код контракта Euler "Etoken.SOL" на GitHub содержит стандартную функцию передачи ERC-20 ". Похоже, что это подразумевает, что злоумышленник мог перенести свои Etokens другому случайному пользователю или нулевому адресу вместо того, чтобы пожертвовать, все равно подталкивая себя в несостоятельность.
Тем не менее, злоумышленник решил пожертвовать средства, а не передавать их, предполагая, что перевод не сработал.
Cointelegraph обратился к Omniscia, Slowmist и команде Euler для разъяснения о том, была ли функция DonateToreserves необходимым для атаки. Тем не менее, он не получил ответа по времени публикации.
Две фирмы согласились с тем, что еще одной важной уязвимостью в Эйлере были крутые скидки, предлагаемые ликвидаторам. Согласно Slowmist, когда протокол кредитования имеет «механизм ликвидации, который динамически обновляет скидки,« он »создает выгодные арбитражные возможности для злоумышленников, чтобы отключить большое количество обеспечения без необходимости погашения погашения или погашения долга». Omniscia сделала аналогичные наблюдения, заявив:
«Когда нарушитель ликвидируется, применяется скидка на основе процента [...], гарантируя, что они будут« выше-водами »и несут только тот долг, который соответствует обеспечению, который они приобретают».
Как предотвратить будущую атаку Эйлера
В своем анализе Slowmist сообщил разработчикам о том, как предотвратить еще одну атаку в стиле Эйлера в будущем. Он утверждал, что протоколы кредитования не должны позволять пользователям сжигать активы, если это заставит их создавать плохой долг, и утверждают, что разработчики должны быть осторожны при использовании нескольких модулей, которые могут взаимодействовать друг с другом неожиданным образом:
«Команда службы безопасности медленного управления рекомендует, чтобы протоколы кредитования включали необходимые проверки здоровья в функции, которые включают пользовательские средства, а также рассматривают риски безопасности, которые могут возникнуть в результате объединения различных модулей. Это позволит разработать безопасные экономические и жизнеспособные модели, которые эффективно смягчают такие. атаки в будущем ".
Представитель разработчика Defi Spool сказал Cointelegraph, что технологический риск является внутренней особенностью экосистемы Defi. Хотя его нельзя устранить, его можно смягчить с помощью моделей, которые должным образом оценивают риски протоколов.
Согласно белой бумаге управления рисками Spool, она использует «матрицу риска» для определения риска протоколов. В этой матрице рассматриваются такие факторы, как годовой процентный доходность протокола (APY), аудиты, выполняемые по его контрактам, с момента его развертывания, общая стоимость заблокирована (TVL) и другие для создания рейтинга риска. Пользователи Spool могут использовать эту матрицу для диверсификации инвестиций DEFI и ограничения рисков.
Представитель сообщил Cointelegraph, что матрица Spool значительно снизила убытки инвесторов от инцидента в Эйлере.
«В этом инциденте наиболее пострадавшие интеллектуальные хранилища, разработанные пользователями для поиска более высокой (и более рискованной) доходности, были затронуты только на 35%. Наименьшее затронутое хранилище с воздействием стратегий Euler (через урожай или простоя), в На сравнение, было затронуто только 6%. Некоторые хранилища имели нулевое воздействие и, следовательно, не подвергались воздействию », - заявили они.
Spool продолжил: «Хотя это не идеально, он ясно демонстрирует способность умных хранилищ предоставлять индивидуальные модели риска и распространять средства пользователей среди многочисленных источников урожайности».
Cointelegraph получил аналогичный ответ от Swissborg, еще одного протокола DEFI, который направлен на то, чтобы помочь пользователям ограничить риск посредством диверсификации. Генеральный директор Swissborg Cyrus Fazel заявил, что приложение Swissborg имеет «разные стратегии урожайности, основанные на риске/цинку».
Некоторые стратегии перечислены как «1: Core = Low», в то время как другие указаны как «2: авантюрные = рискованные». По словам Фазеля, поскольку Эйлеру получил рейтинг «2», потери от протокола были ограничены лишь небольшой частью общего значения Swissborg.
Руководитель инженерии Swissborg Николас Рёнд также пояснил, что команда использует сложные критерии, чтобы определить, какие протоколы могут быть указаны в приложении Swissborg.
«У нас есть процесс надлежащей диплома для всех платформ DEFI, прежде чем вступить в какую-либо позицию. А затем, как только мы там, у нас будут операционные процедуры,-сказал он, добавив,-« Достояющая осмотрительность-все о TVL, команде, аудитах, Код с открытым исходным кодом, TVL, атака манипуляции с Oracle и т. Д. быть чрезвычайно реактивным ".
В теме в Твиттере 13 марта команда Swissborg заявила, что, хотя протокол потерял 2,2% средств из одного пула и 29,52% от другого, все пользователи будут компенсированы Swissborg, если средства не могут быть восстановлены из Euler.
Атака Эйлера была худшим эксплойтом Defi в первом квартале 2023 года. К счастью, злоумышленник вернул большую часть средств, и большинство пользователей должны в конечном итоге получить убытки, когда все сказано и сделано. Но атака поднимает вопросы о том, как разработчики и пользователи могут ограничить риск, поскольку экосистема Defi продолжает расширяться.
Некоторая комбинация усердия разработчиков и диверсификации инвесторов может быть решением проблемы. Но независимо от того, взлом Эйлера может продолжать обсуждаться в будущем, если не по какой -либо другой причине, кроме его чистого размера и иллюстрации рисков эксплойтов Defi.
Источник