A hackerek úgy vehetik át a rendszer irányítását, hogy maximalizálják a szolgáltatás tárolókapacitását. Tehát hogyan hajtanak végre a hackerek ilyen puffertúlcsordulási támadásokat?
Hogyan támadják meg a hackerek vírusokat és rosszindulatú programokat használó rendszereket? Néha ez lehet zsarolóprogram; néha ez lehet egy támadás, amely felemészti a rendszerkövetelményeket. A puffertúlcsordulás az egyik ilyen támadási mód – de mi is ez valójában? Hogyan működnek ezek a támadások?
Mi az a puffertúlcsordulás?
Mi tehát valójában a puffer és a verem? A puffer egy olyan mező, ahol a számítógépnek adott bemeneti információk várnak, mielőtt elérnék a memóriát. Az adatok előhívása a memóriából egy rendszerfárasztó művelet. Tehát ha van elég hely a pufferterületen, közvetlenül innen hívja meg az adatokat. Ez teljesítménynövekedést jelent az eszköz számára. Természetesen, ha a puffer számára rendelkezésre álló hely megtelik, szükségessé válik a memória írása.
A verem lényegében egy adatstruktúra, amelyben az adatküldés (add) és pop (eltávolítás) műveletek zajlanak. A puffer és a verem fogalma meglehetősen hasonló; a puffer azonban úgy működik, mint egy verem, amely ideiglenesen tárolja a bejövő adatokat.
A puffertúlcsordulás kihívást jelenthet, de ahogy a neve is sugallja, akkor fordul elő, ha túlterhelt az adatok. Például be szeretne jelentkezni egy rendszerbe. A fejlesztők 250 bájt helyet foglalhatnak a felhasználónév számára. Ha 300 bájtnyi adatot ad meg, a puffer túlcsordul. Ez a túlcsordulás hatással lehet a memóriában lévő egyéb adatokra, és kárt okozhat.
Ez nagyszerű a hackerek számára. A kiberbűnözők kombinálhatják ezt a rendetlenséget különböző támadási vektorokkal, például feltörhetik a rendszert, és rendszergazdaként jelentkezhetnek be.
A puffertúlcsordulás megértéséhez a fő témák, amelyeket fel kell ismernie, a következők lesznek A CPU belső architektúrája, a memóriaregiszterek és a memória adatfeldolgozási módja. Íme néhány kifejezés a CPU-ról, amelyeket tudnia kell.
Összeszerelési kód |
Alacsony szintű programozási nyelv, azaz közel a gépi nyelvhez. |
Puffer |
Fix méret lefoglalt memóriaterület. |
Byte kód |
Magas szintű nyelven írt kód lefordítható középfokú nyelvi formája. |
Fordítóprogram |
Programozási nyelvet gépi kóddá alakító program. |
Halom |
Dinamikus, változó memóriaterület. |
Az emlékezetelmélet alapjai
A memóriaelmélet megértése nélkül nehéz lehet a gyakorlatban megoldani a puffertúlcsordulási problémákat. Úgy képzelheti el, mintha házat akarna építeni anélkül, hogy tudná, hogyan kell falat csinálni.
Képzelje el, hogy puffertúlcsordulást szeretne futtatni egy hacker szemszögéből. Ehhez manipulálnia kell a memóriát, és a CPU-val kell végrehajtania a kódot. Ha rosszindulatú valaki, akkor a cél a memória túlterhelése és a szomszédos memóriaterületek manipulálása lenne.
De mindenekelőtt a kupac, a verem és a szövegszegmens fogalmára kell összpontosítania.
A verem létrehozása közben a memória magas memóriacímeket használ. A nagy memóriacímek a kiterjesztett memóriaterületet jelentik. Ezután a címértékek csökkenni kezdenek. A memóriaverem a LIFO (Last In, First Out) nevű módszert használja a memóriahasználat során. A veremmemóriában lévő változók csak abban a körben érvényesek, amelyben meghatározásra kerültek. Ha kívül esnek ezen a hatókörön, hiba lép fel.
A veremmemória viszont dinamikusan működik, és nem kell magas címekről kezdenie. A kupacmemóriának nincs beállított korlátja; minden korlátot az operációs rendszer szab meg. Lehetőség van a kupacmemória dinamikus megváltoztatására, és ezek a korlátok a kupachasználat során a felhasználó igényei szerint változhatnak. A kupacmemória korlátai az operációs rendszer és a hardver által meghatározott tényezőktől függenek. Más szóval, ezeken a határokon belül dinamikus használatot kínál.
A szövegszegmens a programkódot, az adatszegmensek pedig globális adatokat tartalmaznak. Magas címek megosztása verem és kupac memória maguk között. A rendszer mindkét memóriát lefoglalja futás közben.
A puffertúlcsordulás jobb megértése érdekében meg kell vizsgálnia azokat az általános célú adatregisztereket, amelyeket a számítógép architektúrája használ az adatok tárolására. Ahelyett, hogy minden rekordot külön-külön elemezne, összpontosítson a lényegre.
- ESP (Extended Stack Pointer): Ez a regiszter tartalmazza a címet a verem tetején.
- EBP (Extended Base Pointer): Ez tartja az alapmutatót.
- EIP (Extended Instruction Pointer): És ez a regiszter tartalmazza a következő végrehajtandó utasítás címét.
Ezek a szakkifejezések kissé zavaróan hangzanak, de képzeljük el mindegyiket kis memóriapartícióként.
Hogyan működnek a puffertúlcsordulási támadások?
Amikor új adatokat ad hozzá bármely veremhez, ezek az adatok a tetejére kerülnek. Ezután minden új adat lejjebb kerül. Az ESP a verem tetején található. Tehát ebben az esetben az ESP alacsonyabb memóriacímre megy. Képzelje el, hogy a fent hozzáadott adatok lenyomják az ESP-t.
Amikor egy program elindul, a rendszer létrehoz egy verem keretet helyi változókkal. A puffertúlcsordulási támadás fő célja az EIP-hez vagy a visszatérési címhez való hozzáférés. Az ehhez a címhez hozzáféréssel rendelkező hacker parancsot adhat neki, hogy mutasson rá bármilyen rosszindulatú kódra, amelyre szüksége van, és ez hatással lesz a szélesebb rendszerre.
Minden egyes új adatbittel a verem az EBP felé növekszik. Az igazi kérdés itt az, hogy ha túl sok adatot adunk meg, tudjuk-e tolni az EBP-t az EIP felé? Így a kívánt adat vagy kód az EIP-n található, és láthatja a kívánt eredményeket. Már csak futni kell. A program futtatásakor az Ön EIP-kódjára mutat, és elindítja a végrehajtást. Ennek eredményeként, ha hacker volt, akkor végrehajtotta az első puffertúlcsordulási támadást.
Ha a példát más szemszögből szeretnénk venni, megfontoljuk a különböző sűrűségű, ESP, EBP és EIP folyadékokat egy tartályban. Képzelje el, hogy az ESP a tartály tetején található, mert a sűrűsége kisebb. Csakúgy, mint az olívaolaj és a víz, ezeket sem szabad összekeverni. A rosszindulatú kód tehát egy másik folyadék – amikor hozzáadja a tartályhoz, felborítja ezt az egyensúlyt, kiszorítja a folyadékot, és összekeveredik az EIP-vel. Ez puffer túlcsordulást jelez.
Hogyan védekezzünk a puffertúlcsordulási támadások ellen
Szóval hogyan lehet megakadályozni, hogy ez megtörténjen?
Először is fontos a helyes kódolási gyakorlat alkalmazása a szoftverfejlesztési folyamat során a biztonsági rések minimalizálása érdekében. A gondosan megírt kód csökkentheti a puffertúlcsordulás valószínűségét.
Egy másik lépés a védelmi mechanizmusok használata, amelyek lehetővé teszik a memóriaterületek megfigyelését, a pufferek korlátainak ellenőrzését és a támadások észlelését. Végül rendszeresen frissítenie kell a rendszereket, és javítania kell. A sebezhetőségeket javító frissítések megnehezítik a támadók számára az ismert biztonsági rések kihasználását. Ezenkívül a védelmi eszközök, például a szoftver és a tűzfal használata további biztonsági réteget biztosít.
Tegyen lépéseket a puffertúlcsordulás ellen
A puffertúlcsordulási támadások jelentős veszélyt jelentenek a kiberbiztonságra, és természetesen fontos az ellenük irányuló óvintézkedések megtétele. Szerencsére meg lehet akadályozni ezeket a támadásokat és megerősíteni a védekező mechanizmusokat. Számos jó biztonsági gyakorlat, például a szoftverek frissítése a javítások javítása érdekében, segít megvédeni az ilyen támadásokat és más biztonsági réseket.