Vita huset vill ha minnessäker programmering, men vad är det?

Viktiga takeaways

  • Vita huset uppmanar till användning av minnessäkra språk som Rust för att minska säkerhetsriskerna i kod.
  • Äldre språk på lägre nivå som C innebär risker för buggykod som leder till säkerhetsincidenter.
  • Minnessäkra språk som Rust erbjuder automatisk minneshantering och felförebyggande funktioner.

En amerikansk statlig myndighet har dekreterat att programmerare ska gynna minnessäkra språk som Rust och Java. Men varför är de bättre och spelar det någon roll?

Vad säger Vita huset?

I ett uttalande den 26 februari uppmanade Vita husets kontor för National Cyber ​​Director (ONCD) programvaruutvecklare att anta minnessäkra programmeringsspråk, som Rust.

ONCD sa:

Vi som nation har förmågan – och ansvaret – att minska attackytan i cyberrymden och förhindra hela klasser av säkerhetsbuggar från att komma in i det digitala ekosystemet, men det betyder att vi måste ta itu med det svåra problemet med att flytta till minnessäkra programmeringsspråk .

Varför är det viktigt?

ONCD, som grundades 2021, rapporterar direkt till presidenten och ger dem råd om cybersäkerhet och relaterade frågor. USA:s politik kommer sannolikt att ha en ringverkan över hela teknikvärlden.

Många av de värsta säkerhetsbristerna någonsin hade problem med minnessäkerhet som grundorsak. Äldre språk på lägre nivå ger programmerare mycket kraft, men detta ökar risken för att buggykod orsakar allvarliga konsekvenser.

Oavsett vilket har användningen av minnessäkra språk – som Rust, Python och JavaScript – länge ökat. ONCD kommer sannolikt att göra detta tillkännagivande eftersom mindre säkra språk som C har funnits så länge att deras äldre kod nu är inarbetad i infrastrukturen och mycket av programvaran vi använder dagligen.

Hur ser ett osäkert språk ut?

Osäker kod ser inte alltid skrämmande eller ens komplicerad ut. Ta det här exemplet på ett enkelt C-program:

#include <stdio.h>

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

Detta är ett klassiskt exempel på en bugg som kan leda till en buffertspillattack. Programmeraren har glömt att arrayer i C (och de flesta andra språk) är nollindexerade, vilket betyder att det första elementet är vid arr[0]etc. Försök att komma åt arr[3] är därför ett misstag, men ett som C tillåter:

Värdet vid arr[3] är en giltig minnesadress, precis som alla andra, den hör helt enkelt inte till arrayen. Alla värden kan lagras där, och konsekvenserna av att komma åt det eller skriva till det kan variera från en programkrasch till en katastrofal säkerhetsincident. Många hackare genom historien har utnyttjat sådana buggar.

Även om C-kompilatorn fortfarande ger en varning, genererar den också en körbar fil. En programmerare är fri att ignorera varningar och till och med dölja dem med hjälp av kompilatorflaggor. C kommer fortfarande att låta dig skjuta dig själv i foten medan språk som Rust inte kommer att erbjuda dig en pistol alls.

Hur ser Memory-Safe Code ut?

I ett minnessäkert språk som Rust finns inte samma problem helt enkelt. Här är samma program, i Rust:

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

Även om den här koden är syntaktisk giltig, kommer Rust inte att kompilera den:

Kompilatorn förklarar problemet och vägrar att producera en körbar fil. Rust låter dig helt enkelt inte köra den här koden.

Rust har många fler funktioner förutom detta, för att skydda dig. Den innehåller funktioner som smarta pekare för att hantera minneshantering automatiskt och förhindra nollpekareavledning.

Ska jag byta språk?

Varje programmeringsspråk har ett syfte, så du bör vara försiktig med råd för att absolut undvika några, även om det kommer från presidenten. Även om du kan välja att specialisera dig på ett visst språk, är det alltid bra att lära sig en mängd olika, för att utöka dina alternativ.

Minnessäkerhet är en egenskap hos så många moderna språk att du lika gärna kan vara bekant med minst ett. C har sina användningsområden, men det finns säkrare alternativ som kommer att orsaka färre missöden. Speciellt om du letar efter ett effektivt språk som har några bra skyddsnät är Rust ett måste.