Google dezvoltă părți din Android în Rust pentru a îmbunătăți securitatea

click fraud protection

Google scrie și rescrie părți din Android în Rust pentru a îmbunătăți securitatea sistemului de operare în ansamblu, comparativ cu C și C++. Citiți mai departe pentru a afla mai multe!

Android ca soluție completă de sistem de operare implică o mulțime de părți mobile. În linii mari, aceste părți sunt ecosistemul aplicației și apoi sistemul de operare însuși. În calitate de dezvoltator, limbajul de programare pe care îl alegeți variază în funcție de partea de Android la care lucrați. Pentru dezvoltatorii de aplicații, Java și Kotlin sunt opțiuni populare. Pentru dezvoltatorii care lucrează la sistemul de operare și la nivelurile inferioare din cadrul acestuia, C și C++ au fost alegeri populare până acum. Astăzi, Google adaugă o a treia opțiune pentru dezvoltatorii de sisteme de operare, deoarece Android Open Source Project acceptă acum limbajul de programare Rust pentru dezvoltarea sistemului de operare în sine.

Limitări ale C și C++

Nivelurile inferioare ale sistemului de operare Android necesită limbaje de programare precum C și C++. Aceste limbaje oferă dezvoltatorilor control și predictibilitate, ceea ce este important atunci când accesează resurse și hardware de sistem de nivel scăzut.

Din păcate, C și C++ nu reușesc să ofere garanții de siguranță a memoriei, făcându-le predispuse la erori și vulnerabilități de securitate. Dezvoltatorul este responsabil pentru gestionarea duratei de viață a memoriei în aceste limbi, dar în baze de cod complexe și cu mai multe fire, acest lucru este mai ușor de spus decât de făcut.

C și C++ împreună constituie zeci de milioane de linii de cod pe platforma Android. Aceste erori de siguranță ale memoriei devin cea mai dificilă sursă de incorectitudine a codului, reprezentând ~70% din vulnerabilitățile de securitate de mare severitate ale Android. Simpla remediere a acestor erori devine insuficientă pentru a rezolva problema și o abordare mai bună ar fi să le preveniți în primul rând.

Lipsa garanțiilor de siguranță a memoriei obligă dezvoltatorii să ruleze procese Android în sandbox-uri strâns constrânse și neprivilegiate. Dar sandbox-urile sunt costisitoare din punct de vedere al resurselor, consumând cheltuieli generale suplimentare și introducând latență. Sandboxing-ul nu elimină în totalitate vulnerabilitățile codului, iar eficacitatea acestuia este redusă din cauza densității mari de erori, permițând atacatorilor să înlănțuiască mai multe vulnerabilități.

O altă limitare, deși nu este unică pentru C și C++, dar se aplică tuturor problemelor de siguranță a memoriei, este aceea că starea eronată trebuie de fapt declanșată în codul instrumentat pentru a fi detectată. Deci, chiar dacă codul dvs. are o testare excelentă, eroarea reală poate rămâne nedetectată. Și când sunt găsite erori, remedierea lor este o altă sarcină, care implică un proces lung și costisitor care nu poate duce întotdeauna la o remediere corectă. Astfel, detectarea erorilor devine nesigură, iar prevenirea erorilor este cea mai bună abordare de luat în lumina acestor limitări.

Aici intervine trecerea la un limbaj sigur pentru memorie precum Rust.

Rugina și beneficiile sale

Rust oferă garanții de siguranță a memoriei prin utilizarea unei combinații de verificări în timp de compilare pentru a impune durata de viață/proprietate a obiectului și verificări de rulare pentru a se asigura că accesările la memorie sunt valide. Această siguranță se realizează în același timp oferind performanțe echivalente cu C și C++. Rust reduce, de asemenea, nevoia de sandboxing, permițând dezvoltatorilor mai mult spațiu pentru a introduce noi funcții care sunt mai sigure și mai ușoare pentru resurse.

Deși Rust are într-adevăr beneficiile sale, nu este fezabil să comutați întregul sistem de operare Android la Rust peste noapte. Și s-ar putea să nu fie nevoie nici măcar, deoarece majoritatea erorilor de memorie ale Android apar în coduri noi sau modificate recent, aproximativ 50% având mai puțin de un an. Google consideră că eforturile sale de limbaj sigure pentru memorie se concentrează cel mai bine pe noile dezvoltări, mai degrabă decât pe rescrierea codului C și C++ matur.

Rust se concentrează, de asemenea, pe prevenirea erorilor, mai degrabă decât să se sprijine în mare măsură pe detectarea erorilor, ceea ce duce la o corectitudine îmbunătățită a codului. Are mai multe caracteristici cheie, cum ar fi siguranța memoriei, concurența datelor, sisteme de tip mai expresive, imuabile referințe și variabile în mod implicit, o gestionare mai sigură a numărului întreg, o mai bună gestionare a erorilor în bibliotecile standard și multe altele Mai mult.

Ce înseamnă trecerea la Rust pentru Android?

Google spune că a adăugat suport Rust la Proiectul Android Open Source în ultimele 18 luni. Dar adăugarea unei noi limbi pe platforma Android este o întreprindere enormă. Unele lanțuri de instrumente și dependențe trebuie menținute, infrastructura de testare și instrumentele trebuie actualizate, iar dezvoltatorii trebuie instruiți.

Google are câteva proiecte primitoare pe care le vor împărtăși în lunile următoare. Dar chiar și așa, este clar că scalarea suportului Rust la mai mult din sistemul de operare este un proiect de mai mulți ani.

Din câte putem vedea, Google folosește deja Rust în câteva locuri. Noua stivă Bluetooth de la Android, cu numele de cod „Gabeldorsche" este scris în Rust. Lucrările au început la Gabeldorsche în jurul perioadei Android 11, dar încă nu sunt utilizate încă. Android Keystore 2.0 modulul este scris în Rust, la fel și porțiunea spațiului utilizator din binder, driverul IPC al Android. Deși nu are legătură cu Android, Fucsiee nou netstack este scris și în Rust.

Pentru dezvoltatorii de aplicații, comutatorul nu schimbă nimic în ceea ce privește modul în care, în calitate de dezvoltator de aplicații, scrieți aplicații sau modul în care funcționează API-urile cadru. Acest comutator afectează doar modul în care este scris sistemul de operare. Potrivit unui membru al echipei de Relații cu dezvoltatorii Android, Google nu intenționează să lanseze un Rust NDK momentan. Limbile acceptate pentru dezvoltarea aplicațiilor vor continua să fie Kotlin, Java, C și C++.