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

Linux

Iskorištavanje nultih referenci u jezgri Linuxa

Nedavno je objavljeno da su istraživači iz tima Google Project Zero razvili metodu za iskorištavanje ranjivosti u Linux kernelu uzrokovanih dereferenciranjem NULL pokazivača.

Do sada, problemi s kernelom povezani s dereferenciranjem NULL pokazivača nisu dobili dužnu pozornost , jer se smatralo nerealnim pretvoriti takve probleme u napade koji vode do eskalacije privilegija ili izvršavanja vlastitog koda (mapiranje neprivilegiranih procesa na niže područje adresnog prostora je zabranjeno).

Općenito, takve pogreške dovode do generiranja oops upozorenja od strane kernela, nakon čega se problematični zadaci dovršavaju i stanje se vraća bez potrebe za zaustavljanjem sustava.

Nova metoda napada temelji se na rukovanju "oops" stanjima , što može rezultirati povećanjem vrijednosti referentnog brojača (refcount), što zauzvrat može uzrokovati prelijevanje 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).

Trenutno, kada Linux kernel aktivira null dereferencu unutar konteksta procesa, generira oops , što se razlikuje od kernel panike. Panika se javlja kada kernel utvrdi da ne postoji siguran način za nastavak izvršavanja i stoga mora prekinuti sva izvršavanja. Međutim, kernel ne zaustavlja sva izvršavanja tijekom oopsa; umjesto toga, kernel pokušava se oporaviti najbolje što može i nastavlja izvršavanje.

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čnog stajališta, potrebno je otprilike osam dana kontinuiranog generiranja OOP (out-of-place) stanja za izvođenje napada korištenjem predloženog iskorištavanja. Ako je uspješno, iskorištavanje vam omogućuje izvršavanje koda na razini kernela.

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.

Konkretno , Kernel 6.2 uključuje promjene za ograničavanje maksimalnog broja "oops" . Nakon što se dosegne ograničenje, koje je prema zadanim postavkama postavljeno na 10 000 oops (to možete promijeniti pomoću parametra oops_limit ako želite), kernel će pokrenuti prijelaz u stanje "panike", nakon čega slijedi ponovno pokretanje, što neće dopustiti broj iteracija potreban za resetiranje refcounta 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 ste zainteresirani saznati više o ovome , detalje možete pronaći na sljedećoj poveznici.


Dodaj kao preferirani izvor na Googleu