Aktuelt

Rust: fremtiden for sikker kode

Skrevet av Ken Knutsen | Dec 15, 2023 1:22:07 PM

Sikkerhetsutfordringer i C/C++

C/C++ har lenge dominert landskapet for systemprogramvare. Men det kommer også med flere betydelige sikkerhetsutfordringer. Ta for eksempel «use-after-free»-feil, hvor frigjort minne feilaktig blir brukt igjen, som kan føre til uforutsigbar atferd og systemkrasj. Eller bufferoverflyt, hvor data skrives utenfor tildelt minneområde. Det kan åpne for hacking og datatap.

Et godt eksempel er da en sårbarhet i Androids Binder-driver ble utnyttet av NSO Group, for å oppnå root-tilgang til Android-enheter, som tillot dem å overvåke telefoner. Dette understreker risikoen ved direkte minnehåndtering og C/ C++ sin kompleksitet.

Et annet eksempel på en sikkerhetsrisiko i systemprogrammering, er Heap Exploitation. Denne sårbarheten oppstår når noen finner svakheter i hvordan et program håndterer minnet sitt, og bruker disse til å kjøre sin egen kode. Dette kan føre til både hacking av systemer og stjeling av data.

I tillegg har C/C++ vært utsatt for andre alvorlige sårbarheter, som Integer Overflows og Format String Vulnerabilities. Det kan føre til alt fra systemkrasj til uautorisert dataaksess og kodeeksekusjon.

Rust – et sikrere alternativ

I motsetning til C/C++, tilbyr Rust en løsning som eliminerer mange av disse problemene. Ved å legge vekt på minnesikkerhet og forebygging av datakappløp, unngår Rust mange av de vanligste sårbarhetene som utfordrer C/C++. Dette blir spesielt tydelig i behandlingen av minneallokering og bufferhåndtering, hvor potensielt skadelige feil håndteres mye mer robust enn i C/C++. Noe som også er grunnen til at den nevnte Binder-driveren skrives om i Rust.

Rust skiller også mellom safe og unsafe. Det gjør det mulig å begrense bruken av utrygg kode til der det er strengt nødvendig. Dette gjør det mindre sannsynlig at det oppstår feil, samtidig som det gir utviklere friheten til å jobbe med mer komplekse oppgaver når det trengs.

Veksten til Rust innebærer også integrasjon i Linux-kjernen. Det er en milepæl i deres vekst og påvirkning da dette er det første språket noensinne (bortsett fra C) som får bli brukt i Linux-kjernen. Dette understreker industriens tiltro til Rust, når det gjelder å håndtere kritiske systemoppgaver med en høyere grad av sikkerhet og pålitelighet.

Hvorfor kan ikke C/C++ følge Rust?

Et naturlig spørsmål er hvorfor C/C++ ikke oppdaterer sine sikkerhetssystemer for å eliminere noen av sikkerhetsutfordringene. Svaret ligger nok dels i lang historie, dels i omfattende bruk. Endringer i kjerneegenskapene kan bryte kompatibiliteten med enormt mange eksisterende kode og systemer.

I tillegg er C/C++ sin kompleksitet og fleksibilitet både en styrke og en svakhet. Det gir stor kraft og kontroll, men øker risikoen for feil og sikkerhetsproblemer. Å gjøre radikale endringer for å etterligne Rust sin sikkerhetsmodell, ville kreve en grunnleggende omskriving av språket. Dette er en enorm oppgave både teknisk og praktisk. Som igjen fordrer et ønske om å endre seg – men vil de egentlig det?

Ikke en erstatter

Selv om Rust ikke vil erstatte C/C++ i alle sammenhenger, representerer det en betydelig endring i hvordan utviklere kan tilnærme seg systemprogrammering med større vekt på sikkerhet og pålitelighet. Denne endringen er avgjørende for fremtidens programvareutvikling.