Acesta este un tip foarte specific de exploatare care afectează toate tipurile de software.

Use-After-Free (UAF) este o vulnerabilitate primitivă de corupție a memoriei care continuă să reprezinte o amenințare semnificativă pentru toate tipurile de software, de la sistemele de operare la aplicațiile software. Această defecțiune critică de securitate apare atunci când o componentă a aplicației încearcă să acceseze date dintr-o adresă de memorie care a fost deja eliberată, de unde și numele — use-after-free.

Vulnerabilitățile UAF pot duce la potențiala exploatare a software-ului sau chiar la compromiterea sistemului. Iată care este vulnerabilitatea UAF, de ce se întâmplă și cum vă puteți asigura software-ul de o vulnerabilitate UAF.

Ce este vulnerabilitatea UAF (Use-After-Free)?

Înainte de a aborda vulnerabilitatea Use-After-Free, să facem un pas înapoi și să înțelegem câteva elemente de bază ale gestionării memoriei. Când un program este executat, datele și codul acestuia sunt încărcate în memorie.

instagram viewer

Managementul memoriei este procesul de gestionare a modului în care se stochează (numit alocare de memorie) și se elimină (numită dealocare memorie) datele și codul în memorie într-un mod optim. Cele două segmente de memorie primară în care sunt stocate datele programului sunt teancul și grămada.

Programelor li se poate aloca spațiu de memorie static pe stivă și dinamic pe heap. O vulnerabilitate de utilizare după eliberare apare atunci când programatorii nu gestionează corect alocarea și dealocarea memoriei dinamice în programele lor. Aceasta înseamnă că clasa de vulnerabilități UAF este un tip de exploatare heap. Pentru a înțelege mai bine această vulnerabilitate, vă ajută să aveți o înțelegere puternică a cum funcționează pointerii în programare.

Use-After-Free (UAF), după cum sugerează și numele, este un tip de vulnerabilitate primitivă de corupție a memoriei care apare atunci când un obiect care a fost deja dealocate din memorie este accesată din nou, ceea ce duce la blocări sau consecințe nedorite, cum ar fi scurgeri de memorie, escaladare a privilegiilor (EOP) sau cod arbitrar execuţie. Să învățăm cum apare această afecțiune în primul rând și cum este exploatată.

Cum este exploatat Use-After-Free (UAF)?

Use-After-Free (UAF), după cum sugerează și numele, este o vulnerabilitate primitivă de corupție a memoriei care apare atunci când un program continuă să acceseze locațiile de memorie pe care le-a eliberat. Să aruncăm o privire la un exemplu de cod:

#include <stdio.h>
#include <stdlib.h>

intprincipal(){
int *MUO = malloc (dimensiunea(int));
*MUO = 69420;
printf(„Valoare: %d\n”, *MUO);
gratuit (MUO);
printf(„Valoare?: %d\n”, *MUO);
întoarcere0;
}

Ar putea identifica vulnerabilitatea? După cum puteți vedea, în acest cod, MUO pointerul este dealocat din memorie folosind gratuit() funcția, dar este apelată din nou în linia următoare folosind printf() funcţie. Acest lucru are ca rezultat un comportament neașteptat al programului și, în funcție de locul în care este prezentă vulnerabilitatea în software, aceasta poate fi folosită pentru a obține o escaladare a privilegiilor și scurgeri de memorie.

Cum să atenuezi utilizarea după gratuită?

UAF apare din cauza greșelilor de programare a unei aplicații. Există câteva măsuri de precauție pe care le puteți lua pentru a evita vulnerabilitățile Use-After-Free din software-ul dvs.

