Šis ir ļoti specifisks izmantošanas veids, kas nomoka visa veida programmatūru.
Use-After-Free (UAF) ir primitīva atmiņas bojājuma ievainojamība, kas joprojām rada ievērojamus draudus visa veida programmatūrai, sākot no operētājsistēmām līdz lietojumprogrammatūrai. Šī kritiskā drošības kļūda rodas, kad lietojumprogrammas komponents mēģina piekļūt datiem atmiņas adresē, kas jau ir atbrīvota, līdz ar to nosaukums “izmantot pēc brīvas”.
UAF ievainojamības var izraisīt iespējamu programmatūras izmantošanu vai pat sistēmas kompromitēšanu. Lūk, kas ir UAF ievainojamība, kāpēc tā notiek un kā jūs varat aizsargāt savu programmatūru no UAF ievainojamības.
Kas ir bezlietošanas (UAF) ievainojamība?
Pirms niršanas ievainojamībā Use-After-Free, spersim soli atpakaļ un sapratīsim dažus atmiņas pārvaldības pamatus. Kad programma tiek izpildīta, tās dati un kods tiek ielādēti atmiņā.
Atmiņas pārvaldība ir process, kurā tiek pārvaldīts, kā optimālā veidā saglabāt (saukts par atmiņas piešķiršanu) un noņemt (saukts par atmiņas atdalīšanu) datus un kodu. Ir divi primārie atmiņas segmenti, kuros tiek glabāti programmas dati
kaudze un kaudze.Programmām var piešķirt atmiņas vietu statiski stekā un dinamiski kaudzītē. Ja programmētāji savās programmās nepareizi pārvalda dinamisko atmiņas piešķiršanu un atdalīšanu, rodas ievainojamība, kuru var izmantot bez lietošanas. Tas nozīmē, ka UAF ievainojamību klase ir kaudzes izmantošanas veids. Lai labāk izprastu šo ievainojamību, tas palīdz labi izprast kā norādes darbojas programmēšanā.
Izmantot pēc bez maksas (UAF), kā norāda nosaukums, ir primitīvas atmiņas bojājuma ievainojamības veids, kas rodas, ja objekts, kas jau ir bijis Atdalītajam no atmiņas tiek atkal piekļūts, izraisot avārijas vai neparedzētas sekas, piemēram, atmiņas noplūdes, privilēģiju eskalāciju (EOP) vai patvaļīgu kodu. izpildi. Uzzināsim, kā šis nosacījums rodas un kā tas tiek izmantots.
Kā tiek izmantota izmantošana bez maksas (UAF)?
Kā norāda nosaukums, Use-After-Free (UAF) ir primitīva atmiņas bojājuma ievainojamība, kas rodas, ja programma turpina piekļūt atmiņas vietām, kuras tā ir atbrīvojusi. Apskatīsim koda piemēru:
#iekļauts <stdio.h>
#iekļauts <stdlib.h>
starptgalvenais(){
starpt *MUO = malloc (sizeof(starpt));
*MUO = 69420;
printf("Vērtība: %d\n", *MUO);
bezmaksas (MUO);
printf("Vērtība?: %d\n", *MUO);
atgriezties0;
}
Vai varētu pamanīt ievainojamību? Kā redzat, šajā kodā MUO rādītājs tiek noņemts no atmiņas, izmantojot bezmaksas () funkciju, tomēr nākamajā rindā tā tiek izsaukta vēlreiz, izmantojot printf() funkciju. Tas izraisa neparedzētu programmas darbību, un atkarībā no tā, kur programmatūrā atrodas ievainojamība, to var izmantot, lai iegūtu privilēģiju eskalāciju un atmiņas noplūdes.
Kā samazināt lietošanu bez maksas?
UAF rodas lietojumprogrammas programmēšanas kļūdu dēļ. Ir daži piesardzības pasākumi, ko varat veikt, lai izvairītos no programmatūras ievainojamības, ko varat izmantot pēc lietošanas.
Šeit ir daži paraugprakses piemēri, ko varat izmantot, lai samazinātu programmatūras atmiņas bojājumu ievainojamības.
- Atmiņai drošas programmēšanas valodu, piemēram, Rust, izmantošana ar iebūvētiem mehānismiem, lai novērstu primitīvas atmiņas bojājumu ievainojamības, piemēram, UAF, bufera pārpildes utt. Ja izmantojat programmēšanas valodas, piemēram, C/C++, visticamāk, savā kodā ieviesīsiet atmiņas kļūdas. Tā paša iemesla dēļ pat tādas operētājsistēmas kā Windows un Linux lēnām migrē uz Rust. Jums vajadzētu arī apsvērt mācoties par Rustu ja veidojat zema līmeņa programmas.
- Papildus atmiņai drošas valodas izmantošanai ir ieteicams ievērot paraugpraksi, piemēram, iestatīt rādītāju uz NULL vērtību pēc tās atbrīvošanas, lai izvairītos no ievainojamības "Izmantošana pēc brīva" ieviešanas.
- Varat arī ieviest tādas metodes kā vienreizēja piešķiršana (OTA), kas neļauj uzbrucējiem piekļūt atbrīvotajai atmiņai objektus un stingru objektu dzīves cikla politiku, kas palīdz sekot līdzi katram piešķirtajam atmiņas objektam un sadalīts. Tomēr paturiet prātā, ka šīs ieviešanas var palielināt atmiņas un veiktspējas izmaksas.
Reāli lietošanas piemēri bez maksas (UAF) ievainojamības
UAF (Use-After-Free) ievainojamība ir atklāta un izmantota dažādos reālās pasaules scenārijos, sākot no tīmekļa pārlūkprogrammām līdz Android kodolam un beidzot ar ikdienas lietojumprogrammām. Tas liecina par proaktīvu drošības pasākumu nepieciešamību. Daži reāli UAF piemēri:
- Interneta pārlūkprogrammas: UAF ievainojamības tīmekļa pārlūkprogrammās ir izmantotas, lai izpildītu patvaļīgu kodu, apdraudētu lietotāju privātumu un veiktu attālinātas koda izpildes uzbrukumus. Nesens piemērs varētu būt CVE-2021-38008, kas izmantoja UAF ievainojamību pārlūkprogrammā Google Chrome, ļaujot apdraudējuma dalībniekiem attālināti izpildīt patvaļīgu kodu upura datorā.
- Operētājsistēmas: Windows/Linux/Android kodolos atrastās UAF ievainojamības ir ļāvušas uzbrucējiem iegūt paaugstinātas privilēģijas, apiet drošības mehānismus un iegūt noturību. Ir daudz UAF ievainojamību, kas ir atrastas un joprojām ir atrodamas operētājsistēmu kodolos. Šīs rakstīšanas laikā CVE-2023-3269 tika publiski izlaista vēl viena UAF ievainojamība Linux kodolā, kas izraisīja privilēģiju eskalāciju. CVE-2022-23270 ir Windows kodola UAF ievainojamības piemērs.
- Programmatūras lietojumprogrammas: UAF ievainojamības lietojumprogrammās ir izmantotas, lai manipulētu ar programmu uzvedība, kas izraisa informācijas izpaušanu, patvaļīgu koda izpildi, programmas avāriju un sliktākajā gadījumā privilēģijas eskalācija. Vairākas programmatūras lietojumprogrammas ir bijušas un joprojām ir pakļautas UAF uzbrukumiem. Šīs programmatūras galvenokārt ir C/C++ programmas, kas izstrādātas, izmantojot neefektīvas un nedrošas atmiņas pārvaldības metodes.
Lai uzzinātu vairāk par Use-After-Free ievainojamībām reālās pasaules lietojumprogrammās, varat pārbaudīt oficiālais MITER CVE saraksta lapu un kārtojiet pēc atslēgvārda Izmantot pēc brīva.
Efektīva atmiņas piešķiršana palīdz nodrošināt programmatūras drošību
Optimāla un pārdomāta atmiņas piešķiršana ir liela nozīme, lai aizsargātu jūsu lietojumprogrammas no parastu primitīvu atmiņas bojājuma ievainojamību upuriem.
UAF, lietošanas laika pārbaudes laiks (TOCTOU), sacensību apstākļi un bufera pārpildes (BOF) ir dažas no visbiežāk izmantotajām atmiņas ievainojamībām. No tiem visiem var izvairīties, uzzinot, kā jūsu programmas atmiņu pārvalda platforma, kurā tā darbojas. Tas sniedz jums skaidrību par to, kā operētājsistēma piešķir jūsu programmu atmiņā, un nodrošina jūs ar rīkiem, lai izstrādātu programmatūru optimālai veiktspējai un drošībai.
Ja vēl neesat to izdarījis, varat sākt, izprotot, kā atmiņas pārvaldība tiek veikta operētājsistēmā Linux, pasaulē visvairāk izmantotajā serveru operētājsistēmā.