Projekt Zero je razvil metodo za izkoriščanje ranljivosti v Linuxu

Linux

Izkoriščanje ničelnih referenc v jedru Linuxa

Nedavno je bilo objavljeno, da so raziskovalci iz ekipe Google Project Zero razvili metodo za izkoriščanje ranljivosti v jedru Linuxa, ki jih povzroča dereferenciranje kazalca NULL.

Do sedaj težave z jedrom , povezane z dereferenciranjem ničelnih kazalcev, niso bile deležne ustrezne pozornosti , saj se je zdelo nerealno takšne težave spremeniti v napade, ki bi vodili do stopnjevanja privilegijev ali izvajanja lastne kode (preslikava neprivilegiranih procesov v spodnje območje naslovnega prostora je prepovedana).

Praviloma takšne napake vodijo do tega, da jedro ustvari opozorila o napakah (oops) , nakar se problematične naloge zaključijo in stanje se obnovi brez potrebe po zaustavitvi sistema.

Nova metoda napada temelji na obravnavi stanj »oops« , kar lahko povzroči povečanje vrednosti referenčnega števca (refcount), kar pa lahko povzroči prepolnitev števca in sprostitev pomnilnika, povezanega s refcountom.

V tem primeru je izkoriščanje zmanjšano na manipulacije, ki so značilne za napade brez uporabe (pride do situacije, ko referencno število objekta postane nič, pomnilnik je osvobojen, v resnici pa obstajajo delujoče povezave, ki kažejo na sproščen pomnilnik).

Trenutno, ko jedro Linuxa sproži dereferenco nič znotraj konteksta procesa, ustvari napako oops , ki se razlikuje od panike jedra. Panika se pojavi, ko jedro ugotovi, da ni varnega načina za nadaljevanje izvajanja in mora zato ustaviti vse izvajanje. Vendar jedro med napako oops ne ustavi vsega izvajanja; namesto tega poskuša čim bolje obnoviti delovanje in nadaljuje z izvajanjem.

Dereferenciranje kazalca NULL se tukaj uporablja kot način za generiranje stanja "ups" na nadzorovan način. Težava je v tem, da je potrebnih približno 232 klicev statusa "oops", da se doseže 32-bitni presežek refcount.

S praktičnega vidika traja približno osem dni neprekinjenega generiranja stanj izven mesta (OOP), da se izvede napad z uporabo predlagane izkoriščevalske metode. Če je izkoriščevalska metoda uspešna, vam omogoča izvajanje kode na ravni jedra.

Dereferenca kazalca NULL, uporabljena v izkoriščanju, je bila popravljena oktobra, a ker podobne težave niso neobičajne in so bile prej obravnavane kot hrošči, ne ranljivosti, bodo razvijalci dodali splošno zaščito jedru Linuxa, da preprečijo napade, ki manipulirajo z ustvarjanjem "ups ."

 V primeru naloge to pomeni, da zavržete obstoječi sklad jedra in greste neposredno na make_task_dead, ki kliče do_exit. Jedro bo v dmesg objavilo tudi dnevnik "zrušitve" in sled jedra, ki prikazuje, v kakšnem stanju je bilo jedro, ko je prišlo do napake. To se morda zdi nenavadna izbira, ko je očitno prišlo do poškodbe pomnilnika; vendar je namen narediti hrošče jedra lažje zaznati in prijaviti v skladu s filozofijo, da je v delujočem sistemu veliko lažje odpraviti napake kot v nedelujočem.

Jedro 6.2 vključuje spremembe, ki omejujejo največje število napak »oops« . Ko je omejitev dosežena, je privzeto nastavljena na 10 napak (to lahko po želji spremenite s parametrom oops_limit), bo jedro prešlo v stanje »panike«, ki mu bo sledil ponovni zagon, ki ne bo omogočil števila iteracij, potrebnih za ponastavitev refcount na nič.

Načrtuje se tudi, da se omejitev prenese na predhodno izdane, a še vedno podprte veje jedra, pa tudi na pakete jedra priljubljenih distribucij.

Nenazadnje, če vas zanima več o tem , lahko podrobnosti najdete na naslednji povezavi.


Dodaj kot prednostni vir v Googlu