Mesterséges intelligencia által vezérelt kibertámadások: Hogyan lehet felismerni, megelőzni és megvédeni az intelligens fenyegetéseket?

Olvassa el most
A helyszíni fordításokhoz mesterséges intelligenciát használunk, és bár törekszünk a pontosságra, nem biztos, hogy mindig 100%-os pontosságúak. Megértését nagyra értékeljük.

A CVE-2024-38063 átfogó lebontása: A Windows TCP/IP Stack kritikus fenyegetése

a OPSWAT
Ossza meg ezt a bejegyzést
Az OPSWAT ösztöndíjprogram résztvevőjének, Pham Ngoc Thien-nek a fejképe

2024. augusztus 13-án az MSTC (Microsoft Security Response Center) nyilvánosságra hozta a CVE-2024-38063 kódot, amely egy kritikus sebezhetőséget jelent a Windows TCP/IP stackben, amely kihasználva veszélyeztetheti az operációs rendszer létfontosságú hálózati funkcióit. Itt az OPSWAT Graduate Fellowship Program résztvevői alaposan megvizsgálják a hiba technikai részleteit és potenciális hatásait, valamint a sebezhetőségre ajánlott elhárítási stratégiákat.

OPSWAT ösztöndíjprogram résztvevői: Pham Ngoc Thien - Ho Si Minh-völgyi Informatikai Egyetem 

Áttekintés

A CVE-2024-38063 egy 9,8-as CVSS pontszámmal rendelkező kritikus sebezhetőség a Windows TCP/IP stackben, amely az IPv6 csomagok feldolgozását érinti. Távoli támadók kihasználhatják ezt a sebezhetőséget egy egész szám alulcsordulással az IPv6 kiterjesztési fejlécek kezelésénél rosszindulatú kód futtatására vagy DoS (Denial of Service) okozására.

Mivel az IPv6 alapértelmezés szerint engedélyezett a legtöbb modern rendszeren, ez a nulladik kattintás hibája jelentős kockázatot jelent. Ennek eredményeképpen a Windows 10, a Windows 11, valamint a Windows Server 2008, 2012, 2016, 2019 és 2022 összes nem javított, IPv6-ot engedélyező verziója sebezhető ezzel a CVE-vel szemben.

A CVE-2024-38063-nak a Windows hálózati funkcióira gyakorolt hatását bemutató ábra

Kulcsfogalmak

Windows TCP/IP stack

A Windows TCP/IP stack egy alapvető operációs rendszerelem, amely a TCP/IP (Transmission Control Protocol/Internet Protocol) csomagon keresztül történő hálózati kommunikációért felelős. Ez kezeli az összes hálózati interakciót, megkönnyítve az eszközök közötti kommunikációt a helyi és globális hálózatokon keresztül.

Pillanatkép a Windows TCP/IP stack architektúrájáról

IPv6 és bővítményfejlécek

Az IPv6-ot az IPv4 korlátainak kezelésére fejlesztették ki. Különböző fejlesztéseket vezetett be, például a modularitást és a rugalmasságot a kiterjesztő fejlécek révén. A fejlécek, amelyek az IPv6 fejléc és a hasznos teher között helyezkednek el, támogatják az opcionális adatokat és a fejlett funkciókat.

A legfontosabb IPv6 kiterjesztés fejlécek a következők:

  • Hop-by-Hop beállítások (Következő fejléc = 0) 
  • Útválasztási fejléc (Következő fejléc = 43) 
  • Töredékfejléc (Következő fejléc = 44) 
  • Célállomás opciók fejléc (Következő fejléc = 60) 
  • Hitelesítési fejléc (AH) (Következő fejléc = 51) 
  • Encapsulating Security Payload (ESP) (Következő fejléc = 50) 

Minden bővítményfejléc a következőre mutat a Következő fejléc mezőn keresztül, így létrehozva egy szekvenciális láncot. Ez a modularitás bonyolítja a csomagkezelési folyamatot és potenciális kihasználási vektorokat eredményez.

Az IPv6 kiterjesztés fejléceit és a csomagok szerkezetét ábrázoló ábra
Egy IPv6 adatcsomag formátuma

Egész szám alulcsordulás

