Блог

Автоматичний переклад · Читати англійською

SSO Модуль 2 - Вразливості смарт-контрактів: глибоке занурення у reentrancy-атаки

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

Автор Markos Mebellis

SSO Модуль 2 - Вразливості смарт-контрактів: глибоке занурення у reentrancy-атаки
На цій сторінці

Смарт-контракти революціонізують світові галузі завдяки своїй ефективності, прозорості та незмінним властивостям. Однак їхній відкритий і автоматизований дизайн також наражає їх на ризики. Щоб максимізувати їхній потенціал і мінімізувати загрози, важливо розуміти їхні вразливості та можливі шляхи атак. Створення та підтримка цих контрактів вимагає ретельної уваги та дотримання найкращих практик. Ця стаття заглиблюється в поширені вразливості, ілюструючи їх реальними випадками для кращого розуміння. Розгляньмо наступну статтю, люб'язно надану 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:

  1. Завжди дотримуйтеся шаблону check-effect-interaction.
  2. Застосовуйте захист від повторного входу для всіх чутливих операцій.
  3. Ретельно обробляйте кожен зовнішній виклик.

Integer Overflow:

Коли обчислення перевищують межі, вони переповнюються, що часто призводить до крихітних або величезних значень.

Показові атаки:

  • BeautyChain (2018): Зловмисники отримали 10^58 BEC через integer overflow, збувши приголомшливі $900 мільйонів.
  • Poolz (2023): Призвело до втрати приблизно $665 000 у мережах Ethereum, Binance та Polygon.

Заходи проти Integer Overflow:

  1. Використовуйте безпечні методи обчислень, як-от бібліотека safeMath.
  2. Надавайте пріоритет перевірці меж, щоб переконатися, що результати залишаються в допустимому діапазоні.
  3. Використовуйте компілятор Solidity версії 0.8.0 або новішої для вбудованого виявлення переповнення.

Контроль доступу:
Вразливості контролю доступу виникають через відсутність суворих обмежень доступу до функцій, що виконують критичні операції.

  • Відомі атаки:
  • DAOMaker (2021): Приголомшливі ~$4 млн було виведено після того, як init функція залишилася вразливою.
  • GymNetwork (2022): Зловмисники скористалися недоглядом автентифікації в depositFromOtherContract(), що дозволило незаконно збільшити баланс без жодної фактичної оплати. Втрата? Близько 2 475,91 WBNB.
  • Tempdao (2023): Недбалий підхід до контролю доступу для функції migrateStake призвів до втрати понад $2,34 мільйона.

Вразливість контролю доступу

  • Опис: Вразливості, що виникають через недостатні механізми обмежень, які регулюють доступ і привілеї до певних операцій у системі.

Запобіжні заходи:

  1. Сувора перевірка дозволів: Завжди застосовуйте суворі протоколи дозволів для функцій, особливо тих, що виконують чутливі операції.
  2. Механізм мультипідпису: Для завдань, що потребують спільного ухвалення рішень, використовуйте протоколи мультипідпису, які вимагають кількох схвалень перед виконанням чутливих операцій.

Поширені вектори атак

  • Опис: Різні методи або канали, через які зловмисники використовують уразливості в системі, переважно в смарт-контрактах.

Помітні приклади:

  • Атаки FlashLoan: Використовує функцію миттєвого позичання в системах децентралізованих фінансів для здійснення зловмисних дій.
  • Фронт-раннінг: Зловмисники дізнаються про незавершену транзакцію іншого користувача та діють на її основі, пропонуючи вищу плату за газ.

Атака FlashLoan

  • Опис: Хоча FlashLoan сам по собі не є атакою, це функція DeFi, яка дозволяє користувачам миттєво позичати значні суми без застави. Її використовували через логічні недоліки у взаємодіях і зв'язках контрактів.

Помітні атаки:

  1. Harves Finance (2020.10.26): Призвело до втрати $38 мільйонів.
  2. InverseFinance (2022.6.16): Призвело до втрати 53.2445 WBTC та 99,976.29 USDT.
  3. NewFreeDAO (2022.9.8): Виведено 4 481 WBNB, що еквівалентно приблизно $1,25 млн.
  4. Lodestar (2022.12.11): Використано через маніпуляцію ціною оракула.
  5. 0vix (2023.4.28): Призвело до втрати $2 млн у мережі Polygon.

Рекомендації щодо запобігання:

  1. Враховуйте особливості Flashloan під час розробки проєкту.
  2. Для точного визначення ціни використовуйте зважене за часом середнє або кілька оракулів.

Фронтраннінг

  • Опис: Зловмисник дізнається про транзакцію іншого користувача з memPool і використовує це, пропонуючи вищу плату за газ.

Помітні атаки:

  1. Sushi Badger Digg (2021.1.25): Призвело до втрати 81.68 ETH.
  2. Пул Sushiswap Ape-ETH (2022.5.17): Зловмисник отримав прибуток приблизно 0.3 ETH.
  3. Uniswap (2023.4.2): спричинив збитки близько $25 мільйонів через сендвіч-атаку.

Рекомендації щодо запобігання:

  1. Використовуйте захист від прослизання під час торгівлі.
  2. Виконуйте угоди в непікові години, особливо на волатильних ринках.
  3. Використовуйте FlashBot rpc від 1inch, щоб надсилати угоди безпосередньо майнерам, оминаючи memPool.

Підсумок

Вітаємо! Ви завершили Модуль 2 — Вразливості смартконтрактів: глибоке занурення в атаки повторного входу та поширені експлойти

Повторимо вивчене:

Уразливості повторного входу - Зловмисники використовують прогалини, повторно входячи у функції до їх повного завершення.

  • Повторний вхід в одну функцію: Шкідливий контракт повторно входить у функцію іншого контракту.
  • Повторний вхід між функціями: Спільні стани між різними функціями використовуються через слабкий захист від повторного входу.
  • Повторний вхід між контрактами: Використовує спільні стани між різними контрактами.
  • Повторний вхід лише для читання: Використовує функцію, що видає помилкові результати, коли стан неузгоджений.

Цілочисельне переповнення - Обчислення, що перевищують встановлені межі, спричиняючи екстремальні значення.

Уразливості контролю доступу - Виникають через відсутність суворих обмежень доступу до важливих функцій.

Поширені вектори атак - Методи, за допомогою яких зловмисники використовують вразливості системи.

**FlashLoan Attack **- функція DeFi, що дозволяє миттєво позичати великі суми без застави, але використовується через логічні недоліки.

Атака фронтранінгу- Зловмисники дізнаються про незавершені транзакції та отримують вигоду, пропонуючи вищу плату за газ.

Цю статтю підготував для вас:

Підсумок — ілюстрація