Det hvite hus vil ha minnesikker programmering, men hva er det?

Viktige takeaways

  • Det hvite hus oppfordrer til bruk av minnesikre språk som Rust for å redusere sikkerhetssårbarheter i kode.
  • Eldre språk på lavere nivå som C utgjør en risiko for buggy-kode som fører til sikkerhetshendelser.
  • Minnesikre språk som Rust tilbyr automatisk minneadministrasjon og feilforebyggende funksjoner.

Et amerikansk myndighetsorgan har bestemt at programmerere bør favorisere minnesikre språk som Rust og Java. Men hvorfor er de bedre og betyr dette egentlig noe?

Hva sier Det hvite hus?

I en uttalelse 26. februar oppfordret Det hvite hus-kontoret til National Cyber ​​Director (ONCD) programvareutviklere til å ta i bruk minnesikre programmeringsspråk, som Rust.

ONCD sa:

Vi, som en nasjon, har evnen – og ansvaret – til å redusere angrepsoverflaten i cyberspace og forhindre at hele klasser av sikkerhetsfeil kommer inn i det digitale økosystemet, men det betyr at vi må takle det vanskelige problemet med å flytte til minnesikre programmeringsspråk .

  10 måter å nå dine digitale detox-mål

Hvorfor er det viktig?

ONCD, etablert i 2021, rapporterer direkte til presidenten, og gir dem råd om cybersikkerhet og relaterte spørsmål. USAs politikk vil sannsynligvis ha en ringvirkning over hele teknologiens verden.

Mange av de verste sikkerhetssårbarhetene noensinne hadde problemer med minnesikkerhet som grunnårsak. Eldre språk på lavere nivå gir programmerere mye kraft, men dette øker risikoen for at buggy-kode forårsaker alvorlige konsekvenser.

Uansett har bruken av minnesikre språk – som Rust, Python og JavaScript – lenge vært økende. ONCD kommer sannsynligvis med denne kunngjøringen fordi mindre sikre språk som C har eksistert så lenge at deres gamle kode nå er inngrodd i infrastrukturen og mye av programvaren vi bruker daglig.

Hvordan ser et usikkert språk ut?

Usikker kode ser ikke alltid skummel ut eller til og med komplisert ut. Ta dette eksempelet på et enkelt C-program:

#include <stdio.h>

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

Dette er et klassisk eksempel på en feil som kan føre til et bufferoverløpsangrep. Programmereren har glemt at arrays i C (og de fleste andre språk) er nullindeksert, noe som betyr at det første elementet er ved arr[0]osv. Forsøk på tilgang arr[3] er derfor en feil, men en som C vil tillate:

  Det kraftige verktøyet for skjerm- og videoopptak

Verdien ved arr[3] er en gyldig minneadresse, som alle andre, hører den bare ikke til matrisen. Enhver verdi kan lagres der, og konsekvensene av å få tilgang til den eller skrive til den kan variere fra et programkrasj til en katastrofal sikkerhetshendelse. Mange hackere gjennom historien har utnyttet slike feil.

Selv om C-kompilatoren fortsatt produserer en advarsel, genererer den også en kjørbar fil. En programmerer står fritt til å ignorere advarsler, og til og med skjule dem ved å bruke kompilatorflagg. C vil fortsatt la deg skyte deg selv i foten mens språk som Rust ikke vil tilby deg en pistol i det hele tatt.

Hvordan ser minnesikker kode ut?

I et minnesikkert språk som Rust eksisterer ikke det samme problemet. Her er det samme programmet, i Rust:

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

Selv om denne koden er syntaktisk gyldig, vil Rust mislykkes i å kompilere den:

  Hvordan lage en betalingsordning med Cox

Kompilatoren forklarer problemet og nekter å produsere en kjørbar fil. Rust lar deg rett og slett ikke kjøre denne koden.

Rust har mange flere funksjoner i tillegg til dette, for å beskytte deg. Den inkluderer funksjoner som smarte pekere for å håndtere minneadministrasjon automatisk og forhindre null-peker-dereferencing.

Bør jeg bytte språk?

Hvert programmeringsspråk har en hensikt, så du bør være forsiktig med råd for å absolutt unngå noen, selv om det kommer fra presidenten. Selv om du kan velge å spesialisere deg på et bestemt språk, er det alltid nyttig å lære en rekke, for å utvide alternativene dine.

Minnesikkerhet er en funksjon i så mange moderne språk at du like godt kan være kjent med minst ett. C har sine bruksområder, men det er sikrere alternativer som vil forårsake færre uhell. Spesielt, hvis du leter etter et effektivt språk som har noen gode sikkerhetsnett, er Rust et must.