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

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

Uvođenje Rusta provedeno je u sklopu projekta jačanja sigurnosti, promicanja sigurnih tehnika programiranja i povećanja učinkovitosti prepoznavanja problema pri radu s memorijom u Androidu. Primijećeno je da je oko 70% svih opasnih ranjivosti identificiranih u Androidu uzrokovano pogreškama pri radu s memorijom. Korištenje Rusta, koji se fokusira na sigurnost memorije i automatsko upravljanje memorijom, smanjit će rizik od ranjivosti uzrokovanih pogreškama memorije kao što su pristup nakon oslobađanja i prekoračenja međuspremnika.

Rust osigurava sigurnost memorije tijekom kompajliranja putem provjere referenci, vlasništva nad objektom i praćenja životnog vijeka objekta (opsezi) te procjenom ispravnosti pristupa memoriji tijekom izvođenja. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva da se vrijednosti varijable inicijaliziraju prije upotrebe, ima bolje rukovanje pogreškama u standardnoj biblioteci, koristi koncept nepromjenjivih referenci i varijabli prema zadanim postavkama i nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.

U Androidu je sigurnost memorije osigurana u već podržanim jezicima Kotlin i Java, ali oni nisu prikladni za razvoj komponenti sustava zbog velikih troškova. Rust omogućuje postizanje performansi bliskih jezicima C i C++, što mu omogućuje da se koristi za razvoj dijelova platforme niske razine i komponenti za interakciju s hardverom.

Kako bi osigurao sigurnost C i C++ koda, Android koristi izolaciju sandboxa, statičku analizu i testiranje fuzzinga. Mogućnosti sandbox izolacije su ograničene i dosegle su granicu svojih mogućnosti (daljnja fragmentacija na procese je nepraktična sa stajališta potrošnje resursa). Ograničenja korištenja sandboxa 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 upotrebom IPC-a.

U isto vrijeme, sandbox ne uklanja ranjivosti u kodu, već samo smanjuje rizike i komplicira napad, budući da iskorištavanje zahtijeva identifikaciju ne jedne, već nekoliko ranjivosti. Metode koje se temelje na testiranju koda ograničene su utoliko što je za identificiranje pogrešaka potrebno stvoriti uvjete za manifestaciju problema. Nije moguće pokriti sve moguće opcije, pa mnoge pogreške ostaju nezapažene.

Za sistemske procese u Androidu, Google se pridržava "pravila dva", prema kojem svaki dodani kod ne smije ispunjavati više od dva od tri uvjeta: rad s neprovjerenim ulaznim podacima, korištenje nesigurnog programskog jezika (C/C++) i radi bez stroge izolacije sandboxa (imajući povišene privilegije). Ovo pravilo implicira da kod za obradu vanjskih podataka mora biti ili sveden na minimalne privilegije (izoliran) ili napisan u sigurnom programskom jeziku.

Google nema za cilj prepisati postojeći C/C++ kod u Rustu, ali planira koristiti 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 pogrešaka u Androidu otkriveno je 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