Euler Finance зазнала флеш-атаки, втратила майже 200 мільйонів доларів
13 березня проект Euler Finance зазнав флеш-атаки через вразливість смарт-контракту, внаслідок чого було втрачено близько 197 мільйонів доларів. Ця атака стосувалася 6 видів токенів і є однією з найбільших за масштабами безпекових подій у сфері DeFi останнім часом.
Аналіз процесу атаки
Зловмисник спочатку отримав термінові позики на 30 мільйонів DAI з певної платформи кредитування, після чого розгорнув два контракти: на кредитування та ліквідацію. Процес атаки виглядає приблизно так:
Заставити 20 мільйонів DAI в Euler Protocol, щоб отримати 19,5 мільйона eDAI.
Використовуючи протокол Euler, взяти в позику 195.6 мільйона eDAI та 200 мільйонів dDAI з 10-кратним кредитним плечем.
Використати залишок 10 мільйонів DAI для погашення частини боргу, знищити відповідну кількість dDAI.
Знову позичити таку ж кількість eDAI та dDAI.
Пожертвувати 100 мільйонів eDAI через функцію donateToReserves, а потім викликати функцію liquidate для ліквідації, отримавши 310 мільйонів dDAI та 250 мільйонів eDAI.
Нарешті вилучено 3890 тисяч DAI, погашено 3000 тисяч Термінові позики, чистий прибуток приблизно 887 тисяч DAI.
Причини вразливості
Ключем до цієї атаки є те, що функція donateToReserves в Euler Finance не містить необхідної перевірки ліквідності. На відміну від інших функцій, таких як mint, donateToReserves не викликає функцію checkLiquidity для перевірки стану активів користувача. Це дозволяє зловмиснику через цю функцію перевести свій рахунок у стан, що підлягає ліквідації, і таким чином здійснити атаку.
У нормальних умовах функція checkLiquidity викликає модуль RiskManager, щоб переконатися, що eToken користувача перевищує dToken, для підтримки безпеки системи. Однак функція donateToReserves пропускає цей важливий крок, надаючи можливість для атаки.
Рекомендації з безпеки
Ця подія ще раз підкреслила важливість безпеки контрактів у проектах DeFi. Для проектів, пов'язаних з кредитуванням, особливо слід звернути увагу на такі моменти:
Забезпечте, щоб всі функції, що стосуються операцій з коштами, проходили достатню перевірку ліквідності.
Суворо контролювати кредитне важелі користувачів, щоб запобігти системним ризикам, пов'язаним з надмірним важелем.
Впровадження багаторівневих механізмів безпеки, таких як функція термінового призупинення, для реагування на несподівані безпекові події.
Провести повний аудит контрактів, з особливою увагою до ключових етапів, таких як повернення коштів, перевірка ліквідності та погашення боргів.
Регулярно проводити оцінку безпеки та стрес-тестування, своєчасно виявляти та виправляти потенційні вразливості.
Цей інцидент з атакою нагадує нам, що у швидко розвиваючому світі Web3 безпека завжди є пріоритетом. Проектам слід вкладати більше ресурсів у забезпечення безпеки, а користувачам потрібно підвищити обізнаність про ризики і обережно брати участь у різних DeFi проектах.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Euler Finance зазнала флеш-атаки, втратила близько 2 мільярдів доларів.
Euler Finance зазнала флеш-атаки, втратила майже 200 мільйонів доларів
13 березня проект Euler Finance зазнав флеш-атаки через вразливість смарт-контракту, внаслідок чого було втрачено близько 197 мільйонів доларів. Ця атака стосувалася 6 видів токенів і є однією з найбільших за масштабами безпекових подій у сфері DeFi останнім часом.
Аналіз процесу атаки
Зловмисник спочатку отримав термінові позики на 30 мільйонів DAI з певної платформи кредитування, після чого розгорнув два контракти: на кредитування та ліквідацію. Процес атаки виглядає приблизно так:
Заставити 20 мільйонів DAI в Euler Protocol, щоб отримати 19,5 мільйона eDAI.
Використовуючи протокол Euler, взяти в позику 195.6 мільйона eDAI та 200 мільйонів dDAI з 10-кратним кредитним плечем.
Використати залишок 10 мільйонів DAI для погашення частини боргу, знищити відповідну кількість dDAI.
Знову позичити таку ж кількість eDAI та dDAI.
Пожертвувати 100 мільйонів eDAI через функцію donateToReserves, а потім викликати функцію liquidate для ліквідації, отримавши 310 мільйонів dDAI та 250 мільйонів eDAI.
Нарешті вилучено 3890 тисяч DAI, погашено 3000 тисяч Термінові позики, чистий прибуток приблизно 887 тисяч DAI.
Причини вразливості
Ключем до цієї атаки є те, що функція donateToReserves в Euler Finance не містить необхідної перевірки ліквідності. На відміну від інших функцій, таких як mint, donateToReserves не викликає функцію checkLiquidity для перевірки стану активів користувача. Це дозволяє зловмиснику через цю функцію перевести свій рахунок у стан, що підлягає ліквідації, і таким чином здійснити атаку.
У нормальних умовах функція checkLiquidity викликає модуль RiskManager, щоб переконатися, що eToken користувача перевищує dToken, для підтримки безпеки системи. Однак функція donateToReserves пропускає цей важливий крок, надаючи можливість для атаки.
Рекомендації з безпеки
Ця подія ще раз підкреслила важливість безпеки контрактів у проектах DeFi. Для проектів, пов'язаних з кредитуванням, особливо слід звернути увагу на такі моменти:
Забезпечте, щоб всі функції, що стосуються операцій з коштами, проходили достатню перевірку ліквідності.
Суворо контролювати кредитне важелі користувачів, щоб запобігти системним ризикам, пов'язаним з надмірним важелем.
Впровадження багаторівневих механізмів безпеки, таких як функція термінового призупинення, для реагування на несподівані безпекові події.
Провести повний аудит контрактів, з особливою увагою до ключових етапів, таких як повернення коштів, перевірка ліквідності та погашення боргів.
Регулярно проводити оцінку безпеки та стрес-тестування, своєчасно виявляти та виправляти потенційні вразливості.
Цей інцидент з атакою нагадує нам, що у швидко розвиваючому світі Web3 безпека завжди є пріоритетом. Проектам слід вкладати більше ресурсів у забезпечення безпеки, а користувачам потрібно підвищити обізнаність про ризики і обережно брати участь у різних DeFi проектах.