Het Witte Huis wil geheugenveilig programmeren, maar wat is dat?
Snelle links
⭐ Wat zegt het Witte Huis?
⭐ Waarom is het belangrijk?
⭐ Hoe ziet een onveilige taal eruit?
⭐ Hoe ziet geheugenveilige code eruit?
⭐ Moet ik van taal veranderen?
Belangrijkste opmerkingen
Het Witte Huis heeft aanbevolen programmeertalen te gebruiken die geheugenveiligheid als prioriteit hebben, zoals Rust, om potentiële beveiligingsrisico’s in verband met codeerfouten en kwetsbaarheden te beperken.
In primitievere programmeertalen, zoals C, is de kans groter dat bugs in de code kunnen leiden tot beveiligingslekken.
Rust, een taal die bekend staat om zijn veiligheidsmaatregelen, biedt een extra beveiligingslaag door zijn automatische geheugenbeheer en ingebouwde mogelijkheden om fouten te voorkomen.
Een recente richtlijn van een overheidsinstantie in de Verenigde Staten pleit ervoor dat programmeurs geheugenveilige talen zoals Rust en Java gaan gebruiken. Het roept echter de vraag op wat deze talen onderscheidt van andere en of dit onderscheid in de praktijk van belang is.
Wat zegt het Witte Huis?
In zijn verklaring van 26 februari pleitte het Office of the National Cyber Director binnen het Witte Huis ervoor dat softwareontwikkelaars geheugenveilige programmeertalen zoals Rust gebruiken.
Als samenleving ligt het binnen ons vermogen en onze plicht om de kwetsbaarheid van cyberspace te minimaliseren door de introductie van beveiligingslekken die een hele reeks klassen omvatten tegen te gaan door geheugenveilige programmeertalen te gebruiken. Dit is echter een uitdagend probleem dat om een oplossing vraagt.
Waarom is het belangrijk?
Het Office of Cyberspace and Digital Innovation (ONCD), dat in 2021 werd opgericht, werkt onder de directe bevoegdheid van de president en geeft deskundig advies over zaken met betrekking tot cyberbeveiliging en de daarmee samenhangende problemen. Er wordt verwacht dat beslissingen die binnen de Verenigde Staten worden genomen met betrekking tot dit domein een aanzienlijke invloed zullen hebben op het bredere landschap van technologische ontwikkelingen, zowel in eigen land als internationaal.
Verschillende opmerkelijke beveiligingsproblemen zijn toegeschreven aan fouten in geheugenbeheer, een fundamenteel aspect van programmeren. Het gebruik van oudere, low-level talen biedt ontwikkelaars een uitgebreid scala aan mogelijkheden, maar vergroot tegelijkertijd de kans dat foutieve codering kan leiden tot schadelijke gevolgen.
Desondanks is er een groeiende trend naar het gebruik van geheugenveilige programmeertalen zoals Rust, Python en JavaScript. Het is zeer waarschijnlijk dat de ONCD standaardisatiecommissie (Object, Class, and Data) deze aankondiging heeft gedaan vanwege de prevalentie van onveilige talen zoals C, die diep verankerd zijn geraakt in onze technologische infrastructuur en veel gebruikt worden in veel alledaagse toepassingen.
Hoe ziet een onveilige taal eruit?
Natuurlijk wil ik graag een meer verfijnde versie van die verklaring geven. Hier is mijn poging om het op een elegante manier te herformuleren: Het is de moeite waard om op te merken dat gevaarlijke programmeercode er niet altijd onheilspellend uitziet of ingewikkeld is. Een voorbeeld hiervan is een eenvoudig C-programma, dat niettemin potentiële risico’s voor de veiligheid en stabiliteit van het systeem kan herbergen.
#include <stdio.h>
int main (void) {
int arr[3] = { 0, 0, 0 };
printf("%d\n", arr[3]);
return 0;
}
Dit illustreert een voorbeeld van een fout die kan resulteren in
De informatie die is opgeslagen op de locatie die wordt aangeduid door de variabele “arr[3]” is een legitiem geheugenadres, vergelijkbaar met andere adressen binnen het systeem. Dit specifieke adres komt echter niet overeen met een element binnen de gedefinieerde arraygrenzen. Bijgevolg kunnen alle gegevens op die positie worden opgeslagen, met mogelijke gevolgen variërend van volledige systeemuitval tot ernstige beveiligingsinbreuken. In het verleden hebben veel cybercriminelen gebruik gemaakt van vergelijkbare zwakke plekken.
Ondanks de waarschuwing gaat de C compiler toch door met het genereren van een uitvoerbaar programma. Het is aan de ontwikkelaar om zulke waarschuwingen te onderdrukken of te verbergen door middel van specifieke compiler directives. Ongeacht deze optie biedt C nog steeds de mogelijkheid om zichzelf schade toe te brengen, terwijl alternatieve programmeertalen zoals Rust niet voorzien in de middelen die nodig zijn om dergelijke resultaten te bereiken.
Hoe ziet geheugenveilige code eruit?
In een programmeertaal die veiligheid prioriteit geeft en datacorruptie voorkomt, zoals Rust, komt het probleem van buffer overflow niet voor. De volgende code demonstreert dit concept in Rust:
fn main() {
let arr: [u32; 5] = [0;3];
println!("{}", arr[3]);
}
Ondanks de grammaticale correctheid zal Rust dit specifieke stuk code niet kunnen verwerken vanwege een compilatiefout.
De programmeertaal Rust houdt zich strikt aan zijn eigen principes en weigert code uit te voeren die de vastgestelde richtlijnen schendt.Bij problematische code geeft de compiler een duidelijke uitleg van het probleem, waardoor het genereren van een uitvoerbaar programma wordt voorkomen.
Rust biedt een groot aantal extra mogelijkheden naast de eerder genoemde, gericht op het verbeteren van de veiligheid door automatisch geheugenbeheer en het vermijden van null pointer dereferences. Deze omvatten de implementatie van slimme aanwijzers, die bronnen efficiënt beheren en potentiële fouten beperken die het gevolg zijn van onjuist gebruik of onjuiste behandeling van deze aanwijzers.
Moet ik van taal veranderen?
Het is essentieel om te erkennen dat elke programmeertaal zijn specifieke functie en doel dient, dus het zou onverstandig zijn om voorzichtigheid te negeren wanneer je overweegt om bepaalde talen absoluut te vermijden, ongeacht hun goedkeuring door hooggeplaatste personen zoals presidenten. Ondanks iemands neiging om een bepaalde taal te beheersen, kan het verwerven van vaardigheid in meerdere talen een breed scala aan mogelijkheden bieden voor veelzijdigheid en aanpassingsvermogen in toekomstige inspanningen.
Geheugenveiligheid is een prominente eigenschap in veel hedendaagse programmeertalen, waardoor het essentieel is om kennis te hebben van ten minste één zo’n taal. Hoewel C een zeker nut heeft, brengt het aanzienlijke risico’s met zich mee vanwege het gebrek aan veiligheidsmaatregelen. Gelukkig bestaan er alternatieven die verbeterde beveiligingsfuncties en efficiëntie bieden, met name Rust, dat moet worden overwogen door mensen die op zoek zijn naar een taal met robuuste veiligheidsmechanismen met behoud van mogelijkheden om de prestaties te optimaliseren.