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 nelle basi di codice Android. Rappresentano oltre il 60% delle vulnerabilità di sicurezza ad alta gravità e milioni di arresti anomali visibili agli utenti.

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

I bug sulla sicurezza della memoria influiscono negativamente sulla qualità e sulla stabilità e rappresentano una quota significativa dei crash osservati sui dispositivi degli utenti finali. Pertanto un'elevata 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 applicazioni Play Store.
Data la crescente complessità del codice, se lasciato incustodito, 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 tali 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 Arm Memory Tagging e abbiamo introdotto Rust nel codice base di Android.
Queste tecnologie accelereranno il nostro percorso verso la sicurezza della memoria e aiuteranno l’industria del software in generale ad affrontare un’area problematica chiave.

I bug di sicurezza della memoria influiscono negativamente sulla qualità

I bug di sicurezza della memoria latente possono causare risultati non deterministici, a seconda dello stato del sistema. Questo comportamento imprevedibile porta a arresti anomali e fastidi ai nostri utenti.

Ogni giorno osserviamo milioni di arresti anomali nativi dei dispositivi degli utenti finali e, con l'introduzione di GWP-ASan , abbiamo ricondotto la maggior parte di essi 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 ciò che osservano i nostri colleghi di Chrome (vedi hotlist dei bug GWP-ASan di Chrome).

I bug di sicurezza della memoria influiscono negativamente sulla sicurezza

I bug sulla sicurezza della memoria sono stati costantemente il principale fattore che ha contribuito alle vulnerabilità della sicurezza Android, fin dalla prima versione di Android.

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

Anche se è incoraggiante sapere che questo non è solo un problema Android (vedi statistiche Chrome e Microsoft ), dobbiamo fare di più per la sicurezza dei nostri utenti.
Il team Project Zero di Google tiene traccia degli exploit zero day che sono stati 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 sulla sicurezza della memoria (corruzione della memoria e use-after-free) costituiscono la stragrande maggioranza.

I bug sulla sicurezza della memoria aumentano i costi

Mantenere i dispositivi aggiornati con le soluzioni di sicurezza mantiene i nostri utenti al sicuro, 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 tempestivo di questi bug durante il ciclo di sviluppo può ridurre questi costi.

La ricerca mostra che il rilevamento tempestivo dei bug può ridurre i costi fino a sei volte. Tuttavia, data la complessità del nostro ecosistema, il numero medio di basi di codice gestite 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 sistemiche per ridurre la densità dei bug di sicurezza della memoria nei codebase Android. Stiamo estendendo gli strumenti di sicurezza della memoria Android e introducendo nuovi requisiti che incoraggiano il nostro ecosistema ad affrontare questa categoria di bug. Nel corso del tempo, ciò dovrebbe tradursi in una qualità più elevata e in una maggiore sicurezza per i nostri utenti e in una riduzione dei costi per i nostri fornitori.

È probabile che la sicurezza della memoria diventi un elemento di differenziazione in termini di qualità e sicurezza nei prossimi anni e Android prevede di aprire la strada.

Requisiti a supporto della sicurezza della memoria

Il documento CDD (Android Compatibility Definition ) consiglia vivamente l'uso di strumenti di sicurezza della memoria durante lo sviluppo.
Stiamo lavorando a stretto contatto con il nostro ecosistema per aumentare l'uso degli strumenti di sicurezza della memoria e integrarli nei processi di integrazione e test continui.
Nel corso del tempo, vorremmo garantire che ciascun dispositivo superi un'esecuzione completa di test di compatibilità ( CTS ), utilizzando strumenti di sicurezza della memoria, che dimostrino che non è stato rilevato alcun bug di questo tipo. Ad esempio, alle piattaforme Arm v9 verrà richiesto di fornire un'esecuzione CTS con Memory Tagging 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 fornisce memoria e sicurezza dei thread a livelli di prestazioni simili a C/C++. Ci aspettiamo che Rust sia 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. Andando avanti Rust sarà complementare agli strumenti di sicurezza della memoria.

Strumenti per la sicurezza della memoria

Android supporta un'ampia varietà di strumenti che aiutano a rilevare i bug di sicurezza della memoria. La figura seguente presenta 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 Android

I nostri strumenti coprono una vasta gamma di scenari e obiettivi di implementazione. La documentazione seguente descrive ciascuno strumento e fornisce un riferimento per utilizzarli nei tuoi prodotti.