L'azienda Google ha riepilogato i risultati dell'iniziativa per l'implementazione di metodi di sviluppo sicuri (Safe Coding) in Android, come l'uso di linguaggi di programmazione che garantiscono un lavoro sicuro con la memoria, l'applicazione di analizzatori statici e la progettazione di API tenendo conto della sicurezza. Le modifiche hanno permesso di ridurre la quota di vulnerabilità legate alla memoria in Android dal 76% nel 2019 al 24% nel 2024, un valore significativamente inferiore alla media del settore, che è del 70%.
Gli ingegneri di Google hanno inoltre concluso che la principale fonte di problemi di sicurezza è il codice nuovo e quindi l'attenzione dovrebbe essere rivolta all'aggiornamento dei metodi di sviluppo di nuovo codice. Il codice già esistente diventa più testato e sicuro nel tempo (si osserva una dipendenza esponenziale della sicurezza dal tempo), il che rende meno redditizie le investizioni in progetti di riscrittura del codice esistente. Ad esempio, il codice di 5 anni presenta in media una densità di vulnerabilità 3,4 volte inferiore rispetto al nuovo codice. Per i progetti Android e Chromium, grazie all'implementazione di metodi lavorativi sicuri con la memoria, la differenza è di 7,4 volte.

Pertanto, se si prevengono errori nella gestione della memoria nel nuovo codice, nel tempo gli errori simili nel codice vecchio vengono identificati sempre meno frequentemente. In generale, Google consiglia di non riscrivere il codice vecchio, ma di concentrarsi sulla scrittura di nuovo codice in linguaggi che lavorano con la memoria in modo sicuro e sulla garanzia della portabilità tra il nuovo e il vecchio codice.
Oltre a ridurre il numero di vulnerabilità, l'uso di metodi di programmazione sicuri aumenta la produttività dello sviluppo, consente di ottenere una qualità del codice superiore e ha un impatto positivo sulle performance. Ad esempio, la riscrittura in Chromium del codice per generare codici QR in linguaggio Rust ha permesso di ottenere un aumento delle performance del 95% grazie all'eliminazione dei sovraccarichi derivati dalla necessità di applicare ulteriori misure di isolamento sandbox.
La velocità e la qualità dello sviluppo aumentano grazie alla semplificazione dei test e al trasferimento della rilevazione degli errori nelle fasi iniziali dello sviluppo, in cui gli errori diventano evidenti ancor prima che lo sviluppatore inizi la revisione del codice. Come esempio, si citano le metriche di rollback delle modifiche: per il codice Rust, il numero di rollback a causa di errori imprevisti è due volte inferiore rispetto al codice C++.
In generale, l'adozione di pratiche di programmazione sicure è presentata come la paradigma di sviluppo più efficace al giorno d'oggi, che ha sostituito i tre approcci precedentemente utilizzati:
- Correzione delle vulnerabilità dopo la loro scoperta. Costoso, richiede frequenti aggiornamenti e la loro immediata diffusione agli utenti.
- Protezione proattiva, incentrata sull'impiego di tecniche che complicano l'utilizzo delle vulnerabilità. Il prezzo di tale protezione è stata la diminuzione delle prestazioni e un continuo gioco del gatto e del topo con gli attaccanti.
- Rilevamento precoce delle vulnerabilità attraverso l'uso di fuzzing e strumenti simili a AddressSanitizer e MemorySanitizer. Questo metodo eliminava solo i sintomi e non la causa del problema, e richiedeva un lavoro costante.


Fonte: opennet.ru
