SSO Модуль 2 - Вразливості смарт-контрактів: глибоке занурення у reentrancy-атаки
Смарт-контракти забезпечують прозорість, але несуть ризики. Ця стаття розкриває такі вразливості, як Reentrancy, з прикладом втрати DAO у $150 млн. Integer Overflow призвів до збитків BeautyChain у $900 млн. DAOMaker втратив $4 млн через недоліки контролю доступу. FlashLoan-атаки призвели до втрати Harves Finance $38 млн.
Автор Markos Mebellis

На цій сторінці
Смарт-контракти революціонізують світові галузі завдяки своїй ефективності, прозорості та незмінним властивостям. Однак їхній відкритий і автоматизований дизайн також наражає їх на ризики. Щоб максимізувати їхній потенціал і мінімізувати загрози, важливо розуміти їхні вразливості та можливі шляхи атак. Створення та підтримка цих контрактів вимагає ретельної уваги та дотримання найкращих практик. Ця стаття заглиблюється в поширені вразливості, ілюструючи їх реальними випадками для кращого розуміння. Розгляньмо наступну статтю, люб'язно надану Salus Security.
Ключові вразливості:
**Reentrancy:** Тут зловмисники використовують прогалину, повторно входячи у функції до завершення ключових операцій або оновлення значень.
Reentrancy в межах однієї функції: Це відбувається, коли контракт взаємодіє зі шкідливим контрактом, дозволяючи останньому повторно увійти у функцію. Наприклад, шкідливі контракти можуть безперервно повторно входити у функцію 'withdrawBalance', виводячи більше ether до оновлення балансів.
Помітні атаки:
- The DAO (2016): Після залучення $150 мільйонів його було зламано через вразливості коду. Це призвело до розколу мережі Ethereum.
- PolyDex (2021): Втратив $500 тис. через reentrancy-атаку на смарт-контракт PLX Locker.
- Bacon Protocol (2022): Зазнав втрати $1 млн через помилку reentrancy у функції lend().
- Lendf.Me (2020): Втратив приблизно $24,7 мільйона у кількох криптовалютах.
**Cross-Function Reentrancy:** Виникає через спільні стани між різними функціями та слабкий захист від повторного входу. Наведений вище приклад 'balances' показує, що попри наявність захисту в 'withdrawAll', зловмисники все ще можуть використати функцію 'transfer'.
Сумнозвісні інциденти:
- DFX Finance (2022): Втратив понад $7 мільйонів через атаку, що використала функцію без захисту від reentrancy.
- Hundred Finance (2022): Втратив близько $6,5 мільйона після reentrancy-атаки, що використала функцію borrowFresh.
- Fei Protocol (2022): Втратив близько $80 мільйонів через атаку, що використала лазівку Reentrancy.
**Cross-Contract Reentrancy:** Виникає через спільні стани між різними контрактами та неправильні послідовності зміни змінних. Навіть якщо функції мають захист, інші функції, як-от 'burnAccount', все ще можуть бути використані.
Відомі атаки:
- Rari Capital (2021): Втратив приблизно $10 мільйонів (~2600 ETH) менш ніж за годину.
- ValueDefi (2021): Втратив 5345.314 WBNB через некоректні розрахунки часток, що покладалися на зовнішні дані.
Read-Only Reentrancy:
Read-only reentrancy використовує функцію, яка, хоч і не змінює стан контракту, все ще може видавати помилкові результати, коли стан неузгоджений.
Варті уваги атаки:
- QuickSwap (2022): Зловмисники неправомірно використали flash loan, щоб змінити спотову ціну активу, викравши 138 ETH і 700 токенів MATIC. Це стало можливим через недолік в оракулі Curve LP.
- dForce (2023): Помилка read-only reentrancy була в коді доступу до цінових оракулів у мережах Arbitrum та Optimism із Curve Finance.
- Sentimente (2023): Атака, що використала недолік read-only reentrancy, призвела до крадіжки $1 мільйона. На щастя, 90% було повернуто зловмисником.
- Sturdy (2023): Втратив приблизно 442 ETH через проблему read-only reentrancy Balancer, де ціну B-stETH-STABLE було підроблено.
Запобігання вразливості Reentrancy:
- Завжди дотримуйтеся шаблону check-effect-interaction.
- Застосовуйте захист від повторного входу для всіх чутливих операцій.
- Ретельно обробляйте кожен зовнішній виклик.
Integer Overflow:
Коли обчислення перевищують межі, вони переповнюються, що часто призводить до крихітних або величезних значень.
Показові атаки:
- BeautyChain (2018): Зловмисники отримали 10^58 BEC через integer overflow, збувши приголомшливі $900 мільйонів.
- Poolz (2023): Призвело до втрати приблизно $665 000 у мережах Ethereum, Binance та Polygon.
Заходи проти Integer Overflow:
- Використовуйте безпечні методи обчислень, як-от бібліотека safeMath.
- Надавайте пріоритет перевірці меж, щоб переконатися, що результати залишаються в допустимому діапазоні.
- Використовуйте компілятор Solidity версії 0.8.0 або новішої для вбудованого виявлення переповнення.
Контроль доступу:
Вразливості контролю доступу виникають через відсутність суворих обмежень доступу до функцій, що виконують критичні операції.
- Відомі атаки:
- DAOMaker (2021): Приголомшливі ~$4 млн було виведено після того, як
initфункція залишилася вразливою. - GymNetwork (2022): Зловмисники скористалися недоглядом автентифікації в depositFromOtherContract(), що дозволило незаконно збільшити баланс без жодної фактичної оплати. Втрата? Близько 2 475,91 WBNB.
- Tempdao (2023): Недбалий підхід до контролю доступу для функції migrateStake призвів до втрати понад $2,34 мільйона.
Вразливість контролю доступу
- Опис: Вразливості, що виникають через недостатні механізми обмежень, які регулюють доступ і привілеї до певних операцій у системі.
Запобіжні заходи:
- Сувора перевірка дозволів: Завжди застосовуйте суворі протоколи дозволів для функцій, особливо тих, що виконують чутливі операції.
- Механізм мультипідпису: Для завдань, що потребують спільного ухвалення рішень, використовуйте протоколи мультипідпису, які вимагають кількох схвалень перед виконанням чутливих операцій.
Поширені вектори атак
- Опис: Різні методи або канали, через які зловмисники використовують уразливості в системі, переважно в смарт-контрактах.
Помітні приклади:
- Атаки FlashLoan: Використовує функцію миттєвого позичання в системах децентралізованих фінансів для здійснення зловмисних дій.
- Фронт-раннінг: Зловмисники дізнаються про незавершену транзакцію іншого користувача та діють на її основі, пропонуючи вищу плату за газ.
Атака FlashLoan
- Опис: Хоча FlashLoan сам по собі не є атакою, це функція DeFi, яка дозволяє користувачам миттєво позичати значні суми без застави. Її використовували через логічні недоліки у взаємодіях і зв'язках контрактів.
Помітні атаки:
- Harves Finance (2020.10.26): Призвело до втрати $38 мільйонів.
- InverseFinance (2022.6.16): Призвело до втрати 53.2445 WBTC та 99,976.29 USDT.
- NewFreeDAO (2022.9.8): Виведено 4 481 WBNB, що еквівалентно приблизно $1,25 млн.
- Lodestar (2022.12.11): Використано через маніпуляцію ціною оракула.
- 0vix (2023.4.28): Призвело до втрати $2 млн у мережі Polygon.
Рекомендації щодо запобігання:
- Враховуйте особливості Flashloan під час розробки проєкту.
- Для точного визначення ціни використовуйте зважене за часом середнє або кілька оракулів.
Фронтраннінг
- Опис: Зловмисник дізнається про транзакцію іншого користувача з memPool і використовує це, пропонуючи вищу плату за газ.
Помітні атаки:
- Sushi Badger Digg (2021.1.25): Призвело до втрати 81.68 ETH.
- Пул Sushiswap Ape-ETH (2022.5.17): Зловмисник отримав прибуток приблизно 0.3 ETH.
- Uniswap (2023.4.2): спричинив збитки близько $25 мільйонів через сендвіч-атаку.
Рекомендації щодо запобігання:
- Використовуйте захист від прослизання під час торгівлі.
- Виконуйте угоди в непікові години, особливо на волатильних ринках.
- Використовуйте FlashBot rpc від 1inch, щоб надсилати угоди безпосередньо майнерам, оминаючи memPool.
Підсумок
Вітаємо! Ви завершили Модуль 2 — Вразливості смартконтрактів: глибоке занурення в атаки повторного входу та поширені експлойти
Повторимо вивчене:
Уразливості повторного входу - Зловмисники використовують прогалини, повторно входячи у функції до їх повного завершення.
- Повторний вхід в одну функцію: Шкідливий контракт повторно входить у функцію іншого контракту.
- Повторний вхід між функціями: Спільні стани між різними функціями використовуються через слабкий захист від повторного входу.
- Повторний вхід між контрактами: Використовує спільні стани між різними контрактами.
- Повторний вхід лише для читання: Використовує функцію, що видає помилкові результати, коли стан неузгоджений.
Цілочисельне переповнення - Обчислення, що перевищують встановлені межі, спричиняючи екстремальні значення.
Уразливості контролю доступу - Виникають через відсутність суворих обмежень доступу до важливих функцій.
Поширені вектори атак - Методи, за допомогою яких зловмисники використовують вразливості системи.
**FlashLoan Attack **- функція DeFi, що дозволяє миттєво позичати великі суми без застави, але використовується через логічні недоліки.
Атака фронтранінгу- Зловмисники дізнаються про незавершені транзакції та отримують вигоду, пропонуючи вищу плату за газ.
Цю статтю підготував для вас:
