Smart Contract Security Vocabulary: Reentrancy, Flash Loans, and Front-Running Explained (англійською)

Освоєння словникового запасу з безпеки розумних контрактів: атаки з поверненням, експлуатація флеш-кредитів, фронт-ранкінг, вразливості контролю доступу і професійна англійська мова для аудиторських звітів.

Безпека розумних контрактів є однією з найважливіших областей програмного забезпечення - одна вразливість в протоколі DeFi може призвести до втрати мільйонів доларів без відшкодування. Кожен розробник блокчейну, аудитор і дослідник безпеки, що працює в просторі Web3, потребує точного англійського словника для обговорення, документування і усунення вразливостей. Цей посібник містить найважливіші вектори атаки, термінологію аудиту і практику безпеки з визначеннями і реальним використанням.


Основні проблеми вивчення криптосистем

Reentrancy

Reentrancy є однією з найвідоміших уразливостей розумних контрактів. Це відбувається, коли контракт здійснює зовнішній виклик до контракту без довіри перед оновленням свого власного стану, що дозволяє зловмисному контракту рекурсивно вводити початкову функцію перед оновленням стану.

Як це працює:

  1. Контракт A викликає контракт B (наприклад, для передачі ETH)
  2. Резервна функція контракту B викликає назад в контракт A перед завершенням транзакції перенесення
  3. Баланс контракту А ще не був оновлений — тому нападник може неодноразово витягувати кошти

«ДАО-хак 2016 року, який призвів до втрати 3,6 мільйонів ETH, був викликаний вразливістю реентрінга у функції виведення»

Словник профілактики:

  • ** Checks- Effects- Interactions pattern (CEI) ** — захисний шаблон кодування: спочатку перевірити умови, оновити стан, а потім викликати зовнішні контракти
  • ** Reentrancy guard / nonReentrant modifier ** — мутекс, який запобігає виклику функції, якщо вона вже виконується
  • Підтягування-на-відштовхування-платіжний шаблон — замість відштовхування коштів до користувачів, дозволяйте їм відштовхувати (зняти) зовнішньо

Флеш-кредитні атаки

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

Словник атак за допомогою кредиту:

  • ** Флеш- позика ** — позика довільного розміру, яку слід повернути в рамках однієї транзакції; не потрібне застави
  • ** Price oracle ** — подача даних, яка повідомляє розумному контракту про поточну ринкову ціну активу
  • ** Маніпуляція Oracle ** - використання флеш-кредиту для переміщення ціни в спот-пулі DEX, подачі фальшивої ціни в Oracle, на яку покладаються інші контракти
  • AMM (Automated Market Maker) — розумний контракт, який дозволяє здійснювати токени-своп за допомогою формули ціноутворення (наприклад, Uniswap x * y = k)
  • ** Сендвіч- атака ** — варіант, де нападник передує і слідує за жертвою, використовуючи флеш- кредит

«Злочинець використовував $ 50M USDC флеш-кредит, щоб штучно підвищити ціну застави в пулі Uniswap V2, викликаючи недозабезпечену позику в кредитному протоколі до того, як позика була погашена в тому ж блоку»

Превентивные меры:

  • Використовувати **TWAPs (Time- Weighted Average Prices) ** замість спотових цін як оракули — важче маніпулювати ними у одному блоку
  • Використовувати ** Chainlink ** або інші подачі даних поза ланцюгом для логіки чутливості до цін

Передній і задній ход

** Фронт-функціонування ** в блокчейні відбувається, коли шахрай, валідатор або MEV бот бачить очікувану транзакцію в mempool і вставляє свою власну транзакцію перед нею, щоб отримати прибуток.

**MEV (Maximum Extractable Value) ** — загальне значення, яке шахрай або перевіряючий може отримати за допомогою переупорядкування, вставки або цензури транзакцій у блоку.

** Словник MEV: **

  • Mempool — спільний фонд очікуваних, непідтверджених транзакцій, видимих для перевіряючих
  • ** Газова ціна торгів ** — платити більше газу, щоб отримати транзакцію включено і замовлено першим
  • ** Сендвіч- атака ** — передня спроба виконання свопу шляхом купівлі до нього (збільшення ціни) і продажу після нього (захоплення прослизання)
  • ** Арбітражний бот ** — бот, який автоматично захоплює розбіжності цін між DEX
  • ** Скольження ** — різниця між очікуваною і фактичною ціною торгівлі
  • ** Схема затвердження-розкриття ** — двох кроків шаблон, який приховує мету транзакції доки фаза затвердження не буде остаточною

Протокол Flashbots був розроблений як відповідь на кризу MEV — він дозволяє пошуковикам приватно надсилати транзакційні пакети валідаторам, зменшуючи шкідливий фронт-ранкінг в публічному мемпулі


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

Розумні контракти повинні ретельно контролювати, хто може викликати які функції. Недоліки контролю доступу є одними з найпоширеніших вразливостей.

