Що таке Integer Overflow Attack?
Integer Overflow Attack відбувається, коли число в програмі досягає свого максимального значення й обертається назад, дозволяючи зловмиснику спотворювати баланси або ліміти. У крипто це обертання може перетворити перевірку «чи достатньо у вас токенів?» на так, коли насправді має бути ні. Уявіть собі старий одометр, що зскакує з 999999 на 000000, але тут на кону гроші.
«Сучасні компілятори роблять це неможливим.» Не зовсім. Багато розумні контракти досі використовують неперевірену арифметику в окремих місцях, власні математичні реалізації або асемблер, що можуть знову ввести помилки переповнення.
Як працює Integer Overflow Attack
Короткий опис на прикладі контракту токена.
- Крок 1: Контракт зберігає баланси у цілих числах фіксованого розміру і має функцію, яка додає, віднімає або множить суми.
- Крок 2: Зловмисник підбирає вхідні дані, що штовхають число за межу максимуму, викликаючи обертання до дуже малого або близького до нуля значення.
- Крок 3: Це обертання міняє результат перевірки. Наприклад: після обертання баланс виглядає гігантським або ліміт переказу наче дуже малий, тому require проходить.
- Крок 4: Зловмисник карбує незаслужені токени, обходить ліміт випуску або переводить кошти, якими не повинен розпоряджатися.
- Крок 5: Вони перетирають прибуток через обміни або бриджі й виходять ще до того, як хтось помітить.
Реальна історія: кілька токенів ERC20 мали баг переповнення в пакетній операції, що дозволяв зловмисникам карбувати абсурдні обсяги токенів, а потім зливати їх на біржах. Таке справді траплялося.
Чому Integer Overflow Attack має значення
Якщо ви тримаєте токени, створюєте застосунки або торгуєте в DeFi, вам варто звернути увагу. Тут йдеться про числа, а числа керують крипто.
- Перевага: Розуміння механіки допомагає виявляти сигнали тривоги на ранніх стадіях і захищати ваші кошти.
- Огляд: Арифметичні помилки давно існують. З'являються нові блокчейни та інструменти, але помилки в математиці досі експлуатують фахівці.
- Актуальність: Ви побачите це в обчисленні загальної пропозиції токенів, системах винагород, лічильниках NFT та популярних децентралізованих застосунках, що оперують балансами користувачів.
У Solidity тримайте арифметику під контролем за замовчуванням і робіть блоки unchecked маленькими та перевіреними. Додайте fuzz тести, що пробують крайні значення, а не лише звичні сценарії.
Ключові характеристики Integer Overflow Attack
Чим це відрізняється від інших багів:
- Обертання: Числа стрибають від максимуму назад до нуля, як циклічний лічильник.
- Без помилки: Нативної помилки немає, якщо математика не перевіряється, тому результати виглядають легітимно.
- Можна викликати: Часто вхідні дані від користувача можуть спричинити потрібний момент.
- Повторюваний: Якщо знайдено, зловмисники можуть автоматизувати його і запускати проти багатьох цілей.
Варіації
Головні варіанти, одна сім'я різні шляхи:
- Underflow: Віднімання опускає значення нижче нуля і обертається в величезне значення.
- Addition: Додавання до балансу або пропозиції перевищує максимум і повертається до малого значення.
- Multiplication: Множники винагород або фактори масштабу підривають значення понад межі.
- Counter: Ідентифікатор токена або лічильник пропозиції прокручується і дозволяє карбування понад ліміт.
Integer Overflow Attack не лише у Solidity. Він може з'явитися в Vyper, Rust, Move або в кастомному асемблері, і багато розкритих експлойти зводилися до неперевіреної математики навколо балансів або пропозицій.
Приклад
Функція винагород множить число, надане користувачем, на великий бонус, значення обертається, перевірка ліміту проходить, і Integer Overflow Attack дозволяє зловмиснику карбувати значно більше токенів, ніж передбачалося.
Цікавий факт
Класична аркада з екраном смерті на рівні 256? Той відомий злам виник через переповнення цілого числа, що доводить: навіть ретроігри можуть випадково демонструвати баги, схожі на криптопомилки.
Підсумок
Уявіть Integer Overflow Attack як числа, що роблять повне коло, а зловмисники вриваються через щілину; перевіряйте арифметику, і спатимете спокійніше.
