La Casa Bianca vuole una programmazione sicura per la memoria, ma di cosa si tratta?

Punti chiave

  • La Casa Bianca sollecita l’uso di linguaggi sicuri per la memoria come Rust per ridurre le vulnerabilità della sicurezza nel codice.
  • I linguaggi di livello inferiore più vecchi come il C comportano il rischio di codice difettoso che porta a incidenti di sicurezza.
  • I linguaggi memory-safe come Rust offrono funzionalità di gestione automatica della memoria e prevenzione degli errori.

Un’agenzia governativa statunitense ha decretato che i programmatori dovrebbero favorire linguaggi sicuri per la memoria come Rust e Java. Ma perché sono migliori e questo è davvero importante?

Cosa dice la Casa Bianca?

In una dichiarazione del 26 febbraio, l’Ufficio del National Cyber ​​Director (ONCD) della Casa Bianca ha esortato gli sviluppatori di software ad adottare linguaggi di programmazione sicuri per la memoria, come Rust.

Lo ha detto l’ONCD:

Noi, come nazione, abbiamo la capacità – e la responsabilità – di ridurre la superficie di attacco nel cyberspazio e impedire che intere classi di bug di sicurezza entrino nell’ecosistema digitale, ma ciò significa che dobbiamo affrontare il difficile problema di passare a linguaggi di programmazione sicuri per la memoria. .

Perché è importante?

L’ONCD, istituito nel 2021, riferisce direttamente al Presidente, consigliandolo sulla sicurezza informatica e sulle questioni correlate. È probabile che la politica statunitense abbia un effetto a catena su tutto il mondo della tecnologia.

Molte delle peggiori vulnerabilità di sicurezza hanno avuto come causa principale problemi legati alla sicurezza della memoria. I linguaggi di livello inferiore più vecchi danno ai programmatori molto potere, ma ciò aumenta il rischio che il codice buggato causi gravi ripercussioni.

Indipendentemente da ciò, l’utilizzo di linguaggi memory-safe, come Rust, Python e JavaScript, è in aumento da tempo. È probabile che l’ONCD faccia questo annuncio perché linguaggi meno sicuri come il C esistono da così tanto tempo che il loro codice legacy è ormai radicato nell’infrastruttura e in gran parte del software che utilizziamo quotidianamente.

Che aspetto ha una lingua non sicura?

Il codice non sicuro non sembra sempre spaventoso o addirittura complicato. Prendiamo questo esempio di un semplice programma C:

#include <stdio.h>

int main (void) {
    int arr[3] = { 0, 0, 0 };
    printf("%d\n", arr[3]);
    return 0;
}

Questo è un classico esempio di bug che può portare ad un attacco di buffer overflow. Il programmatore ha dimenticato che gli array in C (e nella maggior parte degli altri linguaggi) hanno indice zero, il che significa che il primo elemento è in arr[0]ecc. Tentativo di accesso a arr[3] è quindi un errore, ma che C consentirà:

Il valore in arr[3] è un indirizzo di memoria valido, come qualsiasi altro, semplicemente non appartiene all’array. Qualsiasi valore potrebbe essere memorizzato lì e le conseguenze dell’accesso o della scrittura su di esso possono variare da un arresto anomalo del programma a un catastrofico incidente di sicurezza. Molti hacker nel corso della storia hanno sfruttato tali bug.

Sebbene il compilatore C produca comunque un avviso, genera anche un eseguibile. Un programmatore è libero di ignorare gli avvisi e persino di nasconderli utilizzando i flag del compilatore. C ti permetterà comunque di spararti al piede mentre linguaggi come Rust non ti offriranno affatto una pistola.

Che aspetto ha il codice Memory-Safe?

In un linguaggio memory-safe come Rust, lo stesso problema semplicemente non esiste. Ecco lo stesso programma, in Rust:

fn main() {
    let arr: [u32; 5] = [0;3];
    println!("{}", arr[3]);
}

Sebbene questo codice sia sintatticamente valido, Rust non riuscirà a compilarlo:

Il compilatore spiega il problema e si rifiuta di produrre un eseguibile. Rust semplicemente non ti permetterà di eseguire questo codice.

Rust ha molte altre funzionalità oltre a queste, per aiutarti a proteggerti. Include funzionalità come puntatori intelligenti per gestire automaticamente la gestione della memoria e impedire il dereferenziamento del puntatore nullo.

Dovrei cambiare lingua?

Ogni linguaggio di programmazione ha uno scopo, quindi dovresti diffidare dei consigli per evitarne assolutamente qualcuno, anche se proviene dal Presidente. Sebbene tu possa scegliere di specializzarti in una lingua particolare, è sempre utile impararne una varietà, per espandere le tue opzioni.

La sicurezza della memoria è una caratteristica di così tanti linguaggi moderni che potresti anche averne familiarità con almeno uno. C ha i suoi usi, ma ci sono opzioni più sicure che causeranno meno incidenti. In particolare, se stai cercando un linguaggio efficiente che abbia delle buone reti di sicurezza, Rust è un must.