Google vyvíja časti Androidu v Ruste s cieľom zlepšiť bezpečnosť

Google píše a prepisuje časti Androidu v Ruste, aby zlepšil bezpečnosť operačného systému ako celku, v porovnaní s C a C++. Čítajte ďalej a dozviete sa viac!

Android ako kompletné riešenie operačného systému zahŕňa množstvo pohyblivých častí. Veľmi všeobecne povedané, týmito časťami sú ekosystém aplikácií a potom samotný OS. Ako vývojár sa váš programovací jazyk líši v závislosti od toho, na ktorej časti Androidu pracujete. Pre vývojárov aplikácií sú obľúbené možnosti Java a Kotlin. Pre vývojárov pracujúcich na OS a nižších úrovniach v ňom boli C a C++ doteraz obľúbenou voľbou. Dnes Google pridáva tretiu možnosť pre vývojárov OS, keďže Android Open Source Project teraz podporuje programovací jazyk Rust pre vývoj samotného OS.

Obmedzenia C a C++

Nižšie úrovne operačného systému Android vyžadujú systémové programovacie jazyky ako C a C++. Tieto jazyky poskytujú vývojárom kontrolu a predvídateľnosť, čo je dôležité pri prístupe k nízkoúrovňovým systémovým prostriedkom a hardvéru.

Žiaľ, C a C++ neposkytujú záruky bezpečnosti pamäte, čo ich robí náchylnými na chyby a slabé miesta zabezpečenia. Vývojár je zodpovedný za správu životnosti pamäte v týchto jazykoch, ale v zložitých a viacvláknových kódových základniach sa to ľahšie povie, ako urobí.

C a C++ spolu tvoria desiatky miliónov riadkov kódu na platforme Android. Tieto chyby v oblasti bezpečnosti pamäte sa stávajú najťažšie odstrániteľným zdrojom nesprávnosti kódu a predstavujú ~70 % veľmi závažných bezpečnostných zraniteľností systému Android. Len oprava týchto chýb nestačí na riešenie problému a lepším prístupom by bolo v prvom rade im predchádzať.

Nedostatočná bezpečnosť pamäte núti vývojárov spúšťať procesy Android v prísne obmedzených a neprivilegovaných karanténách. Ale karantény sú drahé na zdroje, spotrebúvajú dodatočnú réžiu a zavádzajú latenciu. Sandboxing tiež úplne neodstraňuje zraniteľné miesta kódu a jeho účinnosť je znížená kvôli vysokej hustote chýb, čo útočníkom ďalej umožňuje reťaziť viacero zraniteľností.

Ďalším obmedzením, aj keď nie je jedinečné pre C a C++, ale vzťahuje sa na všetky problémy s bezpečnosťou pamäte, je to, že chybný stav musí byť v skutočnosti spustený v inštrumentovanom kóde, aby mohol byť zistený. Takže aj keď má váš kód vynikajúce testovanie, skutočná chyba môže zostať neodhalená. A keď sa nájdu chyby, ich oprava je ďalšou úlohou, ktorá zahŕňa dlhý a nákladný proces, ktorý nemusí vždy viesť k správnej oprave. Detekcia chýb sa tak stáva nespoľahlivou a prevencia chýb je lepším prístupom, ktorý treba vziať do úvahy vo svetle týchto obmedzení.

Tu prichádza na rad prechod na pamäťovo bezpečný jazyk, akým je Rust.

Hrdza a jej výhody

Rust poskytuje záruky bezpečnosti pamäte pomocou kombinácie kontrol počas kompilácie na vynútenie životnosti/vlastníctva objektu a kontrol za behu na zabezpečenie platnosti prístupov do pamäte. Táto bezpečnosť je dosiahnutá pri poskytovaní výkonu ekvivalentného C a C++. Rust tiež znižuje potrebu sandboxingu, čo vývojárom poskytuje viac režijného priestoru na zavádzanie nových funkcií, ktoré sú bezpečnejšie a nenáročné na zdroje.

Hoci Rust skutočne má svoje výhody, nie je možné prepnúť celý OS Android na Rust cez noc. A to možno ani nie je potrebné, keďže väčšina chýb pamäte Androidu sa vyskytuje v novom alebo nedávno upravenom kóde, pričom približne 50 % má menej ako rok. Spoločnosť Google je presvedčená, že jej úsilie v oblasti bezpečného jazyka je najlepšie zamerané na nový vývoj, a nie na prepisovanie vyspelého kódu C a C++.

Rust sa tiež zameriava skôr na predchádzanie chybám, než by sa výrazne opieral o detekciu chýb, čo vedie k zlepšeniu správnosti kódu. Má niekoľko kľúčových funkcií, ako je bezpečnosť pamäte, súbežnosť údajov, systémy expresívnejšieho typu, nemenné štandardne referencie a premenné, bezpečnejšie spracovanie celých čísel, lepšie spracovanie chýb v štandardných knižniciach a mnohé ďalšie viac.

Čo znamená prechod na Rust pre Android?

Google hovorí, že za posledných 18 mesiacov pridáva podporu Rust do projektu Android Open Source Project. Pridanie nového jazyka na platformu Android je však obrovským krokom. Je potrebné udržiavať niektoré reťazce nástrojov a závislosti, aktualizovať testovaciu infraštruktúru a nástroje a zaškoliť vývojárov.

Spoločnosť Google má niekoľko projektov, ktoré budú v nadchádzajúcich mesiacoch zdieľať. Ale aj tak sa jasne uvádza, že rozšírenie podpory Rust na väčšiu časť OS je viacročný projekt.

Z toho, čo vidíme, Google už Rust na niekoľkých miestach používa. Nový Bluetooth stack pre Android s kódovým názvom "Gabeldorsche“ sa píše v Ruste. Práce na Gabeldorsche začali približne v čase Androidu 11, ale ešte sa nepoužíva. Android Úložisko kľúčov 2.0 modul je napísaný v jazyku Rust, rovnako ako aj časť používateľského priestoru bindera, ovládača IPC pre Android. Hoci nesúvisí s Androidom, Fuchsiováje nový netstack sa píše aj v Ruste.

Pre vývojárov aplikácií tento prepínač nemení nič na tom, ako vy ako vývojár aplikácií píšete aplikácie alebo ako fungujú rozhrania API. Tento prepínač ovplyvňuje iba spôsob zápisu operačného systému. Tvrdí to člen tímu Android Developer RelationsGoogle tiež momentálne neplánuje vydať Rust NDK. Podporované jazyky pre vývoj aplikácií budú naďalej Kotlin, Java, C a C++.