Dirty CoW ranjivost i dalje opasnost

Android uređaji izloženi Dirty Cow ranjivosti koja omogućava napadačima da preuzmu kontrolu nad sistemom.

Dirty CoW ranjivost i dalje opasnost

Dirty COW (copy-on-write) je ranjivost u Linux kernelu koja omogućava napadačima da dobiju privilegovan pristup i preuzmu kontrolu nad sistemom. Zvanični naziv za ovaj bug je CVE-2016-5195. Ova ozbiljna ranjivost otkrivena je prošlog meseca, ali postoji u kodu više od 9 godina! Dirty Cow ranjivost pogađa stotine hiljada, možda i milione mašina koje se baziraju na Linux kernelu, uključujući i Android. Patch za Linux kernel je izašao brzo pošto je bug otkriven, ali za Android problem nije u potpunosti rešen.

Google je u novembru objavio supplemental patch koji nije bio deo redovnog novembarskog update paketa, ali će podržani uređaji dobiti update tek 1. decembra. Do tada su nezaštićeni.

Proizvođači Android uređaja sami određuju koje će ranjivosti i kada biti "zakrpljene" na telefonima koje prodaju. Iako, dakle mogu i sami da izdaju i distribuiraju zakrpe, oni obično čekaju da ih Google pošalje u okviru mesečnog bezbednosnog ažuriranja. Bezbednosne zakrpe koje Google izdaje prvo su dostupne proizvođačima, a mesec dana nakon toga zakrpe se distribuiraju na uređaje. Proizvođači imaju dovoljno vremena da implementiraju i testiraju zakrpe, ili da ih prilagode za svoje uređaje (što retko rade), ali su korisnici za to vreme nezaštićeni.

Šta je tačno Dirty Cow ranjivost i kako funkcioniše?

Dirty Cow se najbolje može ilustrovati pravljenjem paralele sa popularnom uličnom igrom šibicarenja. Dakle, imate 3 kutije, kuglicu, prevaranta, njegovog saradnika (ili više njih) i naivnu žrtvu. Cilj je da pogodite ispod koje kutije je kuglica. U početku, saradnici koji se pretvaraju da su slučajni prolaznici dobijaju nekoliko opklada za redom navodeći tako potencijalnu žrtvu da pomisli kako je igra laka. Onda žrtva odluči da se oproba i obično na početku dobije nekoliko manjih opklada. Kada odluči da odigra na veću sumu, saradnici prevaranta joj samo na delić sekunde odvuku pažnju i, novac je izgubljen!

Računarskom terminologijom rečeno, desio vam se “race condition“ ili bug. Videli ste da je kuglica ispod konkretne kutije (izvršena provera zahtevanog uslova) i zato ste pokazali na tu kutiju (izvršena je akcija). Međutim, ono što niste znali je da se između provere i akcije situacija promenila na način da prvobitni uslov više ne važi. U životu, to vas može „olakšati“ za par hiljada dinara, ali u računarskom svetu, trošak, tj. cena može biti daleko veća.

Race condition se obično rešava tako što se zahteva da se provera i akcija izvrše kao deo jedinstvene (atomske) transakcije, tj. da se stanje sistema zamrzne kako inicijalni uslov ne bi bio modifikovan dok se akcija ne završi. Analogija sa šibicarenjem bi ovde bila kada bi recimo stavili nogu na kutiju u kojoj se nalazi kuglica kako ne biste dozvolili prevarantima da vam odvuku pažnju i zamene kutije.

COW

Race condition ili bug koji je otkriven u Linux Kernelu se odnosi na memory mapping. Linux koristi pristup Change on Write (COW) kako bi eliminisao nepotrebno dupliranje objekata u memoriji. Na primer, zamislite sledeći računarski kod:

a = ‘COW’ b = a

Iako ovde imamo 2 varijable, obe upućuju na isti objekat u memoriji i zato nema potrebe da se koristi duplo više RAM memorije za 2 identične vrednosti. Dalje, OS čeka dok vrednost dupliranog objekta ne bude modifikovana:

b += ‘ Dirty’

U ovom trenutku, Linux radi sledeće (pojednostavljeno da bi bilo jasnije):

  1. Alocira memoriju za novi, modifikovani objekat.
  2. Čita originalni sadržaj dupliranog objekta (’COW’)
  3. Obavlja bilo koje zahtevane promene (dodaje ’Dirty’)
  4. Zapisuje modifikovani sadržaj u novo alocirani deo memorije.

Nažalost, između drugog i četvrtog koraka pomenuti bug čini da memory mapper zapiše modifikovani sadržaj u prvobitni deo memorije umesto u novo alocirani, što znači da se umesto modifikovanja memorije koja pripada „b“ dešava modifikovanje „a“.

Kao i svaki POSIX sistem, Linux implementira DAC (Discretionary Access Controls) u kome korisnici i grupe dozvoljavaju ili onemogućavaju pristup različitim delovima OS-a. Pristup može biti read-only ili read-write. Race condition omogućava napadaču da zaobiđe pravila tako što prevari COW mehanizam da modifikuje originalne read-only objekte umesto njihove kopije. Drugim rečima, pažljivo osmišljenim napadom neprivilegovani korisnik dobija privilegovani pristup (“root“) i može recimo da zameni "/bin/bash" malicioznom verzijom.

Zakrpa

Nema pouzdanih dokaza da je ovaj bug eksploatisan, ali imperativ je zakrpiti sve Linux sisteme što pre. Zakrpa za Linux kernel je dostupna tako da bi trebalo da pratite obaveštenja za verziju Linuxa koju koristite i da što pre primenite zakrpu, a nadamo se da ste to već uradili. Za Android zakrpa bi trebalo da bude dostupna od 1. decembra.

Izvori: linux.com i xda-developers.com