See on väga spetsiifiline ärakasutamise tüüp, mis vaevab igasugust tarkvara.

UAF (Use-After-Free) on primitiivne mälukahjustuse haavatavus, mis kujutab jätkuvalt märkimisväärset ohtu igat tüüpi tarkvarale alates operatsioonisüsteemidest kuni rakendustarkvarani. See kriitiline turvaviga ilmneb siis, kui rakenduse komponent üritab juba vabastatud mäluaadressil olevatele andmetele juurde pääseda, sellest ka nimi – kasutus pärast vaba.

UAF-i haavatavused võivad põhjustada tarkvara potentsiaalset ärakasutamist või isegi süsteemi ohtu seada. Siit saate teada, mis on UAF-i haavatavus, miks see juhtub ja kuidas saate oma tarkvara UAF-i haavatavuse eest kaitsta.

Mis on pärast kasutamise vaba (UAF) haavatavus?

Enne kasutus-pärast-vaba haavatavust sukeldumist astume sammu tagasi ja mõistame mõningaid mäluhalduse põhitõdesid. Programmi käivitamisel laaditakse selle andmed ja kood mällu.

Mäluhaldus on protsess, mille käigus hallatakse, kuidas optimaalsel viisil mällu andmeid ja koodi salvestada (nimetatakse mälu eraldamiseks) ja eemaldada (nimetatakse mälu eraldamiseks). Kaks peamist mälusegmenti, kuhu programmiandmed salvestatakse, on

instagram viewer
virn ja hunnik.

Programmidele saab eraldada mäluruumi staatiliselt pinus ja dünaamiliselt hunnikus. Kasutamise pärast tasuta haavatavus ilmneb siis, kui programmeerijad ei halda oma programmides õigesti dünaamilist mälu eraldamist ja eraldamist. See tähendab, et UAF-i haavatavuste klass on teatud tüüpi hunniku ärakasutamine. Selle haavatavuse paremaks mõistmiseks aitab sellest hästi aru saada kuidas osutid programmeerimises töötavad.

UAF (Use-After-Free), nagu nimigi viitab, on primitiivse mälu riknemise haavatavus, mis ilmneb siis, kui objekt, mis on juba mälust eraldatud failile pääseb uuesti juurde, mis põhjustab krahhe või soovimatuid tagajärgi, nagu mälulekked, privileegide eskalatsioon (EOP) või suvaline kood hukkamine. Vaatame, kuidas see tingimus üldse ilmneb ja kuidas seda ära kasutatakse.

Kuidas kasutusjärgset vaba kasutust (UAF) kasutatakse?

UAF (Use-After-Free), nagu nimigi vihjab, on primitiivne mälukahjustuse haavatavus, mis ilmneb siis, kui programm jätkab juurdepääsu mälukohtadele, mille ta on vabastanud. Vaatame näidiskoodi:

#kaasa <stdio.h>
#kaasa <stdlib.h>

intpeamine(){
int *MUO = malloc (suurus(int));
*MUO = 69420;
printf("Väärtus: %d\n", *MUO);
tasuta (MUO);
printf("Väärtus?: %d\n", *MUO);
tagasi0;
}

Kas saaks haavatavust märgata? Nagu näete, on selles koodis MUO kursor eemaldatakse mälust, kasutades tasuta () funktsiooni, kuid seda kutsutakse uuesti järgmisel real, kasutades printf() funktsiooni. See toob kaasa ootamatu programmi käitumise ja olenevalt sellest, kus tarkvaras haavatavus asub, võidakse seda kasutada privileegide suurendamiseks ja mälulekkeks.

Kuidas leevendada kasutamist pärast tasuta?

UAF tekib rakenduse programmeerimisel tehtud vigade tõttu. Kasutage mõningaid ettevaatusabinõusid, et vältida oma tarkvara turvaauke pärast kasutust.