Iată câteva dintre cele mai bune practici pe care le puteți adopta pentru a minimiza vulnerabilitățile de corupție a memoriei din software-ul dvs.:

  • Folosind limbaje de programare sigure pentru memorie, cum ar fi Rust, cu mecanisme încorporate pentru a preveni vulnerabilitățile primitive de corupție a memoriei, cum ar fi UAF, Buffer Overflows etc. Dacă utilizați limbaje de programare precum C/C++, este mai probabil să introduceți erori de memorie în codul dvs. Din același motiv, chiar și sistemele de operare precum Windows și Linux migrează încet la Rust. De asemenea, ar trebui să luați în considerare învăţând despre Rust dacă creați programe de nivel scăzut.
  • Pe lângă utilizarea unui limbaj sigur pentru memorie, se recomandă să urmați cele mai bune practici, cum ar fi setarea unui pointer la valoarea NULL după ce acesta este eliberat, pentru a evita orice introducere a vulnerabilității Use-After-Free.
  • De asemenea, puteți implementa tehnici precum One Time Allocation (OTA) care împiedică atacatorii să acceseze memoria eliberată obiecte și o politică strictă a ciclului de viață a obiectelor, care ajută la ținerea evidenței fiecărui obiect de memorie care este alocat și dealocate. Rețineți totuși că aceste implementări pot crește suprasolicitarea memoriei și a performanței.

Exemple din lumea reală de vulnerabilitate de utilizare după liberă (UAF).

Vulnerabilitatea Use-After-Free (UAF) a fost descoperită și exploatată în diferite scenarii din lumea reală, de la browsere web la nucleul Android și la aplicații de zi cu zi. Acest lucru arată necesitatea măsurilor de securitate proactive. Câteva exemple din lumea reală de UAF includ:

  • Browsere de internet: vulnerabilitățile UAF din browserele web au fost exploatate pentru a executa cod arbitrar, pentru a compromite confidențialitatea utilizatorului și pentru a executa atacuri de execuție a codului de la distanță. Un exemplu recent ar fi CVE-2021-38008, care a exploatat o vulnerabilitate UAF în Google Chrome, permițând actorilor de amenințări să execute cod arbitrar de la distanță pe computerul victimei.
  • Sisteme de operare: vulnerabilitățile UAF găsite în nucleele Windows/Linux/Android au permis atacatorilor să obțină privilegii ridicate, să ocolească mecanismele de securitate și să câștige persistență. Există o multitudine de vulnerabilități UAF care au fost găsite și încă se găsesc în nucleele sistemului de operare până în prezent. La momentul scrierii acestui articol, CVE-2023-3269, a fost lansată public o altă vulnerabilitate UAF în nucleul Linux care duce la escaladarea privilegiilor. CVE-2022-23270 este un exemplu de vulnerabilitate UAF în nucleul Windows.
  • Aplicații software: vulnerabilitățile UAF din aplicațiile software au fost exploatate pentru a manipula programul comportament, care duce la dezvăluirea de informații, execuția de cod arbitrară, blocarea programului și, în cel mai rău caz, privilegii escaladare. Mai multe aplicații software au fost și sunt încă susceptibile la atacurile UAF. Aceste software sunt în mare parte programe C/C++ care au fost dezvoltate cu abordări ineficiente și nesigure de gestionare a memoriei.

Pentru a afla mai multe despre vulnerabilitățile Use-After-Free din aplicațiile din lumea reală, puteți verifica MITRE oficial CVE listați pagina și sortați după cuvântul cheie Utilizare-după-gratuit.

Alocarea eficientă a memoriei ajută la securitatea software-ului

Alocarea optimă și bine gândită a memoriei reprezintă un drum lung pentru a vă proteja aplicațiile de a cădea pradă vulnerabilităților comune de corupție a memoriei primitive.

UAF împreună cu Time Of Check Time of Use (TOCTOU), condițiile de cursă și Buffer Overflows (BOF) sunt unele dintre vulnerabilitățile de memorie cel mai frecvent exploatate. Toate acestea pot fi evitate prin învățarea modului în care memoria programului dvs. este gestionată de platforma pe care rulează. Acest lucru vă oferă claritate asupra modului în care sistemul de operare vă alocă programul în memorie și vă echipează cu instrumente pentru a proiecta software pentru performanță și securitate optime.

Dacă nu ați făcut-o deja, puteți începe prin a înțelege cum se face gestionarea memoriei pe Linux, cel mai folosit sistem de operare pentru server din lume.