Google razvija dele Androida v Rustu za izboljšanje varnosti

Google piše in prepisuje dele Androida v Rust, da bi izboljšal varnost operacijskega sistema kot celote, v primerjavi s C in C++. Berite naprej, če želite izvedeti več!

Android kot popolna rešitev operacijskega sistema vključuje veliko gibljivih delov. Zelo na splošno so ti deli ekosistem aplikacij in nato sam OS. Kot razvijalec se programski jezik, ki ga izberete, razlikuje glede na to, na katerem delu Androida delate. Za razvijalce aplikacij sta priljubljeni možnosti Java in Kotlin. Za razvijalce, ki delajo na OS in nižjih ravneh v njem, sta bila C in C++ do zdaj priljubljena izbira. Danes Google dodaja še tretjo možnost za razvijalce OS, saj odprtokodni projekt Android zdaj podpira programski jezik Rust za razvoj samega OS.

Omejitve C in C++

Nižje ravni operacijskega sistema Android zahtevajo sistemske programske jezike, kot sta C in C++. Ti jeziki razvijalcem zagotavljajo nadzor in predvidljivost, kar je pomembno pri dostopu do sistemskih virov in strojne opreme na nizki ravni.

Na žalost C in C++ ne nudita garancij za varnost pomnilnika, zaradi česar sta nagnjena k hroščem in varnostnim ranljivostim. Razvijalec je odgovoren za upravljanje življenjske dobe pomnilnika v teh jezikih, vendar je v zapletenih in večnitnih kodnih bazah to lažje reči kot narediti.

C in C++ skupaj sestavljata več deset milijonov vrstic kode na platformi Android. Te napake v varnosti pomnilnika postanejo vir nepravilnosti kode, ki ga je najtežje odpraviti in predstavljajo približno 70 % visoko resnih varnostnih ranljivosti Androida. Zgolj odpravljanje teh hroščev postane nezadostno za obravnavo težave in boljši pristop bi bil, da bi jih sploh preprečili.

Pomanjkanje jamstev za varnost pomnilnika sili razvijalce, da poganjajo procese Android znotraj strogo omejenih in neprivilegiranih peskovnikov. Toda peskovniki so dragi glede virov, porabljajo dodatne stroške in povzročajo zakasnitev. Peskovnik prav tako ne odpravi v celoti ranljivosti kode, njena učinkovitost pa je zmanjšana zaradi visoke gostote hroščev, kar napadalcem še dodatno omogoča, da verižijo več ranljivosti.

Druga omejitev, čeprav ni edinstvena za C in C++, ampak velja za vse težave z varnostjo pomnilnika, je ta, da mora biti napačno stanje dejansko sproženo v instrumentirani kodi, da se zazna. Tudi če je vaša koda dobro preizkušena, lahko dejanska napaka ostane neodkrita. In ko se odkrijejo hrošči, je njihovo odpravljanje še ena naloga, ki vključuje dolg in drag postopek, ki morda ne vodi vedno do pravilnega popravka. Tako odkrivanje hroščev postane nezanesljivo, preprečevanje hroščev pa je glede na te omejitve boljši pristop.

Tu nastopi prehod na jezik, ki je varen za spomin, kot je Rust.

Rja in njene prednosti

Rust zagotavlja jamstva za varnost pomnilnika z uporabo kombinacije preverjanj v času prevajanja za uveljavljanje življenjske dobe/lastništva objekta in preverjanj med izvajanjem za zagotovitev, da so dostopi do pomnilnika veljavni. Ta varnost je dosežena ob zagotavljanju enakovredne zmogljivosti kot C in C++. Rust tudi zmanjša potrebo po peskovniku, kar razvijalcem omogoča več prostora za uvedbo novih funkcij, ki so varnejše in manj virov.

Čeprav ima Rust res svoje prednosti, celotnega operacijskega sistema Android ni mogoče preklopiti na Rust čez noč. In to morda niti ne bo potrebno, saj se večina napak v pomnilniku Android pojavlja v novi ali nedavno spremenjeni kodi, pri čemer je približno 50 % starih manj kot eno leto. Google verjame, da je njegova prizadevanja za varen jezik najbolje osredotočiti na nov razvoj, namesto na ponovno pisanje zrele kode C in C++.

Rust se osredotoča tudi na preprečevanje hroščev, namesto da bi se močno zanašal na odkrivanje hroščev, kar ima za posledico izboljšano pravilnost kode. Ima več ključnih funkcij, kot so varnost pomnilnika, sočasnost podatkov, izrazitejši tipski sistemi, nespremenljivost reference in spremenljivke privzeto, varnejša obravnava celih števil, boljša obravnava napak v standardnih knjižnicah in še veliko več.

Kaj prehod na Rust pomeni za Android?

Google pravi, da v zadnjih 18 mesecih dodaja podporo za Rust odprtokodnemu projektu Android. Toda dodajanje novega jezika na platformo Android je ogromen podvig. Nekatere verige orodij in odvisnosti je treba vzdrževati, preskusno infrastrukturo in orodja je treba posodobiti, razvijalce pa je treba usposobiti.

Google ima nekaj zgodnjih projektov, ki jih bodo delili v prihodnjih mesecih. Toda kljub temu je jasno, da je razširitev podpore Rust na več operacijskih sistemov večletni projekt.

Glede na to, kar lahko vidimo, Google že uporablja Rust na nekaj mestih. Androidovo novo preoblikovanje sklada Bluetooth s kodnim imenom "Gabeldorsche« je napisano v jeziku Rust. Delo na Gabeldorscheju se je začelo približno v času Androida 11, vendar še vedno ni v uporabi. Androidov Shramba ključev 2.0 modul je napisan v Rustu, prav tako pa je tudi del uporabniškega prostora binderja, gonilnika IPC za Android. Čeprav ni povezano z Androidom, Fuksijaje novo netstack se piše tudi v Rustu.

Za razvijalce aplikacij stikalo ne spremeni ničesar glede tega, kako vi kot razvijalec aplikacij pišete aplikacije ali kako delujejo okvirni API-ji. To stikalo vpliva samo na to, kako je napisan OS. Po mnenju člana skupine za odnose z razvijalci Android, Google prav tako trenutno ne namerava izdati Rust NDK. Podprti jeziki za razvoj aplikacij bodo še naprej Kotlin, Java, C in C++.