Siin on mõned parimad tavad, mida saate oma tarkvara mälukahjustuste haavatavuste minimeerimiseks kasutada.

  • Mäluohutute programmeerimiskeelte (nt Rust) kasutamine koos sisseehitatud mehhanismidega, et vältida primitiivseid mälukahjustusi, nagu UAF, puhvri ületäitumised jne. Kui kasutate programmeerimiskeeli, nagu C/C++, lisate tõenäolisemalt oma koodi mäluvigu. Samal põhjusel liiguvad isegi operatsioonisüsteemid nagu Windows ja Linux aeglaselt Rustile. Samuti peaksite kaaluma Rusti tundmaõppimine kui loote madala tasemega programme.
  • Lisaks mälusäästliku keele kasutamisele on soovitatav järgida häid tavasid, näiteks määrata kursori väärtusele NULL pärast selle vabastamist, et vältida kasutamise pärast vaba haavatavust.
  • Samuti saate rakendada selliseid tehnikaid nagu One Time Allocation (OTA), mis takistavad ründajatel juurdepääsu vabastatud mälule objektid ja range objekti elutsükli poliitika, mis aitab jälgida iga eraldatud mäluobjekti ja eraldatud. Pidage siiski meeles, et need rakendused võivad suurendada mälu ja jõudluse kulusid.

Reaalmaailma näited kasutamise pärast tasuta (UAF) haavatavusest

UAF-i (Use-After-Free) haavatavus on avastatud ja seda on kasutatud erinevates reaalsetes stsenaariumides alates veebibrauseritest ja lõpetades Androidi kerneliga ja lõpetades igapäevaste rakendustega. See näitab vajadust ennetavate turvameetmete järele. Mõned UAF-i reaalsed näited on järgmised:

  • Interneti-brauserid: UAF-i haavatavusi veebibrauserites on ära kasutatud suvalise koodi käivitamiseks, kasutajate privaatsuse ohustamiseks ja koodi kaugkäivitamise rünnakute sooritamiseks. Hiljutine näide on CVE-2021-38008, mis kasutas ära UAF-i haavatavust Google Chrome'is, võimaldades ohus osalejatel ohvri masinas kaugjuhtimisega suvalist koodi käivitada.
  • Operatsioonisüsteemid: Windowsi/Linuxi/Androidi tuumades leitud UAF-i haavatavused on võimaldanud ründajatel omandada kõrgendatud õigusi, turvamehhanismidest mööda minna ja püsivust saavutada. Operatsioonisüsteemi tuumades on leitud ja siiani leidub palju UAF-i haavatavusi. Selle kirjutamise ajal, CVE-2023-3269, avaldati avalikult veel üks UAF-i haavatavus Linuxi tuumas, mis viis privileegide eskalatsioonini. CVE-2022-23270 on näide UAF-i haavatavusest Windowsi tuumas.
  • Tarkvararakendused: UAF-i turvaauke tarkvararakendustes on programmiga manipuleerimiseks ära kasutatud käitumine, mis toob kaasa teabe avalikustamise, suvalise koodi täitmise, programmi krahhi ja halvimal juhul privileegi eskaleerumist. Mitmed tarkvararakendused on olnud ja on endiselt vastuvõtlikud UAF-i rünnakutele. Need tarkvarad on enamasti C/C++ programmid, mis on välja töötatud ebatõhusate ja ebaturvaliste mäluhaldusmeetoditega.

Kui soovite lisateavet reaalmaailma rakenduste kasutamise pärast tasuta haavatavuste kohta, vaadake ametlik MITRE CVE loendi lehele ja sorteerige märksõna Kasuta-pärast-vaba märksõna järgi.

Tõhus mälu eraldamine aitab muuta tarkvara turvaliseks

Optimaalne ja läbimõeldud mälujaotus aitab kaitsta teie rakendusi tavaliste primitiivsete mälukahjustuste haavatavuste ohvriks langemise eest.

UAF koos kasutusaja kontrollimise aja (TOCTOU), võistlustingimuste ja puhvri ülevooluga (BOF) on mõned kõige sagedamini kasutatavad mälunõrkused. Kõiki neid saab vältida, kui õppida, kuidas teie programmi mälu haldab platvorm, millel see töötab. See annab teile selguse, kuidas operatsioonisüsteem teie programmi mällu eraldab, ja varustab teid tööriistadega optimaalse jõudluse ja turvalisuse tagamiseks tarkvara kujundamiseks.

Kui te pole seda veel teinud, võite alustuseks mõista, kuidas mäluhaldus toimub Linuxis, mis on maailma enimkasutatud serverioperatsioonisüsteem.