Podjetje Google je napovedalo vključitev programskega jezika Rust med jezike, dovoljene za razvoj platforme Android. Prevajalnik jezika Rust je bil vključen v drevo izvornih kod Androida že leta 2019, vendar je bila podpora za ta jezik še vedno eksperimentalna. Eden prvih komponent na Rustu, ki naj bi bili v Androidu, so nove izvedbe mehanizma medprocesne komunikacije Binder in Bluetooth sklada.
Vključitev Rusta je bila izvedena v okviru projekta za izboljšanje varnosti, spodbujanje varnih programskih praks ter povečanje učinkovitosti pri odkrivanju težav z delovanjem v spominu v Androidu. Opaženo je, da okoli 70 % vseh nevarnih ranljivosti, odkritih v Androidu, izhaja iz napak pri upravljanju z delovnim spominom. Uporaba jezika Rust, ki je osredotočen na varno upravljanje s spominom in omogoča avtomatsko upravljanje spomina, bo pomagala zmanjšati tveganje za ranljivosti, ki izhajajo iz napak pri upravljanju s spominom, kot so dostop do pomnilnika po njegovi osvoboditvi in prekoračitev meja pomnilnika.
V jeziku Rust se varno upravljanje s spominom zagotavlja med prevajanjem preko preverjanja sklicevanja, spremljanja lastništva objektov in upoštevanja življenjske dobe objektov (področij vidnosti), pa tudi preko ocenjevanja pravilnosti dostopa do spomina med izvajanjem kode. Rust prav tako nudi sredstva za zaščito pred prelivanjem celih števil, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, uporablja koncept nespremenljivosti (immutable) sklicev in spremenljivk kot privzeto ter ponuja močno statično tipizacijo za minimizacijo logičnih napak.
V Androidu varno upravljanje s spominom zagotavljajo že podprti jeziki Kotlin in Java, vendar ti niso primerni za razvoj sistemskih komponent zaradi velikih režijskih stroškov. Rust omogoča dosego zmogljivosti, ki je blizu jezikom C in C++, kar omogoča njegovo uporabo pri razvoju nizkotnih delov platforme in komponent za interakcijo s strojno opremo.
Za zagotavljanje varnosti kode v C in C++ v Androidu se uporablja izolacija zandbox, statična analiza in fuzzing testiranje. Možnosti izolacije v zandboxu so omejene in so dosegle meje svojih zmožnosti (dodatno deljenje procesov ni smiselno z vidika porabe virov). Med omejitvami uporabe zandboxa se omenjajo velike dodatne obremenitve in porast porabe pomnilnika, ki ga povzroča potreba po ustvarjanju novih procesov, ter nastanek dodatnih zamud, povezanih z uporabo IPC.
Pri tem zandbox ne odpravlja ranljivosti v kodi, ampak le zmanjša tveganja in oteži izvedbo napada, saj je za izkoriščanje potrebno odkriti ne eno, ampak več ranljivosti. Metode, ki temeljijo na testiranju kode, so omejene s tem, da je za odkrivanje napak potrebno ustvariti pogoje za pojav problema. Pokriti vseh možnih različic ne moremo, zato mnoge napake ostanejo neopažene.
Za sistemske procese v Androidu se podjetje Google drži »pravila dveh«, po katerem mora vsak dodani koda ustrezati največ dvema od treh pogojev: delo z nepreverjenimi vnosi, uporaba nevarnega programskega jezika (C/C++) in izvajanje brez stroge izolacije zandbox (prisotnost povišanih privilegijev). Iz tega pravila sledi, da mora biti koda za obdelavo zunanjih podatkov bodisi omejena na minimalne privilegije (izolirana) bodisi napisana v varnem programskem jeziku.
Google si ne postavlja cilja, da bi prepisal obstoječo kodo C/C++ v Rust, temveč načrtuje uporabo tega jezika za razvoj nove kode. Uporaba Rusta za novo kodo je smiselna, saj statistika kaže, da se večina napak pojavi v novi ali nedavno spremenjeni kodi. Konkretno, približno 50% odkritih napak pri delu s pomnilnikom v Androidu je zaznanih v kodi, napisani pred manj kot enim letom.

Izvor: opennet.ru
