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.