giovedì, Novembre 21, 2024

Linguaggi C e C++: rischi per la sicurezza delle app

**SMETTETE DI USARE C E C++, A RISCHIO LA CREAZIONE DI APPLICAZIONI SICURE**

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

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

In conclusione, l’importanza di adottare linguaggi di programmazione che promuovano la gestione sicura della memoria è fondamentale per garantire la protezione delle applicazioni e dei dati sensibili. Mentre C e C++ sono linguaggi potenti, la mancanza di controlli automatici della memoria li rende vulnerabili a potenziali attacchi informatici. Per questo motivo, è fondamentale considerare l’utilizzo di linguaggi come Rust, Go e Java che offrono soluzioni integrate per una maggiore sicurezza informatica.

ARTICOLI COLLEGATI:

ULTIMI ARTICOLI: