Tämä on hyvin erityinen hyväksikäyttö, joka vaivaa kaikenlaisia ​​ohjelmistoja.

Use-After-Free (UAF) on primitiivinen muistin vioittumishaavoittuvuus, joka muodostaa edelleen merkittävän uhan kaikentyyppisille ohjelmistoille käyttöjärjestelmistä sovellusohjelmistoihin. Tämä kriittinen tietoturvavirhe ilmenee, kun sovelluskomponentti yrittää käyttää tietoja muistiosoitteessa, joka on jo vapautettu, mistä johtuu nimi – use-after-free.

UAF: n haavoittuvuudet voivat johtaa ohjelmiston mahdolliseen hyödyntämiseen tai jopa järjestelmän vaarantumiseen. Tässä on mitä UAF-haavoittuvuus on, miksi se tapahtuu ja kuinka voit suojata ohjelmistosi UAF-haavoittuvuudelta.

Mikä on UAF-haavoittuvuus?

Ennen kuin sukeltaa Use-After-Free-haavoittuvuuteen, otetaan askel taaksepäin ja ymmärrämme joitakin muistinhallinnan perusteita. Kun ohjelma suoritetaan, sen tiedot ja koodi ladataan muistiin.

Muistinhallinta on prosessi, jolla hallitaan kuinka tallentaa (kutsutaan muistin varaukseksi) ja poistaa (kutsutaan muistin purkamiseksi) dataa ja koodia muistiin optimaalisella tavalla. Kaksi ensisijaista muistisegmenttiä, joihin ohjelmatiedot tallennetaan, ovat

instagram viewer
pino ja kasa.

Ohjelmat voidaan varata muistitilaa staattisesti pinossa ja dynaamisesti pinossa. Use-after-free-haavoittuvuus syntyy, kun ohjelmoijat eivät hallitse ohjelmiensa dynaamista muistin varausta ja purkamista oikein. Tämä tarkoittaa, että UAF-luokan haavoittuvuudet ovat eräänlainen kasan hyväksikäyttö. Tämän haavoittuvuuden ymmärtäminen paremmin auttaa ymmärtämään sen miten osoittimet toimivat ohjelmoinnissa.

Use-After-Free (UAF), kuten nimestä voi päätellä, on eräänlainen primitiivisen muistin vioittumishaavoittuvuus, joka ilmenee, kun objekti, joka on jo Muistista irrotettua kohdetta käytetään uudelleen, mikä johtaa kaatumisiin tai tahattomiin seurauksiin, kuten muistivuotojin, EOP-oikeuksien eskalaatioon tai mielivaltaiseen koodiin teloitus. Opitaan kuinka tämä tila ylipäätään esiintyy ja miten sitä hyödynnetään.

Kuinka UAF: a (Use-After-Free) hyödynnetään?

Use-After-Free (UAF), kuten nimi vihjaa, on primitiivinen muistin vioittumishaavoittuvuus, joka ilmenee, kun ohjelma jatkaa vapauttamiensa muistipaikkojen käyttöä. Katsotaanpa esimerkkikoodia:

#sisältää <stdio.h>
#sisältää <stdlib.h>

intpää(){
int *MUO = malloc (koko(int));
*MUO = 69420;
printf("Arvo: %d\n", *MUO);
ilmainen (MUO);
printf("Arvo?: %d\n", *MUO);
palata0;
}

Voisitko havaita haavoittuvuuden? Kuten näette, tässä koodissa MUO osoitin irrotetaan muistista käyttämällä vapaa() funktio, mutta sitä kutsutaan uudelleen seuraavalla rivillä käyttämällä printf() toiminto. Tämä johtaa odottamattomaan ohjelman toimintaan, ja riippuen siitä, missä ohjelmistossa haavoittuvuus on, sitä voidaan hyödyntää oikeuksien laajentamiseksi ja muistivuotojen saamiseksi.

Kuinka vähentää käytön jälkeistä käyttöä?

UAF johtuu sovelluksen ohjelmointivirheistä. Voit välttää use-after-Free-haavoittuvuuksia ohjelmistossasi noudattamalla muutamia varotoimia.

