Czym jest Integer Overflow Attack?
Integer Overflow Attack występuje, gdy liczba w programie osiąga maksymalną wartość i zawija się z powrotem, pozwalając atakującemu zmanipulować salda lub limity. W kryptowalutach takie zawinięcie może zmienić kontrolę typu „czy masz wystarczająco tokenów?” w tak, gdy odpowiedź powinna być nie. Wyobraź sobie stary licznik przebiegu samochodu przełączający się z 999999 na 000000, tylko że na szali są pieniądze.
„Nowoczesne kompilatory to uniemożliwiają.” Nie do końca. Wiele inteligentnych kontraktów nadal używa w niektórych miejscach niezweryfikowanej arytmetyki, własnych operacji matematycznych albo assemblera, które mogą ponownie wprowadzić błędy przepełnienia.
Jak działa Integer Overflow Attack
Krótki opis na przykładzie kontraktu tokena.
- Krok 1: Kontrakt przechowuje salda w liczbach całkowitych o stałym rozmiarze i ma funkcję, która dodaje, odejmuje lub mnoży kwoty.
- Krok 2: Atakujący wybiera dane wejściowe, które przesuwają liczbę ponad maksimum, powodując zawinięcie do bardzo małej lub zerowej wartości.
- Krok 3: To zawinięcie odwraca sprawdzenie. Na przykład po zawinięciu saldo może wyglądać na ogromne albo limit przelewu na bardzo mały, więc instrukcja require przechodzi.
- Krok 4: Atakujący tworzy niezasłużone tokeny, omija limit podaży lub przenosi środki, których nie powinien móc poruszyć.
- Krok 5: Przepuszcza zyski przez transakcje lub mosty i wycofuje się, zanim ktoś to zauważy.
Prawdziwy przykład: kilka tokenów ERC 20 miało kiedyś błąd przepełnienia przy operacjach zbiorczych, który pozwalał atakującym wygenerować absurdalnie dużą podaż, a następnie sprzedać ją na giełdach. Tak, to się zdarzyło.
Dlaczego Integer Overflow Attack ma znaczenie
Jeśli posiadasz tokeny, tworzysz aplikacje lub handlujesz w DeFi, warto to znać. Chodzi o liczby, a liczby decydują o wielu rzeczach w kryptowalutach.
- Korzyść: Wiedza o tym, jak to działa, pomaga wcześnie zauważyć sygnały ostrzegawcze i chronić środki.
- Perspektywa: Błędy arytmetyczne są ponadczasowe. Pojawiają się nowe łańcuchy i narzędzia, ale błędy w obliczeniach nadal są wykorzystywane przez specjalistów.
- Zastosowanie: Zobaczysz to przy obliczeniach podaży tokenów, systemach nagród, licznikach NFT i w popularnych zdecentralizowanych aplikacjach, które operują na saldach użytkowników.
W Solidity domyślnie stosuj sprawdzaną arytmetykę, a bloki unchecked utrzymuj małe i poddane audytowi. Dodaj testy fuzz, które próbują wartości ekstremalnych, nie tylko typowych ścieżek.
Kluczowe cechy Integer Overflow Attack
Co odróżnia to od innych błędów:
- Zawinięcie: Liczby przeskakują z wartości maksymalnej z powrotem do zera, jak zapętlony licznik.
- Ciche: Brak natywnego błędu, jeśli arytmetyka nie jest sprawdzana, więc usterki wyglądają jak prawidłowe wyniki.
- Możliwe do wywołania: Często dane wejściowe kontrolowane przez użytkownika mogą spowodować wystąpienie w określonym momencie.
- Powtarzalne: Po znalezieniu atakujący mogą to zautomatyzować i stosować wobec wielu celów.
Wariacje
Główne odmiany, ta sama rodzina, różne ścieżki:
- Underflow: Odejmowanie schodzi poniżej zera i zawija się do bardzo dużej wartości.
- Dodawanie: Dodanie do salda lub podaży powoduje przekroczenie maksimum i zawinięcie do małych liczb.
- Mnożenie: Mnożniki nagród lub czynniki skalujące mogą przepchnąć wartość poza limity.
- Licznik: ID tokena lub liczniki podaży przetaczają się i pozwalają na mintowanie powyżej ustalonego limitu.
Integer Overflow Attack to nie tylko problem Solidity. Może wystąpić w Vyper, Rust, Move lub w niestandardowym assemblerze, a wiele nagłośnionych eksploity sprowadzało się do niezweryfikowanej arytmetyki wokół sald lub podaży.
Przykład
Funkcja nagród mnoży liczbę podaną przez użytkownika przez duży bonus, wartość zawija się, kontrola limitu przechodzi, a Integer Overflow Attack pozwala atakującemu wygenerować znacznie więcej tokenów niż zamierzano.
Ciekawostka
Klasyka z automatów z ekranem śmierci na poziomie 256? To słynne zacięcie wynikało z przepełnienia liczby całkowitej, co pokazuje, że nawet retro gry mogą przypadkowo ujawniać błędy przypominające te z kryptowalut.
Podsumowanie
Pomyśl o Integer Overflow Attack jak o liczbach robiących pełen obrót i złodziejach wkraczających przez lukę. Sprawdzaj arytmetykę i będziesz spać spokojniej.
