A Fehér Ház memóriabiztos programozást akar, de mi ez?

Kulcs elvitelek

  • A Fehér Ház sürgeti a memóriabiztos nyelvek, például a Rust használatát, hogy csökkentsék a kód biztonsági réseit.
  • A régebbi, alacsonyabb szintű nyelvek, például a C, biztonsági incidensekhez vezető hibás kód kockázatát rejtik magukban.
  • A memóriabiztos nyelvek, mint például a Rust, automatikus memóriakezelést és hibamegelőzési funkciókat kínálnak.

Egy amerikai kormányhivatal elrendelte, hogy a programozóknak előnyben kell részesíteniük az olyan memóriabiztos nyelveket, mint a Rust és a Java. De miért jobbak, és ez tényleg számít?

Mit mond a Fehér Ház?

Február 26-i nyilatkozatában a Fehér Ház National Cyber ​​Director (ONCD) irodája arra szólította fel a szoftverfejlesztőket, hogy alkalmazzanak olyan memóriabiztos programozási nyelveket, mint a Rust.

Az ONCD azt mondta:

Nekünk nemzetként képesek vagyunk – és felelősségünk is – csökkenteni a támadási felületet a kibertérben, és megakadályozni, hogy a biztonsági hibák egész osztályai bejussanak a digitális ökoszisztémába, de ez azt jelenti, hogy meg kell küzdenünk a memóriabiztos programozási nyelvekre való átállás nehéz problémájával. .

Miért fontos?

A 2021-ben létrehozott ONCD közvetlenül az elnöknek számol be, és tanácsot ad neki a kiberbiztonsággal és a kapcsolódó kérdésekben. Az Egyesült Államok politikája valószínűleg tovagyűrűző hatással lesz a technológia világára.

A valaha volt legrosszabb biztonsági rések közül sok a memóriabiztonsággal kapcsolatos problémák okozták a kiváltó okot. A régebbi, alacsonyabb szintű nyelvek nagy erőt adnak a programozóknak, de ez növeli a hibás kód súlyos következményeket okozó kockázatát.

Ettől függetlenül a memóriabiztos nyelvek – például a Rust, a Python és a JavaScript – használata régóta növekszik. Az ONCD valószínűleg azért teszi ezt a bejelentést, mert a kevésbé biztonságos nyelvek, mint a C, olyan régóta léteznek, hogy örökölt kódjaik mára beépültek az infrastruktúrába és a naponta használt szoftverek nagy részébe.

Hogyan néz ki egy nem biztonságos nyelv?

A nem biztonságos kód nem mindig tűnik ijesztőnek vagy akár bonyolultnak. Vegyük ezt a példát egy egyszerű C programra:

#include <stdio.h>

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

Ez egy klasszikus példa egy olyan hibára, amely puffertúlcsordulási támadáshoz vezethet. A programozó elfelejtette, hogy a C-ben (és a legtöbb más nyelvben) lévő tömbök nulla indexeltek, vagyis az első elem az arr-ben van.[0]stb. Hozzáférési kísérlet arr[3] ezért hiba, de C megengedi:

Az arr[3] érvényes memóriacím, mint bármely más, csak nem tartozik a tömbhöz. Bármilyen érték tárolható ott, és az elérési vagy írási következmények a program összeomlásától a katasztrofális biztonsági incidensig terjedhetnek. A történelem során sok hacker használta ki az ilyen hibákat.

Bár a C fordító továbbra is figyelmeztetést ad, végrehajtható fájlt is generál. A programozó figyelmen kívül hagyhatja a figyelmeztetéseket, sőt fordítójelzők segítségével el is rejtheti azokat. A C továbbra is engedi lábon lőni magát, miközben az olyan nyelvek, mint a Rust, egyáltalán nem kínálnak fegyvert.

Hogyan néz ki a memóriabiztos kód?

Egy olyan memóriabiztos nyelven, mint a Rust, ugyanez a probléma egyszerűen nem létezik. Ugyanez a program Rust nyelven:

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

Míg ez a kód szintaktikailag érvényes, a Rust nem tudja lefordítani:

A fordító elmagyarázza a problémát, és nem hajlandó végrehajtható fájlt létrehozni. A Rust egyszerűen nem engedi futtatni ezt a kódot.

A Rust ezen kívül még sok más funkcióval is rendelkezik, amelyek segítenek megvédeni Önt. Olyan funkciókat tartalmaz, mint például az intelligens mutatók, amelyek automatikusan kezelik a memóriakezelést, és megakadályozzák a nulla mutató hivatkozását.

Váltsak nyelvet?

Minden programozási nyelvnek megvan a maga célja, ezért óvakodnia kell azoktól a tanácsoktól, amelyeket feltétlenül kerüljön el, még akkor is, ha az elnöktől származik. Bár dönthet úgy, hogy egy adott nyelvre specializálódik, mindig hasznos tanulni a változatosságot, bővíteni lehetőségeit.

A memória biztonsága olyan sok modern nyelv jellemzője, hogy Ön legalább egyet ismer. A C-nek megvan a maga felhasználási módja, de vannak biztonságosabb lehetőségek is, amelyek kevesebb szerencsétlenséget okoznak. Különösen, ha olyan hatékony nyelvet keres, amely jó biztonsági hálókkal rendelkezik, a Rust elengedhetetlen.