L'Office of the National Cyber Director (ONCD) ha recentemente pubblicato un nuovo report, "Back to the Building Blocks: A Path Toward Secure and Measurable Software". Il report è uno dei primi importanti annunci del nuovo direttore dell'ONCD Harry Coker e sostiene con decisione l'adozione di linguaggi di programmazione memory-safe.
Questo nuovo focus nasce dall'obiettivo di riequilibrare la responsabilità della cybersecurity e riallineare gli incentivi a favore di investimenti a lungo termine nel settore della cybersecurity. I linguaggi di programmazione memory-safe sono stati inclusi anche come obiettivo dell'Open-Source Software Security Initiative (OS3I), che ha recentemente pubblicato un nuovo report.
I bug di memoria si verificano quando un programmatore scrive codice che causa un problema legato all'accesso alla memoria. I bug comuni si verificano con l'overflow del buffer e i dangling pointer. Utilizzando un linguaggio di programmazione memory-safe come Rust, Go, Java, Swift e Python, gli sviluppatori non possono creare codice che causi un bug di memoria perché il linguaggio include proprietà specifiche come la sicurezza della memoria o dei tipi. Quando gli sviluppatori scrivono codice in linguaggi non sicuri per la memoria, come C e C++, possono inavvertitamente scrivere codice che può causare errori di accesso alla memoria. Invece di rilevare gli errori durante il tempo di compilazione e il tempo di esecuzione, come nei linguaggi memory-safe, i bug arrivano nella versione finale e causano problemi di sicurezza.
Sebbene la cybersecurity spesso si concentri sulla reazione alle minacce, ridurre il rischio inizia creando pratiche che riducono gli errori di codice che possono creare problemi di sicurezza. Google ha riportato che il 70% dei bug di sicurezza gravi sono in realtà problemi di sicurezza della memoria. I linguaggi di programmazione ampiamente utilizzati come C e C++ sono spesso la causa di molti problemi, soprattutto a causa degli errori di puntatore.
L'uso di un linguaggio memory-safe riduce in modo significativo o elimina completamente le vulnerabilità memory-safe. Questo, a sua volta, riduce il rischio di cybersecurity del codice finale. Oltre a migliorare la sicurezza, i linguaggi memory-safe riducono i crash e permettono agli sviluppatori di aumentare la produttività perché non devono concentrarsi su problemi di gestione della memoria.
Newsletter di settore
Resta al passo con le tendenze più importanti e interessanti del settore relative ad AI, automazione, dati e oltre con la newsletter Think. Leggi l' Informativa sulla privacy IBM.
L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.
La riduzione dei bug di memoria è un problema complesso che richiede un approccio su più fronti. Il report si concentra sulla necessità che le organizzazioni si concentrino su due aree specifiche relative ai linguaggi memory-safe. Inoltre, il governo vuole concentrarsi sulla creazione di partnership con la comunità tecnica, in particolare ingegneri e sviluppatori, per collaborare alla realizzazione di questo cambiamento fondamentale.
Ecco i due principali obiettivi delineati nella scheda informativa pubblicata insieme al report:
Un'area di attacco più piccola significa un rischio inferiore. Ogni riga di codice che crea vulnerabilità amplia in modo notevole la superficie di attacco. Un singolo errore che causa un errore memory-safe può creare un gran numero di vulnerabilità. Il report raccomanda l'utilizzo di un linguaggio di programmazione memory-safe come uno dei modi più efficaci per ridurre la superficie di attacco. Con questi linguaggi, i programmatori non possono commettere gli errori che portano all'aumento della superficie di attacco tramite bug di memoria.
Molte organizzazioni non riescono a valutare accuratamente il rischio nel loro software perché utilizzare metriche su software in continuo cambiamento è estremamente difficile. Sebbene la misurabilità del software sia una sfida complessa, il cambiamento inizia con il passaggio dalla reattività alla proattività. Sviluppando migliori diagnostiche per la qualità della cybersecurity, le organizzazioni possono identificare e risolvere i rischi in modo più accurato.
Anche se è facile dire che le organizzazioni dovrebbero utilizzare linguaggi memory-safe, la realtà è che questa transizione è complicata. Molti programmi software e librerie si basano su linguaggi non memory-safe, e spesso non è possibile riscrivere completamente l'intera base di codice.
Iniziare un nuovo progetto con un linguaggio di programmazione memory-safe, ogni qualvolta possibile, è il modo più semplice per iniziare la transizione. Le organizzazioni possono anche ridurre la superficie di attacco senza una riscrittura totale riscrivendo solo le funzioni e le librerie critiche che sono maggiormente a rischio di bug memory-safe, che spesso includono aree con overflow del buffer e dangling pointer. Alcuni linguaggi memory-safe, come Rust e Swift, sono interoperabili con C e C++, rendendo fattibile questo approccio. Quando si adotta questo approccio, le organizzazioni devono integrare i sistemi di build e le astrazioni di build nel nuovo linguaggio per oggetti e dati condivisi.
Tuttavia, per effettuare questa transizione sono necessarie le giuste risorse per gli sviluppatori. Le organizzazioni dovrebbero iniziare valutando l'attuale team di sviluppatori per determinare quali competenze possiede attualmente in termini di linguaggi memory-safe. Il passo successivo è la formazione degli attuali sviluppatori e la garanzia che i nuovi sviluppatori siano esperti in linguaggi memory-safe.
Con l'attenzione crescente alla cybersecurity, molte organizzazioni stanno rendendosi conto che il passo più importante è passare da un approccio reattivo a uno proattivo. Tornando all'inizio e concentrandosi sulla creazione di codice sicuro, le organizzazioni possono ridurre significativamente il rischio. Anche se non è un processo semplice o rapido, i benefici di questo cambiamento sono significativi e duraturi.