Project Zero je razvio metodu za iskorištavanje ranjivosti u Linuxu

Linux

Iskorištavanje nultih referenci u jezgri Linuxa

Nedavno je objavljena vijest da je razvili su istraživači iz tima Google Project Zero un metoda za iskorištavanje ranjivosti u Linux kernelu uzrokovan dereferenciranjem NULL pokazivača.

Do sada, problema u vezi s jezgrom s dereferenciranjem NULL pokazivača nisu dobili odgovarajuću pozornost, budući da se smatralo nerealnim takve probleme pretvoriti u napade koji bi doveli do eskalacije privilegija ili izvršenja vlastitog koda (zabranjeno mapiranje neprivilegiranih procesa u nižoj regiji adresnog prostora).

Kao opće pravilo, takve pogreške dovode do generiranja ups upozorenja od strane kernela, nakon čega se problematični zadaci završavaju i stanje se vraća bez potrebe za zaustavljanjem sustava.

Nova metoda napada temelji se na rukovanju "ups" stanjima, što može rezultirati povećanjem vrijednosti referentnog brojača (refcount), što zauzvrat može uzrokovati prekoračenje brojača i oslobađanje memorije povezane s refcountom.

U ovom slučaju, iskorištavanje se svodi na manipulacije tipične za napade nakon korištenja (dolazi do situacije u kojoj broj referenci objekta postaje nula, memorija je oslobođena, ali zapravo postoje poveznice koje rade na oslobođenu memoriju).

Trenutačno, kada jezgra Linuxa pokrene nultu dereferenciju unutar konteksta procesa, ona generira Ups , što se razlikuje od kernel panike. Panika se javlja kada kernel utvrdi da ne postoji siguran način za nastavak izvršenja, te stoga svako izvršenje mora prestati. Međutim, kernel Ne  zaustavlja sva izvršenja za ups; umjesto toga, kernel se pokušava oporaviti najbolje što može i nastavlja s izvršenjem.

Dereferenciranje NULL pokazivača ovdje se koristi kao način za generiranje stanja "ups" na kontrolirani način. Problem je u tome što su potrebna oko 232 poziva statusa "ups" da bi se doseglo 32-bitno prekoračenje broja referenca.

S praktične točke gledišta, potrebno je oko 8 dana kontinuiranog generiranja "ups" stanja za izvođenje napada koristeći predloženi exploit. Ako je uspješan, iskorištavanje vam omogućuje da postignete izvršenje koda na razini jezgre.

Dereferencija NULL pokazivača korištena u eksploataciji popravljena je u listopadu, ali budući da slični problemi nisu neuobičajeni i prethodno su tretirani kao bugovi, a ne ranjivosti, programeri će dodati opću zaštitu jezgri Linuxa kako bi spriječili napade koji manipuliraju generiranjem "ups" ."

 U slučaju zadatka, to znači odbacivanje postojećeg steka kernela i odlazak izravno na make_task_dead koji poziva do_exit. Kernel će također objaviti na dmesg "crash" dnevnik i kernel trag koji pokazuje u kakvom je stanju kernel bio kada se greška dogodila. Ovo se može činiti kao čudan izbor kada je očito došlo do oštećenja memorije; međutim, namjera je olakšati otkrivanje grešaka u jezgri i prijavu prema filozofiji da je sustav koji radi puno lakše otkloniti pogreške nego neispravan.

Osobito, Kernel 6.2 uključuje promjene za ograničavanje maksimalnog broja "ups". Nakon dostizanja limita, koji je prema zadanim postavkama postavljen na 10 tisuća oops (možete ga promijeniti preko parametra oops_limit ako želite), kernel će pokrenuti prijelaz u "panic" stanje, nakon čega slijedi ponovno pokretanje, koje neće dopustiti broj ponavljanja potrebnih da se refcount vrati na nulu.

Također je planirano da se ograničenje prenese na prethodno objavljene, ali još uvijek podržane grane kernela, kao i pakete kernela popularnih distribucija.

Konačno ako vas zanima više o tome, detalje možete provjeriti u sljedeći link.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.