Compania Google a anunțat includerea limbajului de programare Rust printre limbajele permise pentru dezvoltarea platformei Android. Compilatorul limbajului Rust a fost inclus în arborele de cod sursă Android încă din 2019, însă suportul pentru acest limbaj a rămas experimental. Printre primele componente Rust care vor fi livrate pe Android se numără noile implementări ale mecanismului de comunicare interproces Binder și a stivei Bluetooth.
Implementarea Rust a fost realizată în cadrul unui proiect destinat consolidării securității, promovării practicilor de programare sigură și creșterii eficienței identificării problemelor legate de memorie în Android. Se menționează că aproximativ 70% din toate vulnerabilitățile critice identificate în Android sunt cauzate de erori în gestionarea memoriei. Utilizarea limbajului Rust, care se concentrează pe gestionarea sigură a memoriei și oferă gestionare automată a memoriei, va reduce riscul apariției vulnerabilităților cauzate de erorile de memorie, cum ar fi accesarea unei zone de memorie după eliberare și depășirea limitelor unui buffer.
Gestionarea sigură a memoriei este asigurată în Rust în timpul compilării prin verificarea referințelor, urmărirea proprietății obiectelor și gestionarea duratei de viață a obiectelor (scopul), precum și prin evaluarea corectitudinii accesului la memorie în timpul execuției codului. Rust oferă de asemenea instrumente pentru protecția împotriva depășirii capacității întregilor, necesită inițializarea obligatorie a valorilor variabilelor înainte de utilizare, gestionează mai bine erorile în biblioteca standard, aplică conceptul de referințe și variabile imuabile (immutable) prin default și oferă o tipizare statică puternică pentru a minimiza erorile logice.
În Android, gestionarea sigură a memoriei este asigurată în limbajele deja acceptate Kotlin și Java, dar acestea nu sunt potrivite pentru dezvoltarea componentelor de sistem din cauza unor costuri de suprasarcină mari. Rust oferă posibilitatea de a obține performanțe apropiate de cele ale limbajelor C și C++, ceea ce îl face utilizabil pentru dezvoltarea părților de bază ale platformei și componentelor pentru interacțiunea cu hardware-ul.
Pentru asigurarea securității codului în C și C++ pe Android se aplică izolarea sandbox, analiza statică și testarea fuzzing. Capacitățile de izolare sandbox sunt limitate și au atins limitele lor (o fragmentare suplimentară în procese nu este rațională din punctul de vedere al consumului de resurse). Printre restricțiile aplicării sandbox se numără costurile mari asociate și creșterea consumului de memorie cauzate de necesitatea de a genera procese noi, precum și apariția întârzierilor suplimentare legate de utilizarea IPC.
În acest context, sandboxul nu elimină vulnerabilitățile din cod, ci doar reduce riscurile și complică execuția unui atac, deoarece pentru exploatare este necesară identificarea nu a unei singure, ci a mai multor vulnerabilități. Metodele bazate pe testarea codului sunt limitate de faptul că pentru a descoperi erorile este necesară crearea unor condiții care să manifeste problema. Acoperirea tuturor posibilelor variante nu este fezabilă, așa că multe erori rămân neobservate.
Pentru procesele de sistem în Android, compania Google respectă „regula celor două”, conform căreia orice cod adăugat nu trebuie să fie supus decât la două condiții din trei: lucrul cu date de intrare nesigure, utilizarea unui limbaj de programare nesigur (C/C++) și executarea fără izolare sandbox strictă (prezența privilegiilor crescute). Din această regulă reiese că codul pentru procesarea datelor externe trebuie fie să fie redus la privilegii minime (izolat), fie să fie scris într-un limbaj de programare sigur.
Google nu își propune să rescrie codul existent C/C++ în Rust, ci intenționează să utilizeze acest limbaj pentru dezvoltarea de nou cod. Utilizarea Rust pentru nou cod este justificată, deoarece statisticile arată că majoritatea erorilor apar în codul nou sau recent modificat. În special, aproximativ 50% din erorile de gestionare a memoriei în Android sunt identificate în codul scris în ultimul an.

Sursa: opennet.ro
