Google arendab turvalisuse parandamiseks Androidi osi Rustis

click fraud protection

Google kirjutab ja kirjutab Androidi osi Rustis ümber, et parandada OS-i kui terviku turvalisust võrreldes C- ja C++-ga. Loe edasi, et rohkem teada saada!

Android kui OS-i terviklik lahendus sisaldab palju liikuvaid osi. Väga laias laastus on need osad rakenduste ökosüsteem ja seejärel OS ise. Arendajana on teie programmeerimiskeel erinev sõltuvalt sellest, millise Androidi osaga töötate. Rakenduste arendajate jaoks on populaarsed valikud Java ja Kotlin. OS-i ja selle madalamate tasemete kallal töötavate arendajate jaoks on seni populaarsed valikud olnud C ja C++. Täna lisab Google OS-i arendajatele kolmanda võimaluse, kuna Android Open Source Project toetab nüüd OS-i enda arendamiseks programmeerimiskeelt Rust.

C ja C++ piirangud

Android OS-i madalamad tasemed nõuavad süsteemide programmeerimiskeeli nagu C ja C++. Need keeled pakuvad arendajatele kontrolli ja prognoositavust, mis on oluline madala taseme süsteemiressurssidele ja riistvarale juurdepääsul.

Kahjuks ei suuda C ja C++ anda mälu ohutuse garantiisid, mistõttu on need altid vigadele ja turvaaukudele. Arendaja vastutab nende keelte mälu kasutusaja haldamise eest, kuid keerukate ja mitmelõimeliste koodibaaside puhul on seda lihtsam öelda kui teha.

C ja C++ moodustavad Androidi platvormil kokku kümneid miljoneid koodiridu. Need mäluohutuse vead muutuvad kõige raskemini kõrvaldatavaks koodi ebakorrektse allikaks, moodustades ~70% Androidi väga tõsistest turvaaukudest. Ainuüksi nende vigade parandamisest ei piisa probleemi lahendamiseks ja parem lähenemine oleks neid ennetada.

Mälu ohutuse puudumine sunnib arendajaid käivitama Androidi protsesse rangelt piiratud ja privilegeerimata liivakastides. Kuid liivakastid on ressursside poolest kallid, kulutavad täiendavaid üldkulusid ja lisavad latentsust. Liivakast ei kõrvalda ka koodi turvaauke täielikult ja selle tõhusus väheneb suure veatiheduse tõttu, mis võimaldab ründajatel mitut turvaauku aheldada.

Teine piirang, ehkki mitte ainulaadne C-le ja C++-le, kuid kehtib kõigi mäluohutuse probleemide puhul, on see, et vigane olek tuleb tuvastamiseks käivitada instrumenteeritud koodis. Nii et isegi kui teie koodil on suurepärane testimine, võib tegelik viga jääda avastamata. Ja kui vead leitakse, on nende parandamine veel üks ülesanne, mis hõlmab pikka ja kulukat protsessi, mis ei pruugi alati viia õige parandamiseni. Seega muutub vigade tuvastamine ebausaldusväärseks ja veaennetus on nende piirangute valguses parem lähenemine.

Siin tuleb pildile üleminek mälukindlale keelele nagu Rust.

Rooste ja selle eelised

Rust pakub mälu ohutuse garantiisid, kasutades kompileerimisaja kontrollide kombinatsiooni objekti eluea/omandiõiguse jõustamiseks ja käitusaja kontrollide kombinatsiooni, et tagada mälu juurdepääsu kehtivus. See ohutus saavutatakse, tagades samaväärse jõudluse kui C ja C++. Rooste vähendab ka vajadust liivakasti kasutamise järele, võimaldades arendajatel rohkem ruumi uute, turvalisemate ja ressursse säästvamate funktsioonide kasutuselevõtuks.

Kuigi Rustil on tõepoolest oma eelised, ei ole võimalik kogu Android OS-i üleöö Rustile lülitada. Ja seda ei pruugi isegi vaja minna, kuna enamik Androidi mäluvigadest ilmnevad uues või hiljuti muudetud koodis, kusjuures umbes 50% neist on alla aasta vanad. Google usub, et tema mäluohutu keeletöö on kõige paremini keskendunud uutele arendustele, mitte küpse C- ja C++-koodi ümberkirjutamisele.

Rust keskendub ka vigade ennetamisele, mitte ei toetu tugevalt vigade tuvastamisele, mille tulemuseks on parem koodi õigsus. Sellel on mitu põhifunktsiooni, nagu mälu turvalisus, andmete samaaegsus, väljendusrikkamad tüüpi süsteemid, muutumatu vaikimisi viited ja muutujad, turvalisem täisarvude käsitlemine, parem vigade käsitlemine standardsetes teekides ja palju muud rohkem.

Mida tähendab Rustile üleminek Androidi jaoks?

Google ütleb, et ta on viimase 18 kuu jooksul lisanud Androidi avatud lähtekoodiga projektile Rusti tuge. Kuid uue keele lisamine Androidi platvormile on tohutu ettevõtmine. Mõningaid tööriistaahelaid ja sõltuvusi tuleb hooldada, testimise infrastruktuuri ja tööriistu tuleb uuendada ning arendajaid koolitada.

Google'il on mõned varase kasutuselevõtu projektid, mida nad lähikuudel jagavad. Kuid isegi sel juhul tehakse selgeks, et Rusti toe skaleerimine suuremale osale operatsioonisüsteemist on mitmeaastane projekt.

Nagu näeme, kasutab Google juba mõnes kohas Rusti. Androidi uus Bluetoothi ​​pinu ümberkirjutamise koodinimega "Gabeldorsche" kirjutatakse Rustis. Töö Gabeldorschega algas umbes Android 11 ajal, kuid see pole siiani kasutusel. Androidi omad Võtmehoidla 2.0 moodul on kirjutatud Rust keeles, nagu ka Androidi IPC draiveri sideaine kasutajaruumi osa. Kuigi see pole Androidiga seotud, Fuksiaon uus netstack kirjutatakse ka Roostes.

Rakenduste arendajate jaoks ei muuda lüliti midagi selles, kuidas teie kui rakenduste arendaja rakendusi kirjutate või kuidas raamistiku API-d töötavad. See lüliti mõjutab ainult OS-i kirjutamist. Androidi arendajasuhete meeskonna liikme sõnul, Google ei plaani ka Rust NDK-d praegu välja anda. Rakenduste arendamise toetatud keeled on jätkuvalt Kotlin, Java, C ja C++.