Ez egy nagyon specifikus típusú kihasználás, amely mindenféle szoftvert sújt.
Az UAF (Use-After-Free) egy primitív memóriasérülési rés, amely továbbra is jelentős fenyegetést jelent minden típusú szoftverre, az operációs rendszertől az alkalmazásszoftverig. Ez a kritikus biztonsági hiba akkor fordul elő, amikor egy alkalmazásösszetevő megpróbál hozzáférni egy már felszabadított memóriacímen lévő adatokhoz, innen ered a használat utáni szabad elnevezés.
Az UAF sebezhetőségei a szoftverek potenciális kihasználásához vagy akár a rendszer kompromittálásához vezethetnek. Íme, mi az UAF sebezhetősége, miért történik, és hogyan védheti meg szoftverét az UAF sebezhetőségétől.
Mi az UAF-használat (Ufter-Free) sebezhetősége?
Mielőtt belemerülnénk a Use-After-Free sebezhetőségébe, tegyünk egy lépést hátra, és ismerjük meg a memóriakezelés néhány alapját. A program végrehajtása során annak adatai és kódja betöltődik a memóriába.
A memóriakezelés az adatok és kódok optimális tárolásának (memóriafoglalásnak) és eltávolításának (memóriafelszabadításnak) kezelésének folyamata. A két elsődleges memóriaszegmens, ahol a programadatokat tárolják
a verem és a kupac.A programok memóriaterületet statikusan a veremben és dinamikusan a kupacban foglalhatnak le. Utánhasználat nélküli biztonsági rés akkor fordul elő, ha a programozók nem kezelik megfelelően a dinamikus memóriafoglalást és -felszabadítást a programjaikban. Ez azt jelenti, hogy az UAF sebezhetőségi osztálya a halom kihasználásának egy fajtája. Ahhoz, hogy jobban megértsük ezt a sebezhetőséget, segít alaposan megérteni hogyan működnek a mutatók a programozásban.
A Use-After-Free (UAF), ahogy a neve is sugallja, a primitív memóriasérülés egy fajtája, amely akkor fordul elő, ha egy objektum már a memóriából felszabadított állományok újra elérhetõk, ami összeomláshoz vagy nem kívánt következményekhez, például memóriaszivárgáshoz, EOP vagy tetszõleges kódhoz vezet. végrehajtás. Tanuljuk meg, hogyan fordul elő ez az állapot először, és hogyan használják ki.
Hogyan lehet kihasználni az UAF-használatot?
A Use-After-Free (UAF), ahogy a neve is sugallja, egy primitív memóriasérülést okozó biztonsági rés, amely akkor fordul elő, amikor egy program továbbra is hozzáfér az általa felszabadított memóriahelyekhez. Nézzünk egy példakódot:
#beleértve <stdio.h>
#beleértve <stdlib.h>
intfő-(){
int *MUO = malloc (sizeof(int));
*MUO = 69420;
printf("Érték: %d\n", *MUO);
ingyenes (MUO);
printf("Érték?: %d\n", *MUO);
Visszatérés0;
}
Észrevehető a sebezhetőség? Mint látható, ebben a kódban a MUO A mutató a memóriából a ingyenes() függvényt, mégis újra meghívásra kerül a következő sorban a printf() funkció. Ez a program váratlan viselkedését eredményezi, és attól függően, hogy a biztonsági rés hol található a szoftverben, kihasználható a jogosultságok kiterjesztésére és memóriaszivárgásra.
Hogyan csökkenthető a használat utáni ingyenesség?
Az UAF egy alkalmazás programozási hibái miatt fordul elő. Van néhány óvintézkedés, amelyet megtehet, hogy elkerülje a szoftvere utáni használat utáni sebezhetőséget.
Íme néhány bevált gyakorlat, amelyeket bevethet a szoftverben előforduló memóriasérülések minimalizálása érdekében:
- Memóriabiztos programozási nyelvek, például a Rust használata beépített mechanizmusokkal az olyan primitív memóriasérülések megelőzésére, mint az UAF, a puffertúlcsordulás stb. Ha olyan programozási nyelveket használ, mint a C/C++, nagyobb a valószínűsége, hogy memóriahibákat vezet be a kódjába. Ugyanezen okból még az olyan operációs rendszerek is, mint a Windows és a Linux lassan áttérnek a Rust-ra. Azt is mérlegelnie kell megismerni Rustot ha alacsony szintű programokat hoz létre.
- A memóriabiztos nyelv használata mellett ajánlott a bevált gyakorlatok követése, például a mutató NULL értékre állítása a felszabadítás után, hogy elkerülje a Use-After-Free sebezhetőség bevezetését.
- Olyan technikákat is bevezethet, mint az egyszeri kiosztás (OTA), amelyek megakadályozzák, hogy a támadók hozzáférjenek a felszabaduló memóriához objektumok és a Strict Object Lifecycle Policy, amely segít nyomon követni minden egyes lefoglalt memóriaobjektumot és felszabadított. Ne feledje azonban, hogy ezek a megvalósítások növelhetik a memóriát és a teljesítményt.
Valós példák a használat utáni ingyenes (UAF) sebezhetőségére
A Use-After-Free (UAF) sebezhetőséget számos valós forgatókönyvben fedezték fel és használták ki, a webböngészőktől az Android kernelen át a mindennapi alkalmazásokig. Ez azt mutatja, hogy szükség van proaktív biztonsági intézkedésekre. Néhány valós példa az UAF-ra:
- Internetböngészők: A webböngészők UAF-sebezhetőségeit kihasználva tetszőleges kódot hajtottak végre, veszélyeztették a felhasználók adatait, és távoli kódvégrehajtási támadásokat hajtottak végre. Egy újabb példa erre a CVE-2021-38008, amely kihasználta a Google Chrome UAF-sebezhetőségét, lehetővé téve a fenyegetés szereplői számára, hogy tetszőleges kódot hajtsanak végre távolról az áldozat gépén.
- Operációs rendszerek: A Windows/Linux/Android kernelekben talált UAF sebezhetőségek lehetővé tették a támadók számára, hogy magasabb szintű jogosultságokat szerezzenek, megkerüljék a biztonsági mechanizmusokat, és kitartást szerezzenek. Rengeteg UAF sebezhetőséget találtak és a mai napig megtalálhatók az operációs rendszer kerneleiben. Az írás idején a CVE-2023-3269 egy újabb UAF-sebezhetőség a Linux rendszermagban, amely a jogosultságok kiszélesítéséhez vezetett. A CVE-2022-23270 egy példa a Windows kernel UAF-sebezhetőségére.
- Szoftveralkalmazások: A szoftveralkalmazások UAF-sebezhetőségeit kihasználták a programok manipulálására viselkedés, amely információ nyilvánosságra hozatalához, tetszőleges kódvégrehajtáshoz, program összeomláshoz és a legrosszabb esetben kiváltságokhoz vezet eszkaláció. Számos szoftveralkalmazás volt és még mindig érzékeny az UAF támadásokra. Ezek a szoftverek többnyire C/C++ programok, amelyeket nem hatékony és nem biztonságos memóriakezelési megközelítésekkel fejlesztettek ki.
Ha többet szeretne megtudni a valós alkalmazásokban található Use-After-Free sebezhetőségeiről, tekintse meg a hivatalos MITER CVE listaoldalt, és rendezze a Használat utáni szabad kulcsszó szerint.
A hatékony memóriakiosztás segíti a szoftverek biztonságát
Az optimális és jól átgondolt memóriakiosztás nagymértékben megvédi alkalmazásait attól, hogy a gyakori primitív memóriasérülések áldozatává váljanak.
Az UAF, a használat időellenőrzési ideje (TOCTOU), a versenyfeltételek és a puffertúlcsordulás (BOF) a leggyakrabban kihasznált memóriasérülékenységek közé tartozik. Mindezek elkerülhetők, ha megtanulják, hogyan kezeli a program memóriáját az a platform, amelyen fut. Ez egyértelművé teszi, hogy az operációs rendszer hogyan foglalja le a programot a memóriában, és felvértezi Önt azokkal az eszközökkel, amelyekkel szoftvert tervezhet az optimális teljesítmény és biztonság érdekében.
Ha még nem tette meg, kezdje azzal, hogy megértse, hogyan történik a memóriakezelés Linuxon, a világ leggyakrabban használt szerver operációs rendszerén.