Google kehittää Androidin osia Rustissa turvallisuuden parantamiseksi

click fraud protection

Google kirjoittaa ja kirjoittaa uudelleen osia Androidista Rustissa parantaakseen käyttöjärjestelmän turvallisuutta kokonaisuudessaan verrattuna C- ja C++-versioihin. Lue lisää saadaksesi lisätietoja!

Android täydellisenä käyttöjärjestelmäratkaisuna sisältää paljon liikkuvia osia. Hyvin laajasti ottaen nämä osat ovat sovellusekosysteemi ja sitten itse käyttöjärjestelmä. Kehittäjänä valitsemasi ohjelmointikieli vaihtelee sen mukaan, mitä Androidin osaa käytät. Sovellusten kehittäjille Java ja Kotlin ovat suosittuja vaihtoehtoja. Käyttöjärjestelmän ja sen alempien tasojen parissa työskenteleville kehittäjille C ja C++ ovat olleet suosittuja valintoja toistaiseksi. Tänään Google lisää kolmannen vaihtoehdon käyttöjärjestelmän kehittäjille, koska Android Open Source Project tukee nyt Rust-ohjelmointikieltä itse käyttöjärjestelmän kehittämiseen.

C: n ja C++:n rajoitukset

Android-käyttöjärjestelmän alemmat tasot vaativat järjestelmän ohjelmointikieliä, kuten C ja C++. Nämä kielet tarjoavat kehittäjille hallinnan ja ennustettavuuden, mikä on tärkeää käytettäessä matalan tason järjestelmäresursseja ja laitteistoja.

Valitettavasti C ja C++ eivät tarjoa muistin turvallisuustakuita, mikä tekee niistä alttiita virheille ja tietoturva-aukkoja. Kehittäjä on vastuussa muistin käyttöiän hallinnasta näillä kielillä, mutta monimutkaisissa ja monisäikeisissä koodikannoissa se on helpommin sanottu kuin tehty.

C ja C++ muodostavat yhdessä kymmeniä miljoonia koodirivejä Android-alustalla. Näistä muistin turvavirheistä tulee vaikeimmin korjattava koodivirheiden lähde, ja ne edustavat noin 70 % Androidin vakavista tietoturva-aukoista. Pelkkä näiden virheiden korjaaminen ei riitä ongelman ratkaisemiseen, ja parempi lähestymistapa olisi estää ne.

Muistin turvallisuuden puute pakottaa kehittäjät ajamaan Android-prosesseja tiukasti rajoitetuissa ja etuoikeutetuissa hiekkalaatikoissa. Mutta hiekkalaatikot ovat kalliita resursseille, kuluttavat lisäkustannuksia ja aiheuttavat latenssia. Sandboxing ei myöskään poista koodin haavoittuvuuksia kokonaan, ja sen tehokkuus on heikentynyt suuren virhetiheyden vuoksi, mikä antaa hyökkääjille mahdollisuuden ketjuttaa useita haavoittuvuuksia.

Toinen rajoitus, vaikka se ei ole ainutlaatuinen C: lle ja C++:lle, mutta soveltuu kaikkiin muistin turvallisuusongelmiin, on, että virheellinen tila on itse asiassa laukaistava instrumentoidussa koodissa, jotta se voidaan havaita. Joten vaikka koodisi on testattu erinomaisesti, todellinen bugi voi jäädä huomaamatta. Ja kun vikoja löytyy, niiden korjaaminen on toinen tehtävä, joka sisältää pitkän ja kalliin prosessin, joka ei välttämättä aina johda oikeaan korjaukseen. Siten virheiden havaitsemisesta tulee epäluotettavaa, ja vikojen ehkäisy on parempi lähestymistapa näiden rajoitusten valossa.

Tässä tulee kuvaan vaihto muistia turvalliseen kieleen, kuten Rust.

Ruoste ja sen edut

Rust takaa muistin turvallisuuden käyttämällä käännösaikatarkistuksia objektien käyttöiän/omistussuhteen pakottamiseksi ja ajonaikaisia ​​tarkistuksia varmistaakseen, että muistin käyttöoikeudet ovat kelvollisia. Tämä turvallisuus saavutetaan samalla, kun se tarjoaa C- ja C++-ominaisuuksia vastaavan suorituskyvyn. Ruoste vähentää myös hiekkalaatikon tarvetta, mikä antaa kehittäjille enemmän tilaa ottaa käyttöön uusia ominaisuuksia, jotka ovat turvallisempia ja resursseja kevyempiä.

Vaikka Rustilla todellakin on etunsa, ei ole mahdollista vaihtaa koko Android-käyttöjärjestelmää Rustiin yössä. Ja sitä ei ehkä edes tarvita, koska suurin osa Androidin muistivirheistä esiintyy uudessa tai äskettäin muokatussa koodissa, ja noin 50 % on alle vuoden vanhoja. Google uskoo, että sen muistia säästävä kieli pyrkii parhaiten keskittymään uuteen kehitykseen kypsän C- ja C++-koodin kirjoittamisen sijaan.

Rust keskittyy myös virheiden estämiseen sen sijaan, että nojattaisiin voimakkaasti vikojen havaitsemiseen, mikä parantaa koodin oikeellisuutta. Siinä on useita keskeisiä ominaisuuksia, kuten muistin turvallisuus, tietojen samanaikaisuus, ilmeisemmät järjestelmät, muuttumaton viittaukset ja muuttujat oletuksena, turvallisempi kokonaislukujen käsittely, parempi virheiden käsittely standardikirjastoissa ja paljon muuta lisää.

Mitä ruosteen vaihtaminen tarkoittaa Androidille?

Google sanoo, että se on lisännyt Rust-tukea Android Open Source Projectiin viimeisten 18 kuukauden aikana. Mutta uuden kielen lisääminen Android-alustalle on valtava hanke. Joitakin työkaluketjuja ja riippuvuuksia on ylläpidettävä, testiinfrastruktuuria ja työkaluja on päivitettävä ja kehittäjiä on koulutettava.

Googlella on muutamia varhaisen käyttöönoton projekteja, jotka he jakavat tulevina kuukausina. Siitä huolimatta tehdään selväksi, että Rust-tuen skaalaaminen useampaan käyttöjärjestelmään on monivuotinen projekti.

Sen mukaan, mitä voimme nähdä, Google käyttää jo ruostetta joissakin paikoissa. Androidin uusi Bluetooth-pino uudelleenkirjoituskoodinimeltään "Gabeldorsche"kirjoitetaan Rustilla. Gabeldorsche-työ aloitettiin Android 11:n aikoihin, mutta se ei ole vielä käytössä. Androidin Keystore 2.0 moduuli on kirjoitettu rustilla, samoin kuin binderin, Androidin IPC-ohjaimen, userspace-osa. Vaikka se ei liity Androidiin, fuksiaon uusi verkkopino on myös kirjoitettu ruosteella.

Sovelluskehittäjille kytkin ei muuta mitään siihen, miten sinä sovelluskehittäjänä kirjoitat sovelluksia tai kuinka kehyssovellusliittymät toimivat. Tämä kytkin vaikuttaa vain siihen, miten käyttöjärjestelmä on kirjoitettu. Android Developer Relations -tiimin jäsenen mukaan, Google ei myöskään aio julkaista Rust NDK: ta tällä hetkellä. Sovellusten kehittämisen tuetut kielet ovat jatkossakin Kotlin, Java, C ja C++.