Vita huset vill ha minnessäker programmering, men vad är det?
Snabblänkar
⭐ Vad säger Vita huset?
⭐ Varför är det viktigt?
⭐ Hur ser ett osäkert språk ut?
⭐ Hur ser minnessäker kod ut?
⭐ Ska jag byta språk?
Key Takeaways
Vita huset har rekommenderat att använda programmeringsspråk som prioriterar minnessäkerhet, till exempel Rust, för att minska potentiella säkerhetsrisker i samband med kodningsfel och sårbarheter.
I mer primitiva programmeringsspråk, som C, är sannolikheten större att buggar i koden kan leda till säkerhetsöverträdelser.
Rust, ett språk som är känt för sina säkerhetsåtgärder, ger ett extra lager av säkerhet genom sin automatiska minneshantering och inbyggda felförebyggande funktioner.
Ett nyligen utfärdat direktiv från en amerikansk myndighet förespråkar att programmerare ska använda minnessäkra språk som Rust och Java. Det väcker dock frågan om vad som skiljer dessa språk från andra och om denna skillnad är betydelsefull i praktiken.
Vad säger Vita huset?
I sitt uttalande den 26 februari förespråkade Office of the National Cyber Director inom Vita huset att programvaruutvecklare ska använda minnessäkra programmeringsspråk som Rust.
ONCD sa :
Som samhälle ligger det inom vår förmåga och skyldighet att minimera sårbarheten i cyberrymden genom att hindra införandet av säkerhetsbrister som omfattar en rad olika klasser, genom att använda minnessäkra programmeringsspråk. Detta är dock en utmanande fråga som kräver en lösning.
Varför är det viktigt?
Office of Cyberspace and Digital Innovation (ONCD), som grundades 2021, arbetar direkt under presidenten och tillhandahåller expertrådgivning i frågor som rör cybersäkerhet och dess tillhörande problem. Det förväntas att beslut som fattas inom USA med avseende på denna domän kommer att utöva ett betydande inflytande på det bredare landskapet av tekniska framsteg både nationellt och internationellt.
Flera anmärkningsvärda säkerhetsöverträdelser har tillskrivits brister i minneshanteringen, som är en grundläggande aspekt av programmering. Användningen av äldre lågnivåspråk ger utvecklarna ett brett spektrum av möjligheter, men ökar samtidigt sannolikheten för att felaktig kodning kan leda till skadliga konsekvenser.
Trots detta har det funnits en växande trend mot att använda minnessäkra programmeringsspråk som Rust, Python och JavaScript. Det är mycket troligt att standardiseringskommittén Object, Class, and Data (ONCD) har gjort detta tillkännagivande på grund av förekomsten av osäkra språk som C, som har blivit djupt förankrade i vår tekniska infrastruktur och ofta används i många vardagliga applikationer.
Hur ser ett osäkert språk ut?
Självklart skulle jag gärna ge en mer förfinad tolkning av det påståendet. Här är mitt försök att omformulera det på ett elegant sätt:Det är värt att notera att farlig programmeringskod inte alltid har ett olycksbådande utseende eller är invecklat komplicerad. Ett exempel på detta är ett enkelt C-program, som ändå kan innehålla potentiella risker för systemets säkerhet och stabilitet.
#include <stdio.h>
int main (void) {
int arr[3] = { 0, 0, 0 };
printf("%d\n", arr[3]);
return 0;
}
Detta är ett exempel på en brist som kan leda till
Informationen som lagras på den plats som anges av variabeln “arr[3]” utgör en legitim minnesadress, jämförbar med andra i systemet. Denna speciella adress motsvarar dock inte ett element inom de definierade arraygränserna. Följaktligen kan vilken data som helst lagras på den positionen, med potentiella resultat som sträcker sig från fullständigt systemfel till allvarliga säkerhetsöverträdelser. Historiskt sett har många cyberbrottslingar dragit nytta av liknande sårbarheter.
Trots att C-kompilatorn avger ett varningsmeddelande fortsätter den ändå att generera ett körbart program. Utvecklaren kan välja att undertrycka eller dölja sådana varningar med hjälp av specifika kompilatordirektiv. Oavsett detta alternativ fortsätter C att ge möjlighet till självförvållad skada, medan alternativa programmeringsspråk som Rust avstår från att tillhandahålla de instrument som är nödvändiga för att uppnå sådana resultat.
Hur ser minnessäker kod ut?
I ett programmeringsspråk som prioriterar säkerhet och förhindrar datakorruption, som Rust, uppstår inte problemet med buffer overflow. Följande kod demonstrerar detta koncept i Rust:
fn main() {
let arr: [u32; 5] = [0;3];
println!("{}", arr[3]);
}
Trots att koden är grammatiskt korrekt kommer Rust inte att kunna bearbeta just denna kod på grund av ett kompileringsfel.
Programmeringsspråket Rust följer strikt sina egna principer och vägrar att exekvera kod som bryter mot de fastställda riktlinjerna.När kompilatorn stöter på problematisk kod ger den en tydlig förklaring av problemet, vilket effektivt förhindrar att ett körbart program genereras.
Rust erbjuder en mängd ytterligare funktioner utöver de tidigare nämnda, som syftar till att förbättra säkerheten genom automatisk minneshantering och undvikande av null pointer dereferences. Dessa inkluderar implementeringen av smarta pekare, som effektivt hanterar resurser och mildrar potentiella fel till följd av olämplig användning eller hantering av dessa pekare.
Ska jag byta språk?
Det är viktigt att inse att varje programmeringsspråk har sin specifika funktion och sitt syfte, så det skulle vara oförsiktigt att bortse från försiktighet när man överväger att absolut undvika vissa språk, oavsett om de stöds av högt uppsatta personer som presidenter. Även om man är benägen att behärska ett visst språk kan kunskaper i flera språk ge ett brett spektrum av möjligheter till mångsidighet och anpassningsförmåga i framtida strävanden.
Minnessäkerhet är en framträdande egenskap i många moderna programmeringsspråk, vilket gör det nödvändigt att ha kunskaper i åtminstone ett sådant språk. Även om C kan ha vissa fördelar, innebär det betydande risker på grund av dess brist på säkerhetsåtgärder. Lyckligtvis finns det alternativ som ger förbättrade säkerhetsfunktioner och effektivitet, särskilt Rust, som bör övervägas av dem som söker ett språk med robusta säkerhetsmekanismer samtidigt som prestandaoptimeringsmöjligheterna bibehålls.