Bílý dům chce programování bezpečné pro paměť, ale co to je?

Klíčové věci

  • Bílý dům naléhá na používání jazyků bezpečných pro paměť, jako je Rust, aby se snížila bezpečnostní zranitelnost v kódu.
  • Starší jazyky nižší úrovně, jako je C, představují riziko chybného kódu vedoucího k bezpečnostním incidentům.
  • Paměťově bezpečné jazyky jako Rust nabízejí automatickou správu paměti a funkce prevence chyb.

Americká vládní agentura rozhodla, že programátoři by měli upřednostňovat jazyky bezpečné pro paměť, jako je Rust a Java. Ale proč jsou lepší a opravdu na tom záleží?

Co říká Bílý dům?

V prohlášení ze dne 26. února úřad Bílého domu Národního kybernetického ředitele (ONCD) vyzval vývojáře softwaru, aby přijali programovací jazyky bezpečné pro paměť, jako je Rust.

ONCD řekl:

My, jako národ, máme schopnost – a zodpovědnost – snížit plochu útoku v kyberprostoru a zabránit celým třídám bezpečnostních chyb ve vstupu do digitálního ekosystému, ale to znamená, že se musíme vypořádat s obtížným problémem přechodu na programovací jazyky bezpečné pro paměť. .

  Kódy Roblox Speed ​​Champions: Uplatněte nyní

Proč je to důležité?

ONCD, založené v roce 2021, je podřízeno přímo prezidentovi a radí jim v oblasti kybernetické bezpečnosti a souvisejících otázek. Politika USA bude mít pravděpodobně dominový efekt na celý svět technologií.

Mnoho z nejhorších bezpečnostních zranitelností mělo jako hlavní příčinu problémy s bezpečností paměti. Starší jazyky nižší úrovně dávají programátorům hodně síly, ale to zvyšuje riziko, že chybný kód způsobí vážné následky.

Bez ohledu na to je používání jazyků bezpečných z hlediska paměti – jako je Rust, Python a JavaScript – již dlouho na vzestupu. ONCD toto oznámení pravděpodobně vydává, protože méně bezpečné jazyky jako C existují tak dlouho, že jejich starší kód je nyní zakořeněn v infrastruktuře a většině softwaru, který denně používáme.

Jak vypadá nebezpečný jazyk?

Nebezpečný kód nevypadá vždy děsivě nebo dokonce složitě. Vezměte si tento příklad jednoduchého programu C:

#include <stdio.h>

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

Toto je klasický příklad chyby, která může vést k útoku přetečením vyrovnávací paměti. Programátor zapomněl, že pole v C (a většině ostatních jazyků) mají nulový index, což znamená, že první prvek je v arr[0]atd. Pokus o přístup arr[3] je tedy chyba, ale C umožní:

  Jak nahrávat obrazovku na iPhone

Hodnota v arr[3] je platná adresa paměti, jako každá jiná, jen nepatří do pole. Mohla by tam být uložena jakákoliv hodnota a důsledky přístupu k ní nebo zápisu do ní se mohou pohybovat od pádu programu až po katastrofický bezpečnostní incident. Mnoho hackerů v historii takové chyby zneužilo.

Přestože kompilátor C stále vytváří varování, generuje také spustitelný soubor. Programátor může varování ignorovat a dokonce je skrýt pomocí příznaků kompilátoru. C vás stále nechá střílet do nohy, zatímco jazyky jako Rust vám zbraň vůbec nenabídnou.

Jak vypadá kód bezpečný pro paměť?

V jazyce bezpečném pro paměť, jako je Rust, stejný problém prostě neexistuje. Zde je stejný program v Rustu:

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

I když je tento kód syntakticky platný, Rust jej nezkompiluje:

  14 nejlepších koučovacích programů pro sledování a správu vašich klientů [2022]

Kompilátor vysvětluje problém a odmítá vytvořit spustitelný soubor. Rust vám tento kód jednoduše nedovolí spustit.

Rust má kromě toho mnoho dalších funkcí, které vám pomohou chránit vás. Obsahuje funkce, jako jsou inteligentní ukazatele, které automaticky zpracovávají správu paměti a zabraňují dereferencování nulového ukazatele.

Mám přepnout jazyky?

Každý programovací jazyk má svůj účel, takže byste si měli dávat pozor na rady, abyste se jim absolutně vyhýbali, i když pocházejí od prezidenta. I když se můžete rozhodnout specializovat na určitý jazyk, vždy je užitečné naučit se různé jazyky a rozšířit tak své možnosti.

Bezpečnost paměti je funkcí tolika moderních jazyků, že byste mohli být obeznámeni alespoň s jedním. C má své využití, ale existují bezpečnější možnosti, které způsobí méně nehod. Zejména pokud hledáte efektivní jazyk, který má dobré bezpečnostní sítě, Rust je nutností.