A buffer overrun tulajdonképpen egy programozási hiba kiaknázása. Valahányszor egy program bemenő adatot vár (a szövegszerkesztő szöveget, a webkiszolgáló URL-t, a számológép számokat, a játékprogram joystickmozdulatot), annak kezelése hasonlóan zajlik: mielőtt a program feldolgozza az adatot, azt előkészíti a feldolgozásra. Ilyenkor az adat a memória egy meghatározott területére, a pufferbe kerül. Különböző bemenő adatokhoz más-más, de tipikus pufferméret tartozik, ami gazdaságossági szempontokból sohasem lehet végtelen nagy, hisz memóriából még a mai árak mellett sem vehetünk végtelen mennyiséget. A hibátlan programokban védelem található a bemenő pufferek túltöltése ellen, ám hibátlan program egyszerűen nem létezik.
A buffer overrun lényege, hogy a pufferbe lényegesen több adatot „borítanak”, mint amennyi oda elfér. Egyszerű esetben a program lefagy, „ideális” esetben azonban „túlcsordul” az adatoknak fenntartott területen és a beömlő adatok felülírják a program eredeti kódját. Ha a hacker ügyes, ettől kezdve azt tesz a kiszemelt programmal, amit csak akar: átvejeti az uralmat felette, és például átírhatja a weblapunkat.
A roppant kevés számú magas tudású hacker tulajdonképpen olyan számítógépeket keres, amelyek kevéssé védettek, s ha találnak egyet, akkor jön a munka oroszlánrésze: olyan kód összeállítása, amelyet ha feltöltenek a kiszemelt gépre, akkor az adott program nem lefagy, hanem eredeti kódja íródik felül. Ehhez a kutatáshoz roppant tárgyi tudásra van szükség: rést kell találni egy TCP/IP implementáción, majd ahhoz elő kell állítani a megfelelő bitturmixot. Óriási dicsőség egy-egy ilyen biztonsági rés (exploit) megtalálása, s a legtöbb esetben a hacker azonmód publikálja eredményeit. Sokszor kész programot vagy forráskódot találhatunk a világhálón egy-egy hiba kiaknázására. A script kiddy meg letölti és vakon használni kezdi.
Fóti Marcell
(A szerző oktató, a NetAcademia Kft. ügyvezetője és a tech.net magazin főszerkesztője.)
