Sicurezza della memoria

Questa pagina descrive i bug e gli strumenti per la sicurezza della memoria.

Insicurezza della memoria

I bug di sicurezza della memoria, errori nella gestione della memoria nei linguaggi di programmazione nativi, sono il problema più comune 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 su qualità e stabilità e rappresentano una quota significativa degli arresti anomali osservati sui dispositivi degli utenti finali. Pertanto, un'elevata densità di bug di sicurezza della memoria è direttamente correlata a una scarsa esperienza utente.
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 crescente complessità del codice, se non vengono risolti, 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 sorgente di Android.
Queste tecnologie accelereranno il nostro percorso verso la sicurezza della memoria e aiuteranno il settore del software in generale ad affrontare un'area problematica chiave.

I bug di sicurezza della memoria influiscono negativamente sulla qualità

I bug latenti di sicurezza della memoria possono causare risultati non deterministici, a seconda dello stato del sistema. Questo comportamento imprevedibile causa 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, abbiamo ricondotto la maggior parte di questi a bug di sicurezza della memoria.
Questo punto dati convalida la correlazione tra qualità e densità dei bug di sicurezza della memoria ed è in linea con quanto osservato dai nostri colleghi di Chrome (vedi l'elenco dei bug più importanti di GWP-ASan di Chrome).

I bug di sicurezza della memoria influiscono negativamente sulla sicurezza

I bug di sicurezza della memoria sono sempre stati i principali responsabili delle vulnerabilità di sicurezza di Android, fin dalla prima release.

I bug di sicurezza della memoria influiscono negativamente
  sulla sicurezza.

Figura 2. Contributo dei bug di sicurezza della memoria alle vulnerabilità di Android.

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

I bug di sicurezza della memoria aumentano i costi

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

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

Ricerche dimostrano che il rilevamento dei bug in una fase iniziale 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 superiori.

Sicurezza della memoria

Android 12 e versioni successive includono modifiche sistemiche per ridurre la densità di bug di sicurezza della memoria nei codebase Android. Stiamo estendendo gli strumenti di sicurezza della memoria di Android e introducendo nuovi requisiti che incoraggiano il nostro ecosistema ad affrontare questa categoria di bug. Nel tempo, questi dovrebbero tradursi in una qualità superiore e una maggiore sicurezza per i nostri utenti e in costi inferiori per i nostri fornitori.

La sicurezza della memoria diventerà probabilmente un elemento distintivo per la qualità e la sicurezza nei prossimi anni e Android prevede di fare da apripista.

Requisiti a supporto della sicurezza della memoria

Il Compatibility Definition Document (CDD) di Android consiglia vivamente l'utilizzo di strumenti di sicurezza della memoria durante lo sviluppo.

Stiamo collaborando a stretto contatto con il nostro ecosistema per aumentare l'utilizzo di strumenti di sicurezza della memoria e integrarli nei processi di integrazione continua e test.

Nel tempo, vorremmo assicurarci che ogni dispositivo superi un test completo Compatibility Test Suite (CTS), utilizzando strumenti di sicurezza della memoria, che dimostri che non sono stati trovati bug di questo tipo. Ad esempio, le piattaforme Arm v9 dovranno fornire un'esecuzione CTS con il tagging della memoria abilitato, mentre alle piattaforme Arm v8 verrà richiesto di fornire un'esecuzione CTS utilizzando HWASAN e KASAN.

Rust come nuovo linguaggio di programmazione per il codice della piattaforma

Android 12 ha introdotto Rust come linguaggio della piattaforma. Rust offre 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, riscrivere in Rust tutto il codice non sicuro per la memoria, che attualmente rappresenta oltre il 70% del codice della piattaforma Android, non è fattibile. In futuro, Rust sarà complementare agli strumenti di sicurezza della memoria.

Strumenti per la sicurezza della memoria

Android supporta un'ampia 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 di 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 e target di deployment. La documentazione in questa sezione descrive ogni strumento e fornisce un riferimento per l'utilizzo nei tuoi prodotti.