Co je Integer Overflow Attack?
Integer Overflow Attack nastane, když číslo v programu dosáhne svého maxima a „přetočí se“ zpět, což umožní útočníkovi zmanipulovat zůstatky nebo limity. V kryptu může takové přetočení změnit kontrolu typu „máte dost tokenů?“ na ano, i když by správná odpověď měla být ne. Představte si starý automobilový počítadlo, které přechází z 999999 na 000000, jenže jde o peníze.
„Moderní kompilátory to znemožňují.“ Ne úplně. Mnoho smart contracts stále na některých místech používá nezkontrolovanou aritmetiku, vlastní matematiku nebo kód v assembleru, což může znovu zavést chyby přetečení.
Jak Integer Overflow Attack funguje
Krátký průchod na příkladu tokenového kontraktu.
- Krok 1: Kontrakt ukládá zůstatky jako celočíselné hodnoty s pevnou velikostí a má funkci, která přičítá, odčítá nebo násobí částky.
- Krok 2: Útočník zvolí vstupy, které posunou číslo přes jeho maximum, což způsobí přetočení na velmi malou nebo nulovou hodnotu.
- Krok 3: To přetočení zvrátí kontrolu. Například po přetočení může zůstatek vypadat obrovský nebo limit převodu vypadat malý, takže podmínka require projde.
- Krok 4: Útočník vytiskne nabytné tokeny, obejde limit zásoby nebo převede prostředky, které by jinak neměl mít možnost přesunout.
- Krok 5: Zisky přesune obchodováním nebo přes mosty a zmizí dříve, než si někdo všimne.
Skutečný příběh: několik tokenů ERC20 mělo chybu hromadného přetečení, která útočníkům umožnila vytisknout absurdní množství tokenů a pak je vyprodat na burzách. Ano, stalo se to.
Proč má Integer Overflow Attack význam
Pokud držíte tokeny, vytváříte aplikace nebo obchodujete v DeFi, mělo by vás to zajímat. Jde o čísla a čísla řídí kryptoměny.
- Výhoda: Pochopení principu vám pomůže dříve rozpoznat varovné signály a ochránit své peníze.
- Pohled: Aritmetické chyby nejsou novinkou. Objevují se nové řetězce a nástroje, ale chyby v matematice útočníci stále zneužívají.
- Relevance: Narazíte na to v počítání zásoby tokenů, systémech odměn, čítačích NFT a v populárních dApps, které manipulují s uživatelskými zůstatky.
V Solidity nechte aritmetiku kontrolovanou ve výchozím nastavení a udržujte bloky unchecked malé a prověřené. Přidejte fuzz testy, které zkouší extrémní hodnoty, ne jen běžné scénáře.
Klíčové vlastnosti Integer Overflow Attack
Čím se liší od jiných chyb:
- Přetočení: Čísla skočí z maxima zpět na nulu jako opakovatelný čítač.
- Tiché: Pokud je aritmetika nekontrolovaná, nevyvolá se nativní chyba, takže výsledky vypadají legitimně.
- Spustitelné: Často mohou uživatelské vstupy vynutit přesný moment, kdy k tomu dojde.
- Opakovatelné: Jakmile je to nalezeno, útočníci to mohou zautomatizovat a spustit napříč mnoha cíli.
Varianty
Hlavní typy, stejný základ, různé cesty:
- Underflow: Odčítání klesne pod nulu a přetočí se na obrovskou hodnotu.
- Addition: Přičtení ke zůstatku nebo zásobě překročí maximum a vrátí se na malé číslo.
- Multiplication: Násobiče odměn nebo škálovací faktory zvětší hodnotu přes limity.
- Counter: ID tokenu nebo čítače zásoby se přetočí a umožní pokračovat v mintování nad limitem.
Integer Overflow Attack není jen záležitost Solidity. Může se objevit ve Vyperu, Rustu, Movu nebo v kódu v assembleru, a mnoho medializovaných exploits pramenilo z nezkontrolované matematiky kolem zůstatků nebo zásob.
Příklad
Funkce odměn vynásobí uživatelem zadané číslo velkým bonusem, hodnota se přetočí, kontrola limitu projde a Integer Overflow Attack umožní útočníkovi vytisknout mnohem více tokenů, než bylo zamýšleno.
Zajímavost
Ten arkádový klenot s úrovní 256, kde hra zamrzla? Ten proslulý kolaps byl způsoben integer overflow, což dokazuje, že i retro hry mohou nechtěně odhalit chyby podobné těm v kryptu.
Shrnutí
Představte si Integer Overflow Attack jako čísla, která udělají celé kolo, a útočníky, kteří přes mezeru rychle projdou; kontrolujte aritmetiku a budete klidnější.