Egész szám alulcsordulás akkor következik be, amikor egy számítás kisebb értéket eredményez, mint az adattípus minimális ábrázolható értéke. Például egy nagyobb érték kivonása egy kisebb értékből egy előjel nélküli egész számra azt eredményezheti, hogy az eredmény egy nagyon nagy pozitív érték lesz.

Egész szám túlcsordulás akkor következik be, amikor az érték túllépi az adattípus maximális határértékét, és "túlcsordul" vissza a legkisebb ábrázolható értékre (pl. 0 egy 0-10-es tartományban). Mindkét forgatókönyv a határfeltételek nem megfelelő kezelése miatt következik be az aritmetikai műveletekben, ami súlyos sebezhetőségekhez vezet a szoftverrendszerekben.

Az egész számok alul- és túlcsordulását magyarázó ábra az adatfeldolgozásban

Sebezhetőségi elemzés

Az IPv6-feldolgozás munkafolyamata

Egy IPv6-csomag fogadása után a Windows először elemzi az IPv6-fejlécet. Ezután az IppReceiveHeaderBatch függvény ellenőrzi a Next Header mező értékét, hogy kiválassza a megfelelő kezelőt a következő fejlécekhez. Az IppReceiveHeaderBatch a lánc minden egyes bővítményfejlécéhez meghívja a megfelelő rutint az adott fejléc feldolgozásához.

Az IPv6 csomagfeldolgozás munkafolyamatát bemutató ábra a Windowsban

A mechanizmus rugalmas és moduláris felépítése ellenére ez egy potenciális támadási vektort vezet be. Az IPv6-ban a töredezett csomagokat jellemzően a célállomáson rakják össze újra, ahol a töredékek újbóli összerakásának folyamatában és a fejléc kezelésében van sebezhetőség.

A támadó számos manipulált kiterjesztési fejléccel ellátott, rosszul formázott csomag elküldésével memóriakezelési hibát idézhet elő, és puffer túlcsordulást idézhet elő. Ez lehetővé teszi, hogy a felesleges adatok nem kívánt memóriarégiókat írjanak felül, ami potenciálisan tetszőleges kód futtatását teszi lehetővé. Ezt a sebezhetőséget CVE-2024-38063 néven azonosították.

A rosszul formázott IPv6 csomagokból eredő puffer túlcsordulási kockázatot szemléltető ábra

Kritikus hiba a Windows TCP/IP stackben

A Microsoft által a CVE-2024-38063 sebezhetőséget orvosló javítást Marcus Hutchins biztonsági kutató alaposan megvizsgálta. Technikai blogjában részletes betekintést nyújt a sebezhetőség kiváltó okába. Az ő eredményeire építve munkatársunk tovább vizsgálta a problémát, hogy alaposan megértse a kihasználást.

Foltelemzés

A javítás a tcpip.sys fájl frissítését tartalmazta, beleértve az Ipv6pProcessOptions függvényen belüli módosítást. Az egysoros módosítás az IppSendErrorList() hívását az IppSendError() hívására cserélte, ami arra utal, hogy az IppSendErrorList() hozzájárulhatott a CVE-hez.

A tcpip.sys-t a CVE-2024-38063 javítás előtt bemutató kód képernyőmentése
1. ábra. A foltozás előtt
A tcpip.sys fájlt a CVE-2024-38063 javítás után mutató kód képernyőkép
2. ábra. A foltozás után

Nulla csomagméret

Az IppSendErrorList() függvény közelebbi vizsgálata során kiderült, hogy a csomagok összekapcsolt listáját dolgozza fel az IppSendError() függvény meghívásával. Az IppSendError() függvény a hibás csomagoknak a STATUS_DATA_NOT_ACCEPTED állapotot adja. Ezután létrehoz egy ICMP hibaüzenetet, amely tartalmazza a problémás csomagra vonatkozó információkat, és visszaküldi azt. Ha azonban az IppSendErrorList() függvényt több csomagra vonatkozóan always_send_icmp = true értékkel hívjuk meg, a packet_size mezőt minden csomag esetében nullára állítja.

Képernyőkép az IppSendErrorList függvényről, amely a csomagméretet nullára állítja.