Tässä on muutamia parhaita käytäntöjä, joita voit noudattaa minimoidaksesi ohjelmistosi muistin vioittumishaavoittuvuudet:

  • Muistia säästävien ohjelmointikielien, kuten Rustin, käyttö sisäänrakennetuilla mekanismilla estämään primitiiviset muistin korruptiohaavoittuvuudet, kuten UAF, puskurin ylivuoto jne. Jos käytät ohjelmointikieliä, kuten C/C++, lisäät todennäköisemmin muistivirheitä koodiisi. Samasta syystä jopa käyttöjärjestelmät, kuten Windows ja Linux, siirtyvät hitaasti Rustiin. Kannattaa myös harkita oppia rustista jos luot matalan tason ohjelmia.
  • Muistia säästävän kielen käytön lisäksi on suositeltavaa noudattaa parhaita käytäntöjä, kuten osoittimen asettamista NULL-arvoon sen vapauttamisen jälkeen, jotta vältytään Use-After-Free-haavoittuvuudelta.
  • Voit myös ottaa käyttöön tekniikoita, kuten One Time Allocation (OTA), jotka estävät hyökkääjiä pääsemästä vapautettuun muistiin objektit ja Strict Object Lifecycle Policy, joka auttaa pitämään kirjaa jokaisesta varatusta muistiobjektista ja jaettu. Muista kuitenkin, että nämä toteutukset voivat lisätä muistia ja suorituskykyä.

Tosimaailman esimerkkejä UAF-haavoittuvuudesta

Use-After-Free (UAF) -haavoittuvuus on löydetty ja sitä on hyödynnetty erilaisissa todellisissa skenaarioissa verkkoselaimista Android-ytimeen ja jokapäiväisiin sovelluksiin. Tämä osoittaa, että tarvitaan ennakoivia turvatoimia. Joitakin todellisia esimerkkejä UAF: sta ovat:

  • Internet-selaimet: Verkkoselaimien UAF-haavoittuvuuksia on käytetty hyväksi mielivaltaisen koodin suorittamiseksi, käyttäjien yksityisyyden vaarantamiseksi ja koodin etäsuoritushyökkäyksien suorittamiseen. Tuore esimerkki on CVE-2021-38008, joka käytti hyväkseen UAF-haavoittuvuutta Google Chromessa, jolloin uhkatekijät voivat suorittaa mielivaltaisen koodin etäyhteyden uhrikoneella.
  • Käyttöjärjestelmät: Windows-/Linux-/Android-ytimistä löydetyt UAF-haavoittuvuudet ovat antaneet hyökkääjille mahdollisuuden saada korkeampia käyttöoikeuksia, ohittaa suojausmekanismit ja saada pysyvyyttä. Käyttöjärjestelmän ytimistä on löydetty ja löytyy lukuisia UAF-haavoittuvuuksia tähän päivään mennessä. Tätä kirjoitettaessa, CVE-2023-3269, julkaistiin vielä yksi Linux-ytimen UAF-haavoittuvuus, joka johti käyttöoikeuksien eskaloitumiseen. CVE-2022-23270 on esimerkki Windows-ytimen UAF-haavoittuvuudesta.
  • Ohjelmistosovellukset: Ohjelmistosovellusten UAF-haavoittuvuuksia on käytetty hyväksi ohjelmien manipuloimiseen käyttäytyminen, joka johtaa tietojen paljastamiseen, mielivaltaisen koodin suorittamiseen, ohjelman kaatumiseen ja pahimmassa tapauksessa etuoikeuteen eskaloituminen. Useat ohjelmistosovellukset ovat olleet ja ovat edelleen alttiita UAF-hyökkäyksille. Nämä ohjelmistot ovat enimmäkseen C/C++-ohjelmia, jotka on kehitetty tehottomilla ja vaarallisilla muistinhallintamenetelmillä.

Saat lisätietoja Käytä-After-Free-haavoittuvuuksista todellisissa sovelluksissa tarkistamalla virallinen MITRE CVE luettelosivu ja lajittele Use-Af-Free-avainsanan mukaan.

Tehokas muistin varaus auttaa varmistamaan ohjelmiston turvallisuuden

Optimaalinen ja hyvin harkittu muistin allokointi auttaa suojaamaan sovelluksiasi joutumasta yleisten primitiivisten muistin korruptiohaavoittuvuuksien uhriksi.

UAF sekä Time Of Check Time of Use (TOCTOU), kilpailuolosuhteet ja puskurin ylivuoto (BOF) ovat joitain yleisimmin hyödynnetyistä muistin haavoittuvuuksista. Kaikki nämä voidaan välttää oppimalla, kuinka ohjelman muistia hallitaan alustalla, jolla se toimii. Tämä antaa sinulle selvyyden siitä, kuinka käyttöjärjestelmä varaa ohjelman muistiin, ja antaa sinulle työkalut ohjelmistojen suunnitteluun optimaalista suorituskykyä ja turvallisuutta varten.

Jos et vielä ole, voit aloittaa ymmärtämällä, kuinka muistinhallinta tapahtuu Linuxissa, maailman käytetyimmässä palvelinkäyttöjärjestelmässä.