Sicurezza memoria

Insicurezza della memoria

I bug di sicurezza della memoria, gli errori nella gestione della memoria nei linguaggi di programmazione nativi, sono i problemi più comuni nei codebase Android. Rappresentano oltre il 60% delle vulnerabilità di sicurezza di gravità elevata e milioni di arresti anomali visibili agli utenti.

 I bug di sicurezza della memoria influiscono sull'esperienza utente, sui costi e sulla sicurezza.
Figura 1: bug di sicurezza della memoria e il loro impatto negativo su qualità, sicurezza e costi

I bug di sicurezza della memoria influiscono negativamente sulla qualità e sulla stabilità e rappresentano una quota significativa degli arresti anomali osservati sui dispositivi degli utenti finali. Pertanto, un'alta densità di bug di sicurezza della memoria è direttamente correlata a un'esperienza utente scadente.
Il codice nativo, scritto in linguaggi non sicuri per la memoria come C, C++ e Assembly, rappresenta oltre il 70% del codice della piattaforma Android ed è presente in circa il 50% delle app del Google Play Store.
Data la complessità sempre crescente del codice, se non vengono controllati, i bug di sicurezza della memoria aumenteranno nel tempo. Pertanto, fornire al nostro ecosistema gli strumenti e le tecnologie in grado di rilevare e mitigare questi bug è fondamentale per il nostro successo a lungo termine.
Negli ultimi anni, abbiamo lavorato a stretto contatto con i nostri partner hardware per sviluppare tecnologie hardware come il tagging della memoria Arm e abbiamo introdotto Rust nel codice di base di Android.
Queste tecnologie accelereranno il nostro percorso verso la sicurezza della memoria e aiuteranno l'intero settore del software a risolvere un'area di problemi chiave.

I bug di sicurezza della memoria influiscono negativamente sulla qualità

I bug latenti relativi alla sicurezza della memoria possono causare risultati non deterministici, a seconda dello stato del sistema. Questo comportamento imprevedibile genera arresti anomali e fastidio per i nostri utenti.

Ogni giorno osserviamo milioni di arresti anomali nativi dai dispositivi degli utenti finali e, con l'introduzione di GWP-ASan, ne abbiamo tracciati la maggior parte fino a bug di sicurezza della memoria.
Questo punto dati convalida la correlazione tra qualità e densità di bug di sicurezza della memoria ed è in linea con quanto osservato dai nostri colleghi di Chrome (vedi hotlist dei bug GWP-ASan di Chrome).

I bug di sicurezza della memoria influiscono negativamente sulla sicurezza

I bug di sicurezza della memoria sono stati costantemente il principale fattore di vulnerabilità di sicurezza di Android, fin dalla prima release del sistema operativo.

I bug di sicurezza della memoria influiscono negativamente sulla sicurezza.
Figura 2: contributo dei bug di sicurezza della memoria alle vulnerabilità di Android

È incoraggiante sapere che non si tratta solo di un problema di Android (vedi le statistiche di Chrome e Microsoft), ma dobbiamo fare di più per la sicurezza dei nostri utenti.
Il team di Project Zero di Google monitora gli exploit zero-day che sono stati utilizzati in attacchi reali contro gli utenti come vulnerabilità zero-day. Non si tratta di bug ipotizzati, ma di exploit utilizzati attivamente negli attacchi contro gli utenti. I bug di sicurezza della memoria (corruzione della memoria e uso dopo svuotamento) rappresentano la stragrande maggioranza.

I bug di sicurezza della memoria aumentano i costi

Mantenere aggiornati i dispositivi con le correzioni di sicurezza garantisce la sicurezza dei nostri utenti, ma comporta un costo monetario per il nostro ecosistema.

L'elevata densità di bug di sicurezza della memoria nel codice fornitore di basso livello, che spesso prevede modifiche personalizzate, aumenta notevolmente i costi di correzione e test. Tuttavia, rilevare questi bug nelle prime fasi del ciclo di sviluppo può ridurre i costi.

La ricerca dimostra che il rilevamento precoce dei bug può ridurre i costi fino a sei volte. Tuttavia, data la complessità del nostro ecosistema, il numero medio di codebase gestiti da un fornitore e la complessità sempre crescente del software, i risparmi potrebbero essere maggiori.

Sicurezza della memoria

A partire da Android 12, abbiamo apportato modifiche sistematiche per ridurre la densità di bug di sicurezza della memoria nei codebase di Android. Stiamo estendendo gli strumenti di sicurezza della memoria di Android e introducendo nuovi requisiti che incoraggiano il nostro ecosistema a risolvere questa categoria di bug. Nel tempo, ciò dovrebbe portare a una maggiore qualità e a una maggiore sicurezza per i nostri utenti, nonché a costi inferiori per i nostri fornitori.

La sicurezza della memoria potrebbe diventare un elemento di differenziazione per la qualità e la sicurezza nei prossimi anni e Android intende fare da apripista.

Requisiti a supporto della sicurezza della memoria

Il Android Compatibility Definition Document (CDD) consiglia vivamente di utilizzare strumenti di sicurezza della memoria durante lo sviluppo.
Stiamo collaborando a stretto contatto con il nostro ecosistema per aumentare l'utilizzo degli strumenti di sicurezza della memoria e integrarli nei processi di test e integrazione continua.
Nel tempo, vorremmo assicurarci che ogni dispositivo superi un'esecuzione completa del Compatibility Test Suite (CTS), utilizzando strumenti di sicurezza della memoria, che dimostrino che non sono stati rilevati bug di questo tipo. Ad esempio, per le piattaforme Arm v9 sarà necessario eseguire un test CTS con il tagging della memoria abilitato, mentre per le piattaforme Arm v8 sarà necessario eseguire un test CTS utilizzando HWASAN e KASAN.

Rust come nuovo linguaggio di programmazione per il codice della piattaforma

Android 12 ha introdotto Rust come linguaggio di piattaforma. Rust garantisce la sicurezza della memoria e dei thread a livelli di prestazioni simili a C/C++. Prevediamo che Rust sarà la scelta preferita per la maggior parte dei nuovi progetti nativi. Tuttavia, non è fattibile riscrivere in Rust tutto il codice non sicuro per la memoria, che al momento rappresenta oltre il 70% del codice della piattaforma Android. In futuro, Rust sarà complementare agli strumenti di sicurezza della memoria.

Strumenti per la sicurezza della memoria

Android supporta una vasta gamma di strumenti che aiutano a rilevare i bug di sicurezza della memoria. La figura seguente mostra una tassonomia degli strumenti di sicurezza della memoria Android disponibili.

I bug di sicurezza della memoria influiscono negativamente sulla sicurezza.
Figura 3: panorama degli strumenti di sicurezza della memoria di Android

I nostri strumenti coprono una vasta gamma di scenari di implementazione e target. La seguente documentazione descrive tutti gli strumenti e fornisce un riferimento per il loro utilizzo nei tuoi prodotti.