Inginerii de la Google au prezentat primele rezultate ale integrării suportului pentru dezvoltarea în limbajul Rust pe platforma Android. În Android 13, aproximativ 21% din noul cod compilabil adăugat este scris în Rust, iar 79% în C/C++. În depozitul AOSP (Android Open Source Project), care dezvoltă codul sursă al platformei Android, există aproximativ 1,5 milioane de linii de cod în Rust, legate de noi componente precum stocarea cheilor criptografice Keystore2, stiva pentru cipurile UWB (Ultra-Wideband), implementarea protocolului DNS-over-HTTP3, cadrul de virtualizare AVF (Android Virtualization Framework) și stive experimentale pentru Bluetooth și Wi-Fi.

În conformitate cu strategia anterior adoptată de reducere a riscurilor de apariție a vulnerabilităților cauzate de erori în gestionarea memoriei, limbajul Rust este utilizat în principal pentru dezvoltarea de nou cod și pentru întărirea treptată a securității celor mai vulnerabile și critice componente software. Nu există un obiectiv general de a migra întreaga platformă pe Rust, iar codul vechi rămâne pe C/C++, iar combaterea erorilor din acesta se face prin aplicarea de teste fuzzing, analize statice și tehnici de dezvoltare, precum utilizarea tipului MiraclePtr (o învăluire peste pointerii raw care efectuează verificări suplimentare pentru accesările zonelor de memorie eliberate), sistemului de distribuție a memoriei Scudo (o înlocuire sigură pentru malloc/free) și mecanismele de detectare a erorilor de gestionare a memoriei HWA-san (Hardware-assisted AddressSanitizer), GWP-ASAN și KFENCE.
În ceea ce privește statisticile referitoare la natura vulnerabilităților în platforma Android, se observă că pe măsură ce se reduce noul cod care lucrează nesigur cu memoria, se constată și o scădere a numărului de vulnerabilități cauzate de erori în gestionarea memoriei. De exemplu, proporția vulnerabilităților cauzate de problemele de memorie a scăzut de la 76% în 2019 la 35% în 2022. În numere absolute, în 2019 au fost identificate 223 de vulnerabilități legate de gestionarea memoriei, în 2020 - 150, în 2021 - 100, iar în 2022 - 85 (toate vulnerabilitățile notate fiind în codul scris în C/C++, iar în codul scris în Rust nu au fost găsite probleme similare). Anul 2022 a fost primul an în care vulnerabilitățile legate de memorie nu au mai fost dominante.

Deoarece vulnerabilitățile legate de gestionarea memoriei sunt de obicei cele mai periculoase, statisticile generale arată, de asemenea, o scădere a numărului de probleme critice și a problemelor care pot fi exploatate de la distanță. În același timp, dinamica depistării vulnerabilităților nelegate de gestionarea memoriei se menține constantă în ultimii 4 ani, la aproximativ 20 de vulnerabilități pe lună. De asemenea, rămâne constantă și proporția problemelor periculoase în rândul vulnerabilităților cauzate de erori în gestionarea memoriei (însă, pe măsură ce numărul acestor vulnerabilități scade, scade și numărul problemelor periculoase).

Statisticile urmăresc, de asemenea, o corelație între volumul de nou cod nesigur care lucrează cu memoria și numărul vulnerabilităților legate de memorie (supraîncărcări de buffer, accesarea memoriei deja eliberate etc.). Această observație confirmă presupunerea că principala atenție în implementarea tehnicilor de programare sigură ar trebui să se concentreze pe noul cod și nu pe rescrierea celui existent, deoarece cea mai mare parte a vulnerabilităților identificate provine din codul nou.

Sursa: opennet.ro