Az Ipv6pProcessOptions függvényt az opciós értékmezőket tartalmazó kiterjesztési fejlécek feldolgozására tervezték, beleértve a Hop-by-Hop Options és a Destination Options fejléceket is. Az Option Type 0x80-nál nagyobb értékre állításával a támadó speciális hibát idézhet elő az options header feldolgozásában, ami az always_send_icmp true értékre állítását kényszeríti, és ennek következtében a csomag mérete nullára lesz állítva.

Az IPv6 Next Header mező manipulálását bemutató kód képernyőkép a kihasználás érdekében

Míg a nulla méretű csomagot általában elvetik, a támadó manipulálhatja az eredeti IPv6-csomag Next Header mezőjét. Ez a manipuláció lehetővé teszi a támadók számára, hogy irányítást szerezzenek a csomag értelmezése felett a későbbi feldolgozási szakaszokban, elkerülve az azonnali elutasítást és lehetőséget teremtve a kihasználásra. 

Az IPv6 csomagfeldolgozás feletti támadói ellenőrzést ábrázoló ábra

Egész számok alulcsordulása töredékfeldolgozásban

A következő fejléc mező 44-re állításával, ami töredezett fejlécet jelez, a csomagot az IPv6 töredezettségi vagy újraszerelési rutinjai kezelik. Amikor a csomag eléri az Ipv6pReceiveFragment() töredékelemzőt, akkor azt adja meg, hogy: 

  • A csomag mérete nulla. 
  • A töredékfejléc jelzi, hogy további adatok feldolgozására van szükség. 

Az Ipv6pReceiveFragment() függvényben a fragment_size kiosztási mérete úgy kerül kiszámításra, hogy a 0x30 (a csomagfejléc hossza) levonásra kerül a csomag méretéből, mindenféle érvényesítés nélkül. Ha a csomag mérete nulla, akkor ez a kivonás alulcsúszik, ami egy nagy 16 bites értéket eredményez (körülbelül 0xFFD0 vagy 65488), ami azt eredményezi, hogy az elemző a csomag érvényes határain kívül túlzottan nagy memóriát dolgoz fel, ami memóriakárosodáshoz vezet. 

Az IPv6 töredékfeldolgozás során fellépő egész szám alulcsordulást mutató kód képernyőmentése
3. ábra Egész számok alulcsordulása a töredékfeldolgozásban

Az alulcsordulástól a túlcsordulásig és a kiosztási hibákig

Az Ipv6pReassemblyTimeout() függvény felelős a hiányos IPv6 fragmentumok eltakarításáért egy megadott idő után, 16 bites aritmetikát használva a puffer méretének és a másolási műveletek meghatározásához. Az előző lépésben bekövetkezett alulcsordulás miatt, amikor a packet_length vagy a fragment_size 0xFFD0 lesz, túlcsordulás következik be a kiosztás során.  

Az eredményül kapott számítás hatására a regiszter nullázódik, ami mindössze 48 bájt memória kiosztását eredményezi. Mivel azonban az átmásolt adatmennyiség (65 488 bájt a reassembly->payload-ból) nem felel meg a kiosztott memóriának, a kernel poolban szabályozható puffer túlcsordulás következik be. 

A kód képernyőkép, amely a memória kiosztásának eltérése miatti puffer túlcsordulást illusztrálja

Ez az eltérés lehetőséget ad a támadóknak arra, hogy rosszindulatú kódot hajtsanak végre egy speciálisan kialakított csomagon keresztül, amely kihasználja az IPv6-feldolgozás sebezhetőségét.

CVE-2024-38963 Proof of Concept 

A CVE-2024-38963 sebezhetőség reprodukálására tett kísérletük során munkatársaink egy sor rosszul formált csomagot állítottak össze a hiba kihasználására. Az általuk követett folyamat a következő volt:

1. Hibás IPv6 csomagok előállítása

Szúrjon be egy IPv6 Destination Options kiterjesztett fejlécet (60-as típus) az alap IPv6 fejléc után, majd ágyazzon be egy érvénytelen opciót (pl. 0x81 típusú opciót). 

Ez a manipuláció arra kényszeríti a Windows kernelt (tcpip.sys), hogy az always_send_icmp = true értéket állítsa be, ami az IppSendErrorList() rutin segítségével ICMPv6 hiba generálását váltja ki.

