Gli ingegneri di Google hanno presentato i primi risultati dell'integrazione del supporto allo sviluppo in linguaggio Rust nella piattaforma Android. In Android 13, circa il 21% del nuovo codice compilabile aggiunto è scritto in Rust, mentre il 79% è in C/C++. Nel repository AOSP (Android Open Source Project), dove vengono sviluppati i sorgenti della piattaforma Android, ci sono circa 1,5 milioni di righe di codice in Rust, relative a nuovi componenti come il negozio di chiavi crittografiche Keystore2, lo stack per i chip UWB (Ultra-Wideband), l'implementazione del protocollo DNS-over-HTTP3, il framework di virtualizzazione AVF (Android Virtualization Framework), e stack sperimentali per Bluetooth e Wi-Fi.

In conformità con la strategia precedentemente adottata per ridurre il rischio di vulnerabilità causate da errori nella gestione della memoria, il linguaggio Rust è attualmente utilizzato principalmente per lo sviluppo di nuovo codice e per un graduale rafforzamento della sicurezza dei componenti software più vulnerabili e critici. Non si prefigge l'obiettivo generale di migrare l'intera piattaforma a Rust e il codice legacy rimane in C/C++, mentre la correzione degli errori avviene attraverso l'uso di test di fuzzing, analisi statica e l'implementazione di tecniche come l'uso del tipo MiraclePtr (un wrapper sopra i puntatori raw, che esegue controlli aggiuntivi sull'accesso a aree di memoria liberate), il sistema di allocazione della memoria Scudo (una sostituzione sicura di malloc/free) e meccanismi di identificazione degli errori nella gestione della memoria HWAsan (Hardware-assisted AddressSanitizer), GWP-ASAN e KFENCE.
Per quanto riguarda le statistiche sulle vulnerabilità nella piattaforma Android, si osserva che con la riduzione del nuovo codice che gestisce in modo insicuro la memoria, c'è anche una diminuzione del numero di vulnerabilità causate da errori nella gestione della memoria. Ad esempio, la quota di vulnerabilità dovute a problemi con la memoria è scesa dal 76% nel 2019 al 35% nel 2022. In termini assoluti, nel 2019 sono state identificate 223 vulnerabilità legate alla gestione della memoria, nel 2020 sono state 150, nel 2021 100 e nel 2022 85 (tutte le vulnerabilità segnalate si trovano nel codice in C/C++, mentre nel codice in Rust finora non sono stati trovati problemi simili). Il 2022 è stato il primo anno in cui le vulnerabilità legate alla memoria hanno smesso di essere predominanti.

Poiché le vulnerabilità legate alla gestione della memoria sono generalmente le più pericolose, le statistiche indicano anche una diminuzione del numero di problemi critici e di quelli che possono essere sfruttati da remoto. Allo stesso tempo, la dinamica di rilevamento delle vulnerabilità non legate alla gestione della memoria è rimasta stabile negli ultimi 4 anni, con circa 20 vulnerabilità al mese. Anche la percentuale di problemi pericolosi tra le vulnerabilità causate da errori di gestione della memoria rimane costante (ma poiché il numero di tali vulnerabilità è in calo, sta diminuendo anche il numero di problemi pericolosi).

Nelle statistiche si osserva anche una correlazione tra il volume di nuovo codice, che lavora in modo non sicuro con la memoria, e il numero di vulnerabilità legate alla memoria (buffer overflow, accesso a memoria già liberata, ecc.). Questa osservazione conferma l'ipotesi che le tecniche di programmazione sicura dovrebbero concentrarsi principalmente sul nuovo codice, piuttosto che sulla riscrittura di quello esistente, poiché la maggior parte delle vulnerabilità identificate riguarda il nuovo codice.

Fonte: opennet.ru
