Il Cybersecurity and Infrastructure Security Agency (CISA) degli Stati Uniti, insieme al Federal Bureau of Investigation (FBI) e alle loro controparti australiane e canadesi, ha pubblicato una ricerca che evidenzia l’importanza dell’utilizzo di codice di sicurezza di memoria nei progetti open source critici.
Il rapporto è un follow-up del documento “Case for Memory Safe Roadmaps” pubblicato a dicembre 2023, che mirava a sensibilizzare sull’importanza della sicurezza di memoria. La ricerca analizza 172 progetti open source critici e valuta la loro sicurezza in termini di gestione della memoria.
Cosa significa la sicurezza di memoria?
La sicurezza di memoria è un concetto che si riferisce all’utilizzo di linguaggi di programmazione progettati per prevenire errori comuni legati alla memoria, come il superamento del buffer, l’utilizzo dopo la liberazione e altre forme di corruzione della memoria. Questi linguaggi gestiscono automaticamente la memoria, eliminando la necessità per il programmatore di implementare meccanismi di allocazione e deallocazione della memoria sicuri.
Al contrario, i linguaggi di programmazione non sicuri in termini di memoria non forniscono meccanismi di gestione della memoria integrati, rendendo più probabile che si verifichino errori. Esempi di linguaggi di programmazione non sicuri in termini di memoria includono C, C++, Objective-C, Assembly, Cython e D.
Progetti open source critici con codice non sicuro
Il rapporto evidenzia che oltre la metà dei progetti open source critici analizzati contiene codice non sicuro in termini di memoria. I progetti open source critici più grandi sono sproporzionatamente scritti in linguaggi non sicuri in termini di memoria. Ad esempio, Linux ha un rapporto di codice non sicuro del 95%, Tor del 93%, Chromium del 51%, MySQL Server dell’84%, glibc dell’85%, Redis dell’85%, SystemD del 65% e Electron del 47%.
Sfide nello sviluppo di software
Gli sviluppatori di software devono affrontare diverse sfide che spesso li obbligano ad utilizzare linguaggi non sicuri in termini di memoria, come vincoli di risorse e requisiti di prestazioni. Questo è particolarmente vero quando si implementano funzionalità di basso livello come networking, crittografia e funzioni del sistema operativo.
Suggerimenti, soluzioni e best practice
Per affrontare il problema della sicurezza di memoria nei progetti open source critici, è possibile adottare le seguenti strategie:
- Utilizzare linguaggi di programmazione sicuri in termini di memoria: Scegliere linguaggi di programmazione che gestiscono automaticamente la memoria, come Rust, Golang, Java, C# e Python, può aiutare a prevenire errori di memoria.
- Eseguire analisi di sicurezza regolari: Eseguire controlli di sicurezza regolari per individuare e correggere eventuali vulnerabilità di memoria può contribuire a garantire la sicurezza dei progetti open source.
- Promuovere la consapevolezza della sicurezza di memoria: Sensibilizzare i programmatori e i responsabili delle decisioni sull’importanza della sicurezza di memoria può contribuire a promuovere l’adozione di linguaggi sicuri e pratiche di sviluppo sicure.
- Collaborare con la comunità open source: Collaborare con la comunità open source per condividere conoscenze, competenze e best practice in materia di sicurezza di memoria può contribuire a migliorare la sicurezza complessiva dei progetti open source.
La sicurezza di memoria è un aspetto cruciale della sicurezza dei progetti open source critici. L’utilizzo di linguaggi di programmazione sicuri in termini di memoria, l’esecuzione di analisi di sicurezza regolari e la promozione della consapevolezza della sicurezza di memoria possono contribuire a garantire la sicurezza dei progetti open source. Collaborando con la comunità open source, è possibile promuovere l’adozione di linguaggi sicuri e pratiche di sviluppo sicure, contribuendo a migliorare la sicurezza complessiva dei progetti open source.