** Типи: **

** Вразливості власника ** — функції, призначені для використання адміністратором, доступні для всіх tx.origin vs msg.sender — використання tx.origin замість msg.sender для автентифікації дозволяє фішинговим атакам через шкідливі посередницькі контракти ** Ескаляція привілеїв ** — функція, яка надає змогу атакуючому надати собі підвищені права доступу ** Відсутні модифікатори доступу ** — функція initialize(), яку може викликати будь- хто, а не тільки розгортач

«Експлуатація була можлива, тому що функція setOwner() не мала модифікатора onlyOwner — будь-яка адреса могла претендувати на право власності на контракт і висипати скарбницю»

Словник профілактики:

  • ** onlyOwner / onlyRole ** — модифікатори Solidity, що обмежують доступ до певних адрес
  • ** OpenZeppelin AccessControl ** — стандартна бібліотека, що реалізує керування доступом за ролями
  • ** Тайм- блок ** — затримка між чергою і виконанням дії з привілеями
  • ** Multisig ** — вимагає декількох авторизованих підписувачів для схвалення конфіденційних операцій

Переповнення і переповнення цілих чисел

До Solidity 0. 8 арифметичні операції не поверталися при переповненнях. uint, що перевищує своє максимальне значення, буде обертатися навколо нуля.

«Solidity 0.8.0 ввела автоматичне захист від переповнення/недоповнення. До 0.8 контракти вимагають бібліотеки SafeMath — переконайтеся, що будь-який застарілий контракт, який ви аудиторії використовує SafeMath або був мігрований

** Терміни: **

  • ** Overflow ** — значення, що перевищує максимальну величину типу даних, що обгортається навколо
  • Underflow — значення, яке перевищує нуль у типі без знаку, перегортання до максимуму
  • ** SafeMath ** — бібліотека, що забезпечує безпечні арифметичні дії (зараз вбудована у Solidity 0. 8+)

Логічні помилки та логічні помилки бізнесу

Не всі експлоати є екзотичними. Багато з них є простими логічними помилками в проектуванні контракту.

** Приклади: **

  • Неправильний порядок операцій у розрахунках винагороди
  • Помилки округлення на користь нападників (повторне округлення вниз на користь нападника)
  • Вади машини станів — дозволені неправильні переходи станів

«Експлуатація використовувала помилку округлення в обчисленні доходу: за кожен 1 wei, який був вкладений, нападник отримав 1 повний жетон доходу через обрізання. Повторюючи це 10 мільйонів разів в петлі, вони витягнули $ 4M. “


Ревізійний словник

Рівень важкості

LevelDefinition
CriticalImmediate fund loss or protocol takeover possible; must be fixed before deployment
HighSignificant fund loss or functionality compromise possible
MediumPartial fund loss or degraded functionality possible under non-trivial conditions
LowMinor issue or best-practice deviation; low probability of exploitation
InformationalNot a vulnerability; observation or code quality note

Фрази звітів аудиту

  • “Ми виявили критичну вразливість у функції withdraw() в рядку 142. Злочинець може рекурсивно викликати withdraw() перед оновленням балансу, виснажуючи баланс ETH контракту. ”*
  • “Функції transferOwnership() не вистачає двох кроків передачі власника. Ми рекомендуємо реалізувати змінну pendingOwner і вимагати від нового власника прийняти її викликом acceptOwnership(), запобігаючи випадковому перенесенню на неправильну адресу.”*
  • “Контракт правильно реалізує шаблон Перевірки-Ефекти-Взаємодії. Не було виявлено уразливостей щодо повернення».*

Звичайні фрази аудиту

PhraseUsage
Attack vectorThe path an attacker uses to exploit a vulnerability
ExploitA technique or script that weaponises a vulnerability
Proof of concept (PoC)A working test demonstrating that an exploit is possible
MitigationA change that reduces or eliminates a vulnerability
RemediationThe process of fixing a vulnerability
Test coverageThe percentage of code covered by automated tests
InvariantA condition that must always be true in a contract (used in formal verification)
Formal verificationMathematical proof that a contract behaves as specified under all conditions

Practice

Поглибте свій словник з безпеки розумних контрактів і блокчейнів за допомогою ** Набір вправ з блокчейну ** і досліджуйте всі ресурси на ** Розробник Blockchain навчальний шлях **.

Поширені запитання

Про що ця стаття "Smart Contract Security Vocabulary: Reentrancy, Flash Loans, and Front-Running Explained (англійською)"?

Освоєння словникового запасу з безпеки розумних контрактів: атаки з поверненням, експлуатація флеш-кредитів, фронт-ранкінг, вразливості контролю доступу і професійна англійська мова для аудиторських звітів.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Smart Contract Security Vocabulary: Reentrancy, Flash Loans, and Front-Running Explained (англійською)"?

Приблизно 13 min.