Что такое Integer Overflow Attack?
Integer Overflow Attack возникает, когда числовое значение в программе достигает своего максимума и «оборачивается» обратно, позволяя атакующему исказить балансы или лимиты. В крипто это оборачивание может превратить проверку вроде «у вас достаточно токенов?» в «да», когда правильный ответ должен быть «нет». Представьте одометр старой машины, который прыгает с 999999 на 000000, но на кону деньги.
«Современные компиляторы делают это невозможным.» Не совсем так. Многие умные контракты всё ещё используют непроверенную арифметику в отдельных местах, кастомную математику или ассемблер, что может привнести баги переполнения снова.
Как работает Integer Overflow Attack
Краткий проход на примере контракта токена.
- Шаг 1: Контракт хранит балансы в целых числах фиксированного размера и имеет функцию, которая добавляет, вычитает или умножает суммы.
- Шаг 2: Атакующий подбирает входные данные, которые толкают число за его максимум, вызывая оборачивание к маленькому значению или нулю.
- Шаг 3: Это оборачивание переворачивает проверку. Например: после оборачивания баланс может выглядеть огромным или лимит перевода крошечным, поэтому require проходит.
- Шаг 4: Атакующий чеканит незаработанные токены, обходит ограничение эмиссии или переводит средства, которые не должен иметь возможность перемещать.
- Шаг 5: Они прогоняют полученное через обмены или мосты и уходят до того, как это обнаружат.
Реальная история: несколько токенов ERC 20 имели баг пакетного переполнения, который позволял атакующим чеканить абсурдные объёмы, а затем сливать их на биржах. Да, такое случалось.
Почему Integer Overflow Attack важен
Если вы держите токены, создаёте приложения или торгуете в DeFi, вам стоит обращать внимание. Речь о числах, а числа управляют крипто.
- Выгода: Понимание механики помогает раньше заметить тревожные признаки и защитить средства.
- Взгляд: Арифметические ошибки не устаревают. Появляются новые сети и инструменты, но ошибки в вычислениях всё ещё находят профессионалы.
- Актуальность: Вы встретите это в расчётах эмиссии токенов, в системах вознаграждений, счётчиках NFT и в популярных dApps, которые оперируют балансами пользователей.
В Solidity по умолчанию применяйте проверяемую арифметику и делайте блоки unchecked минимальными и проверенными. Добавьте fuzz тесты, которые проверяют крайние значения, а не только стандартные сценарии.
Ключевые характеристики Integer Overflow Attack
Чем это отличается от других ошибок:
- Переполнение по кругу: Значения прыгают от максимума обратно к нулю, как циклический счётчик.
- Тихий: При непроверенной арифметике нет встроенной ошибки, поэтому сбои выглядят как корректные результаты.
- Триггерится: Часто именно входные данные пользователей могут спровоцировать нужный момент.
- Повторяемый: Найдя уязвимость, атакующие могут автоматизировать её и запускать против множества целей.
Вариации
Основные варианты, одна группа ошибок, разные механизмы:
- Underflow: При вычитании значение уходит ниже нуля и оборачивается в очень большое число.
- Addition: Добавление к балансу или эмиссии приводит к превышению максимума и обратному обнулению.
- Multiplication: Множители вознаграждений или коэффициенты масштабирования увеличивают значение сверх допустимого предела.
- Counter: Счётчики ID токена или эмиссии прокручиваются и позволяют продолжать чеканку за пределом установленного лимита.
Integer Overflow Attack не ограничивается Solidity. Он может проявляться в Vyper, Rust, Move или в пользовательских ассемблерных вставках, и многие известные exploits сводились к непроверенной арифметике вокруг балансов или эмиссии.
Пример
Функция вознаграждений умножает число, введённое пользователем, на большой бонус, значение оборачивается, проверка лимита проходит, и Integer Overflow Attack позволяет атакующему чеканить гораздо больше токенов, чем было задумано.
Интересный факт
Классическая аркада с экраном проблем на уровне 256? Эта печально известная зависание возникло из-за переполнения целого числа, что показывает, что даже ретро-игры иногда демонстрируют похожие ошибки.
Итог
Думайте о Integer Overflow Attack как о числе, которое делает полный круг, и о злоумышленниках, пробегающих через возникшую брешь; держите арифметику проверяемой, и будете спокойнее.
