Rust je uključen među glavne jezike za razvoj Android platforme

Google je najavio uključivanje programskog jezika Rust među jezike dozvoljene za razvoj Android platforme. Kompajler jezika Rust je uključen u Android izvorno stablo još 2019. godine, ali podrška za ovaj jezik je ostala eksperimentalna. Neke od prvih Rust komponenti planiranih za Android uključuju nove implementacije Binder međuprocesnog komunikacijskog mehanizma i Bluetooth steka.

Uvođenje Rusta izvršeno je u sklopu projekta jačanja sigurnosti, promocije bezbednih tehnika programiranja i povećanja efikasnosti identifikacije problema pri radu sa memorijom u Androidu. Napominje se da je oko 70% svih opasnih ranjivosti identificiranih u Androidu uzrokovano greškama pri radu s memorijom. Korištenje Rusta, koji se fokusira na sigurnost memorije i automatsko upravljanje memorijom, smanjit će rizik od ranjivosti uzrokovanih greškama u memoriji kao što su pristup nakon slobodnog pristupa i prekoračenje bafera.

Rust pojačava sigurnost memorije u vrijeme kompajliranja kroz provjeru referenci, vlasništvo nad objektom i praćenje životnog vijeka objekta (opsezi) i procjenom ispravnosti pristupa memoriji u vrijeme izvođenja. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva da se vrijednosti varijabli inicijaliziraju prije upotrebe, ima bolje rukovanje greškama u standardnoj biblioteci, koristi koncept nepromjenjivih referenci i varijabli prema zadanim postavkama i nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

U Androidu je sigurnost memorije osigurana u već podržanim jezicima Kotlin i Java, ali oni nisu pogodni za razvoj komponenti sistema zbog velikih troškova. Rust omogućava postizanje performansi bliskih C i C++ jezicima, što mu omogućava da se koristi za razvoj niskorazinskih delova platforme i komponenti za interakciju sa hardverom.

Kako bi osigurao sigurnost C i C++ koda, Android koristi izolaciju sandbox-a, statičku analizu i fuzzing testiranje. Mogućnosti izolacije sandbox-a su ograničene i dostigle su granicu svojih mogućnosti (dalja fragmentacija na procese je nepraktična sa stanovišta potrošnje resursa). Ograničenja korištenja sandbox-a uključuju velike režijske troškove i povećanu potrošnju memorije uzrokovanu potrebom za stvaranjem novih procesa, kao i dodatna kašnjenja povezana s korištenjem IPC-a.

Istovremeno, sandbox ne eliminiše ranjivosti u kodu, već samo smanjuje rizike i komplikuje napad, budući da eksploatacija zahtijeva identifikaciju ne jedne, već nekoliko ranjivosti. Metode zasnovane na testiranju koda su ograničene u tome što je za identifikaciju grešaka potrebno stvoriti uslove da se problem manifestuje. Nije moguće pokriti sve moguće opcije, pa mnoge greške ostaju neprimijećene.

Za sistemske procese u Androidu, Google se pridržava "pravila dva", prema kojem svaki dodani kod ne mora ispunjavati više od dva od tri uslova: rad sa nepotvrđenim ulaznim podacima, korištenje nesigurnog programskog jezika (C/C++) i radi bez stroge izolacije sandbox-a (sa povišenim privilegijama). Ovo pravilo implicira da kod za obradu eksternih podataka mora biti ili sveden na minimalne privilegije (izolovan) ili napisan u bezbednom programskom jeziku.

Google nema za cilj da prepiše postojeći C/C++ kod u Rustu, ali planira da koristi ovaj jezik za razvoj novog koda. Ima smisla koristiti Rust za novi kod jer se, statistički, većina grešaka pojavljuje u novom ili nedavno promijenjenom kodu. Konkretno, oko 50% otkrivenih memorijskih grešaka u Androidu je otkriveno u kodu napisanom prije manje od godinu dana.

Rust je uključen među glavne jezike za razvoj Android platforme


izvor: opennet.ru

Dodajte komentar