Smettete di usare C e C++, a rischio la creazione di applicazioni sicure

Il Governo USA invita gli sviluppatori ad abbandonare C e C++ in favore di linguaggi di programmazione più sicuri. Ecco quali sono i motivi della scelta.

Linguaggi di programmazione come C e C++, la cui introduzione risale ormai agli anni ’70 e ’80, sono ancora ampiamente utilizzati perché potenti e flessibili. Oggi come non mai, tuttavia, i programmi scritti in C/C++ sono spesso vulnerabili a causa di problemi nella gestione della memoria.

Il problema della sicurezza della memoria nelle applicazioni (ne abbiamo parlato in modo approfondito) si riferisce a una serie di rischi e vulnerabilità che possono consentire a un aggressore di interferire con il corretto funzionamento di un’applicazione, arrivando anche a eseguire codice dannoso e sottrarre informazioni riservate.

Perché l’uso di C e C++ può portare alla realizzazione di applicazioni non sicure

C e C++ forniscono un controllo diretto sulla memoria, consentendo agli sviluppatori di allocare e deallocare manualmente i dati. Nell’articolo citato in precedenza, abbiamo visto tutte le situazioni più pericolose.

Ad ogni modo, eventuali errori di buffer overflow possono essere sfruttati dagli attaccanti per sovrascrivere porzioni di memoria critiche; la manipolazione dei puntatori per l’accesso diretto alla memoria può essere sfruttato per accedere senza autorizzazione ad aree della memoria non allocate o interferire con il contenuto di altre zone.

Mentre molti linguaggi moderni forniscono controlli automatici della memoria, come il meccanismo di garbage collection, C e C++ non prevedono nulla di simile lasciando la responsabilità di gestire la memoria all’utente.

Per non parlare del fatto che C e C++ forniscono pochi strumenti integrati per la sicurezza: la verifica del codice dipende principalmente dagli sforzi degli sviluppatori e dall’utilizzo di appositi strumenti di analisi.

Basti pensare che nel 2019 Microsoft diceva che il 70% delle vulnerabilità software discendono proprio da problematiche legate alla gestione della memoria. Nel 2020, Google è pervenuta alle medesime conclusioni rivelando che il 70% dei problemi di sicurezza di Chromium (e di conseguenza di tutti i browser Web da esso derivati) hanno a che fare con la memoria.

USA: accantonate l’utilizzo dei linguaggi C e C++. Quali sono le opzioni da preferire

Il Governo statunitense, attraverso l’ufficio che si occupa di cybersicurezza nazionale (ONCD, Office of the National Cyber Director), ha pubblicato un documento approfondito con cui richiama l’attenzione degli sviluppatori software. Il report suggerisce di orientarsi sull’utilizzo di linguaggi di programmazione che promuovono la gestione sicura della memoria.

La responsabilità della sicurezza informatica non deve essere soltanto in mano delle piccole imprese e dei singoli utenti. Secondo ONCD, invece, la responsabilità ricade proprio sulle organizzazioni più grandi, sulle aziende tecnologiche e, in ultima analisi, sul Governo.

Indicando come intrinsecamente “non sicuri” linguaggi come C e C++, ONCD ha chiesto alle aziende e agli ingegneri software di adottare le migliori pratiche possibili al fine di ridurre la superficie di attacco eventualmente esposta agli aggressori.

Creare codice memory-safe è possibile orientandosi sui linguaggi giusti: Rust, Go, C#, Java, Swift, JavaScript e Ruby sono i principali esempi. Non per niente, al primo posto c’è Rust, linguaggio che gli sviluppatori Linux, gli ingegneri software Microsoft, i programmatori di browser come Chromium/Chrome stanno sempre più utilizzando per riscrivere il kernel dei sistemi operativi e migliorare la sicurezza delle parti critiche delle applicazioni usate da milioni di utenti.

Abbiamo visto in altri articoli cosa significa l’uso di Rust in Chromium, perché l’adozione di Rust nel kernel di Windows 11 è una buona notizia e dove sta andando lo sviluppo del kernel Linux.

Credit immagine in apertura: iStock.com – Manfort Okolie

Ti consigliamo anche

Link copiato negli appunti