Rust sisältyy Android-alustan kehittämisen tärkeimpiin kieliin

Google on ilmoittanut sisällyttävänsä Rust-ohjelmointikielen niiden kielten joukkoon, jotka sallitaan Android-alustan kehittämisessä. Rust-kielen kääntäjä sisällytettiin Android-lähdepuuhun vuonna 2019, mutta tämän kielen tuki jäi kokeelliseksi. Jotkut ensimmäisistä Androidille suunnitelluista Rust-komponenteista sisältävät Binder-prosessien välisen viestintämekanismin ja Bluetooth-pinon uudet toteutukset.

Rustin käyttöönotto toteutettiin osana projektia, jonka tavoitteena on vahvistaa turvallisuutta, edistää turvallisia ohjelmointitekniikoita ja tehostaa ongelmien tunnistamista käytettäessä muistia Androidissa. On huomattava, että noin 70 % kaikista Androidissa tunnistetuista vaarallisista haavoittuvuuksista johtuu muistin kanssa työskentelyn virheistä. Muistin turvallisuuteen ja automaattiseen muistinhallintaan keskittyvän Rustin käyttäminen vähentää muistivirheiden, kuten vapaan käytön ja puskurin ylitysten, aiheuttamien haavoittuvuuksien riskiä.

Rust varmistaa muistin turvallisuuden käännöshetkellä viitteiden tarkistuksen, objektin omistajuuden ja objektin eliniän seurannan (scopes) avulla sekä arvioimalla muistin käytön oikeellisuutta ajon aikana. Rust tarjoaa myös suojan kokonaislukujen ylivuodoilta, vaatii muuttujien arvojen alustamisen ennen käyttöä, sillä on parempi virheiden käsittely standardikirjastossa, se käyttää oletuksena muuttumattomien viittausten ja muuttujien käsitettä ja tarjoaa vahvan staattisen kirjoittamisen loogisten virheiden minimoimiseksi.

Androidissa muistisuojaus tarjotaan jo tuetuilla kielillä Kotlin ja Java, mutta ne eivät sovellu järjestelmäkomponenttien kehittämiseen korkean ylikuormituksen vuoksi. Rust mahdollistaa suorituskyvyn saavuttamisen lähellä C- ja C++-kieliä, jolloin sitä voidaan käyttää alustan matalan tason osien ja laitteiston kanssa vuorovaikutuksessa olevien komponenttien kehittämiseen.

C- ja C++-koodien turvallisuuden varmistamiseksi Android käyttää hiekkalaatikon eristämistä, staattista analyysiä ja sumeaa testausta. Hiekkalaatikon eristyksen mahdollisuudet ovat rajalliset ja saavuttaneet kykyjensä rajan (lisähajotus prosesseihin on epäkäytännöllistä resurssien kulutuksen kannalta). Hiekkalaatikon käytön rajoituksia ovat suuret yleiskustannukset ja lisääntynyt muistin kulutus, joka johtuu tarpeesta luoda uusia prosesseja, sekä IPC:n käyttöön liittyvät lisäviiveet.

Samaan aikaan hiekkalaatikko ei poista koodin haavoittuvuuksia, vaan vain vähentää riskejä ja vaikeuttaa hyökkäystä, koska hyväksikäyttö edellyttää yhden, vaan useamman haavoittuvuuden tunnistamista. Kooditestaukseen perustuvat menetelmät ovat rajallisia siinä mielessä, että virheiden tunnistamiseksi on luotava olosuhteet ongelman ilmenemiselle. Kaikkia mahdollisia vaihtoehtoja ei ole mahdollista kattaa, joten monet virheet jäävät huomaamatta.

Androidin järjestelmäprosesseissa Google noudattaa "kahden sääntöä", jonka mukaan minkä tahansa lisätyn koodin tulee täyttää enintään kaksi kolmesta ehdosta: validoimattomien syöttötietojen käyttäminen, vaarallisen ohjelmointikielen (C/C++) käyttö ja toimii ilman tiukkaa hiekkalaatikkoeristystä (jolla on korkeammat oikeudet). Tämä sääntö tarkoittaa, että ulkoisten tietojen käsittelyyn käytettävä koodi on joko rajoitettava vähimmäisoikeuksiin (eristetty) tai kirjoitettava turvallisella ohjelmointikielellä.

Google ei pyri kirjoittamaan uudelleen olemassa olevaa C/C++-koodia Rustissa, mutta aikoo käyttää tätä kieltä uuden koodin kehittämiseen. On järkevää käyttää Rustia uudelle koodille, koska tilastollisesti useimmat virheet näkyvät uudessa tai äskettäin muutetussa koodissa. Erityisesti noin 50 % Androidissa havaituista muistivirheistä havaitaan alle vuosi sitten kirjoitetussa koodissa.

Rust sisältyy Android-alustan kehittämisen tärkeimpiin kieliin


Lähde: opennet.ru

Lisää kommentti