Mi az a Integer Overflow Attack?
Integer Overflow Attack akkor történik, amikor egy programban egy szám eléri a maximális értékét, majd visszaugrik a tartomány elejére, így a támadó manipulálhatja az egyenlegeket vagy a limiteket. A kriptovilágban ez a visszaugrás egy „van elég tokened?” ellenőrzésnél akkor is igent eredményezhet, amikor a válasznak nemnek kellene lennie. Képzelj el egy régi autó kilométer-számlálóját, amely 999999-ről 000000-ra ugrik, csak éppen pénz forog kockán.
„A modern fordítók ezt lehetetlenné teszik.” Ez azért nem egészen igaz. Sok okosszerződésben továbbra is előfordulnak ellenőrzés nélküli aritmetikai műveletek, egyedi matematikai megoldások vagy assembly-kód, amelyek ismét előidézhetik a túlcsordulási hibákat.
Hogyan működik az Integer Overflow Attack?
Íme egy gyors áttekintés egy tokenszerződés példáján keresztül.
- 1. lépés: A szerződés rögzített méretű egész számokkal tárolja az egyenlegeket, és van egy függvénye, amely összead, kivon vagy összeszoroz értékeket.
- 2. lépés: A támadó olyan bemeneteket választ, amelyekkel egy szám túllépi a maximális értékét, ezért az visszaugrik egy egészen kicsi vagy nullához közeli értékre.
- 3. lépés: A visszaugrás megfordít egy ellenőrzést. Például a művelet után az egyenleg óriásinak, az átutalási limit pedig aprónak tűnik, ezért a require feltétel teljesül.
- 4. lépés: A támadó jogosulatlanul tokeneket hoz létre, megkerül egy felső korlátot, vagy olyan pénzt utal át, amelyet nem lenne szabad mozgatnia.
- 5. lépés: A zsákmányt kereskedés vagy bridge-ek segítségével mozgatja tovább, majd eltűnik, mielőtt bárki észrevenné.
Egy kis valós történet: korábban több ERC 20 tokenben is volt olyan batch túlcsordulási hiba, amely lehetővé tette a támadóknak, hogy elképesztően nagy mennyiségű tokent hozzanak létre, majd eladják azokat az exchange-eken. Bizony, ilyen is történt.
Miért fontos az Integer Overflow Attack?
Ha tokeneket tartasz, alkalmazásokat fejlesztesz vagy DeFi-eszközökkel kereskedsz, érdemes odafigyelned rá. A számokról van szó, a kriptovilágot pedig számok működtetik.
- Előny: Ha tudod, hogyan működik, időben felismerheted a gyanús jeleket, és megvédheted a pénzedet.
- Nézőpont: Az aritmetikai hibák nem évülnek el. Új láncok és eszközök jelennek meg, de a profik továbbra is kihasználják a matematikai tévedéseket.
- Jelentőség: Előfordulhat a tokenkínálat kiszámításánál, a jutalmazási rendszerekben, az NFT-számlálóknál és a felhasználói egyenlegeket kezelő népszerű dAppokban.
Solidityben alapértelmezés szerint használd az aritmetikai ellenőrzéseket, az unchecked blokkokat pedig tartsd röviden, és auditáltasd őket. Írj fuzz teszteket szélsőséges értékekkel is, ne csak a problémamentes esetekre.
Az Integer Overflow Attack fő jellemzői
Mi különbözteti meg más hibáktól?
- Visszaugrás: A számok a maximumról visszaugranak nullára, mint egy körbeforduló számláló.
- Észrevétlen: Ha a matematikai műveletek nincsenek ellenőrizve, nem jelenik meg natív hibaüzenet, így a hibás eredmény érvényesnek tűnik.
- Kiváltható: A felhasználó által megadott bemenetekkel gyakran előidézhető, hogy pontosan a kívánt pillanatban történjen meg.
- Ismételhető: Ha egyszer felfedezték, a támadók szkripttel automatizálhatják, és számos célpont ellen bevethetik.
Változatai
A leggyakoribb változatok ugyanabba a családba tartoznak, de más-más módon működnek:
- Alulcsordulás: A kivonás nulla alá megy, majd egy hatalmas értékre ugrik vissza.
- Összeadás: Egy egyenleg vagy a kínálat növelése túllépi a maximális értéket, majd kis számokra ugrik vissza.
- Szorzás: A jutalomszorzók vagy skálázási tényezők a limiteken túlra növelik az értéket.
- Számláló: A tokenazonosító- vagy kínálatszámlálók túlcsordulnak, így a tokenek létrehozása a felső korlát elérése után is folytatódhat.
Az Integer Overflow Attack nem csak a Solidityre jellemző. Vyperben, Rustban, Move-ban vagy egyedi assembly-kódban is előfordulhat, és számos nyilvánosságra hozott kihasználás hátterében az egyenlegek vagy a kínálat körüli, ellenőrzés nélküli matematikai műveletek álltak.
Példa
Egy jutalmazási függvény összeszoroz egy felhasználó által megadott számot egy nagy bónusszal, az érték túlcsordul, a felső korlát ellenőrzése sikeres lesz, az Integer Overflow Attack pedig lehetővé teszi, hogy a támadó a tervezettnél jóval több tokent hozzon létre.
Érdekesség
Az a klasszikus arcade játék, amelyben a 256. pálya egy fagyott képernyővel végződik? A hírhedt lefagyást egy egészszám-túlcsordulás okozta, ami bizonyítja, hogy még a retró játékok is előrevetíthetik a kriptovilág hibáit.
Összefoglalás
Gondolj az Integer Overflow Attackre úgy, mintha a számok teljes kört futnának, a tolvajok pedig átszáguldanának a keletkező résen; ellenőrizd a matematikai műveleteket, és nyugodtabban alszol.