2. A hálózati pufferlista (NBL) feldolgozásának kikényszerítése

A célpontot elárasztva a rosszul formázott csomagok gyors sorozatával megnőtt az esélye annak, hogy a kernel több csomagot egyetlen Net-Buffer Listába (NBL) csoportosít. Amikor két vagy több csomagot csoportosítanak, a sebezhető IppSendErrorList() ciklus aktiválódik, és helytelenül visszaállítja a DataLength és Offset metaadatokat a következő fragmentumokban (a csomag mérete most nulla). 

3. Töredezett IPv6 csomagok bejuttatása

A hibásan formázott csomagok továbbítását követően töredezett IPv6-csomagok kerülnek elküldésre, amelyek töredezettségi kiterjesztés fejlécet tartalmaznak. Ezeket a töredékeket a már elrontott DataLength értékek felhasználásával dolgozzák fel. 

4. Az újraösszeszerelési időkorlát kihasználása

A kernel 60 másodpercig tartja vissza a töredékeket (az Ipv6pReassemblyTimeout által kezelt), hogy lehetővé tegye a csomagok újbóli összerakását. Ezen időkorlát alatt a sérült DataLength értékek egész számok alulcsordulását váltják ki az Ipv6pReceiveFragmentben, ami helytelenül kiszámított (túl nagy) fragmentumméretet eredményez.

5. A Heap-puffer túlcsordulás kiváltása

A kernel egy heap-puffert rendel ki az alulcsordult értékek alapján. Az újraszerkesztési folyamat során két különböző számítás történik: az egyik a memória kiosztásának méretét határozza meg (amely a 16 bites túlcsordulás miatt túl kicsi lesz), a másik pedig a másolás hosszát számítja ki a nagy, alulcsordult érték felhasználásával.

Ez az eltérés határok nélküli íráshoz vezet, ami egy halom alapú puffer túlcsordulást okoz, amely kihasználható a szolgáltatásmegtagadás (DoS) vagy távoli kódvégrehajtás kiváltására.

A CVE-2024-38063 koncepciót igazoló exploitot bemutató diagram

A CVE reprodukálásához használt forráskód egy Denial-of-Service támadáshoz:

Ha ezt a sebezhetőséget egy támadó kihasználja, az áldozat rendszere azonnal összeomolhat, ami a halál kék képernyőjét eredményezi: 

UI képernyőkép, amely a Windows kék halál képernyőjét mutatja a CVE-2024-38063 exploit után

Helyreállítás

Ha elmulasztja az operációs rendszer rendszeres frissítését, az eszköze ki van téve a biztonsági fenyegetéseknek, beleértve a CVE-khez (közös sebezhetőségek és veszélyforrások) kapcsolódó veszélyeket is. E kockázatok csökkentése érdekében a MetaDefender Endpoint™ megbízható védelmet nyújt az operációs rendszer verziójának észlelésével és a sebezhetőségek ellenőrzésével, beleértve az ismert CVE-ket, például a CVE-2024-38063-at. 

MetaDefender Endpoint a kritikus IT/OT hálózatokon belüli eszközök védelmére szolgál a perifériás és cserélhető adathordozók fenyegetéseitől. Biztosítja az operációs rendszer és a telepített alkalmazások naprakészségét, jelzi az elavult vagy sebezhető verziókat, és felsorolja az ismert sebezhetőségekkel és CVE-kkel rendelkező alkalmazásokat az ajánlott javításokkal együtt. Segít továbbá megvédeni az eszközöket a cserélhető adathordozókkal kapcsolatos kockázatoktól azáltal, hogy blokkolja az USB való hozzáférést mindaddig, amíg több rosszindulatú szoftverek elleni motorral nem vizsgálják meg és nem találják tisztának, miközben több mint 180 fájltípuson mély CDR™-t végez.  

Beszéljen még ma szakértőnkkel, hogy megtudja, hogyan alakíthatja át MetaDefender Endpoint az Ön biztonsági helyzetét az iparág vezető intelligenciájával. 

Maradjon naprakész az OPSWAT oldalon!

Iratkozzon fel még ma, hogy értesüljön a vállalat legfrissebb híreiről, történetekről, eseményinformációkról és sok másról.