Dette er en meget specifik type udnyttelse, der plager alle former for software.
Use-After-Free (UAF) er en primitiv hukommelseskorruptionssårbarhed, der fortsætter med at udgøre en betydelig trussel mod alle typer software fra operativsystemer til applikationssoftware. Denne kritiske sikkerhedsfejl opstår, når en applikationskomponent forsøger at få adgang til data i en hukommelsesadresse, der allerede er frigivet, deraf navnet — use-after-free.
UAF-sårbarheder kan føre til potentiel udnyttelse af software eller endda systemkompromis. Her er hvad UAF-sårbarheden er, hvorfor det sker, og hvordan du kan sikre din software mod en UAF-sårbarhed.
Hvad er Use-After-Free (UAF)-sårbarheden?
Inden vi dykker ned i Use-After-Free-sårbarheden, lad os tage et skridt tilbage og forstå nogle grundlæggende funktioner i hukommelseshåndtering. Når et program udføres, indlæses dets data og kode i hukommelsen.
Hukommelsesstyring er processen med at styre, hvordan man lagrer (kaldet hukommelsesallokering) og fjerner (kaldet hukommelsesdeallokering) data og kode i hukommelsen på en optimal måde. De to primære hukommelsessegmenter, hvor programdata er lagret, er
stakken og bunken.Programmer kan tildeles hukommelsesplads statisk på stakken og dynamisk på heapen. En use-efter-free-sårbarhed opstår, når programmører ikke administrerer dynamisk hukommelsesallokering og -deallokering korrekt i deres programmer. Dette betyder, at UAF-klassen af sårbarheder er en form for heap-udnyttelse. For at forstå denne sårbarhed bedre, hjælper det at have en stærk forståelse af hvordan pointere fungerer i programmering.
Use-After-Free (UAF), som navnet antyder, er en type primitiv hukommelseskorruptionssårbarhed, der opstår, når et objekt, der allerede er blevet deallokeret fra hukommelsen tilgås igen, hvilket fører til nedbrud eller utilsigtede konsekvenser såsom hukommelseslækager, Escalation of Privilege (EOP) eller vilkårlig kode udførelse. Lad os lære, hvordan denne tilstand opstår i første omgang, og hvordan den udnyttes.
Hvordan udnyttes Use-After-Free (UAF)?
Use-After-Free (UAF), som navnet antyder, er en primitiv hukommelseskorruptionssårbarhed, der opstår, når et program fortsætter med at få adgang til hukommelsesplaceringer, som det har frigivet. Lad os tage et kig på en eksempelkode:
#omfatte <stdio.h>
#omfatte <stdlib.h>
intvigtigste(){
int *MUO = malloc (størrelse på(int));
*MUO = 69420;
printf("Værdi: %d\n", *MUO);
fri (MUO);
printf("Værdi?: %d\n", *MUO);
Vend tilbage0;
}
Kunne spotte sårbarheden? Som du kan se, er det i denne kode MUO markøren deallokeres fra hukommelsen ved hjælp af gratis() funktion, men den kaldes igen i næste linje ved hjælp af printf() fungere. Dette resulterer i uventet programadfærd, og afhængigt af hvor sårbarheden er til stede i softwaren, kan den blive udnyttet til at opnå privilegieeskalering og hukommelseslækager.
Hvordan mindskes brug-efter-fri?
UAF opstår på grund af fejl i programmeringen af en applikation. Der er et par forholdsregler, du kan tage for at undgå Use-After-Free-sårbarheder i din software.
Her er et par bedste fremgangsmåder, som du kan anvende for at minimere hukommelseskorruption i din software:
- Brug af hukommelsessikre programmeringssprog som Rust med indbyggede mekanismer for at forhindre primitive hukommelseskorruptionssårbarheder som UAF, Buffer Overflows osv. Hvis du bruger programmeringssprog som C/C++, er der større sandsynlighed for, at du introducerer hukommelsesfejl i din kode. Af samme grund migrerer selv operativsystemer som Windows og Linux langsomt til Rust. Du bør også overveje lære om Rust hvis du laver programmer på lavt niveau.
- Udover at bruge et hukommelsessikkert sprog, anbefales det, at du følger bedste praksis som at indstille en markør til NULL-værdi, efter at den er frigivet, for at undgå enhver introduktion af Use-After-Free-sårbarhed.
- Du kan også implementere teknikker som One Time Allocation (OTA), der forhindrer angribere i at få adgang til frigjort hukommelse objekter og en streng objektlivscykluspolitik, der hjælper med at holde styr på hvert hukommelsesobjekt, der er allokeret og deallokeret. Husk dog, at disse implementeringer kan øge hukommelsen og ydeevnen.
Eksempler i den virkelige verden på UAF-sårbarhed (Under-After-Free).
Sårbarheden Use-After-Free (UAF) er blevet opdaget og udnyttet i forskellige scenarier i den virkelige verden fra webbrowsere til Android-kerne til hverdagsapplikationer. Dette viser behovet for proaktive sikkerhedsforanstaltninger. Nogle eksempler fra den virkelige verden på UAF inkluderer:
- Internetbrowsere: UAF-sårbarheder i webbrowsere er blevet udnyttet til at udføre vilkårlig kode, kompromittere brugernes privatliv og udføre fjernudførelse af kodeangreb. Et nyligt eksempel ville være CVE-2021-38008, som udnyttede en UAF-sårbarhed i Google Chrome, hvilket tillod trusselsaktører at udføre vilkårlig kode eksternt på offermaskinen.
- Operativsystemer: UAF-sårbarheder fundet i Windows/Linux/Android-kerner har gjort det muligt for angribere at opnå forhøjede privilegier, omgå sikkerhedsmekanismer og opnå vedholdenhed. Der er et væld af UAF-sårbarheder, der er blevet fundet og stadig findes i operativsystemkerner til denne dato. På tidspunktet for skrivningen, CVE-2023-3269, blev endnu en UAF-sårbarhed i Linux-kernen, der førte til privilegieeskalering, frigivet offentligt. CVE-2022-23270 er et eksempel på en UAF-sårbarhed i Windows-kernen.
- Softwareapplikationer: UAF-sårbarheder i softwareapplikationer er blevet udnyttet til at manipulere programmer adfærd, der fører til videregivelse af information, vilkårlig kodekørsel, programnedbrud og i værste fald privilegium eskalering. Flere softwareapplikationer har været og er stadig modtagelige for UAF-angreb. Disse software er for det meste C/C++-programmer, der er udviklet med ineffektive og usikre hukommelseshåndteringstilgange.
For at lære mere om Use-After-Free-sårbarheder i applikationer fra den virkelige verden kan du tjekke officielle MITRE CVE listeside og sorter efter Use-After-Free søgeord.
Effektiv hukommelsesallokering hjælper med at gøre software sikker
Optimal og gennemtænkt hukommelsesallokering går langt for at beskytte dine applikationer fra at blive offer for almindelige primitive hukommelseskorruptionssårbarheder.
UAF sammen med Time Of Check Time of Use (TOCTOU), løbsforhold og Buffer Overflows (BOF) er nogle af de mest almindeligt udnyttede hukommelsessårbarheder. Alle disse kan undgås ved at lære, hvordan dit programs hukommelse administreres af den platform, det kører på. Dette giver dig klarhed over, hvordan operativsystemet allokerer dit program i hukommelsen og udstyrer dig med værktøjerne til at designe software til optimal ydeevne og sikkerhed.
Hvis du ikke allerede har gjort det, kan du starte med at forstå, hvordan hukommelseshåndtering foregår på Linux, verdens mest brugte serveroperativsystem.