Белият дом иска програмиране, безопасно за паметта, но какво е това?

Ключови изводи

  • Белият дом настоява за използване на безопасни за паметта езици като Rust за намаляване на уязвимостите в сигурността в кода.
  • По-старите езици от по-ниско ниво като C крият рискове от код с грешки, водещ до инциденти със сигурността.
  • Безопасните за паметта езици като Rust предлагат функции за автоматично управление на паметта и предотвратяване на грешки.

Правителствена агенция на САЩ постанови, че програмистите трябва да предпочитат езици, безопасни за паметта, като Rust и Java. Но защо те са по-добри и това наистина ли има значение?

Какво казва Белият дом?

В изявление от 26 февруари Службата на Националния кибер директор (ONCD) в Белия дом призова разработчиците на софтуер да приемат програмни езици, безопасни за паметта, като Rust.

ONCD каза:

Ние, като нация, имаме способността – и отговорността – да намалим повърхността на атаката в киберпространството и да предотвратим навлизането на цели класове бъгове в сигурността в дигиталната екосистема, но това означава, че трябва да се справим с трудния проблем с преминаването към езици за програмиране, безопасни за паметта .

  6 най-добри деривати на Ubuntu за проверка

Защо е важно?

ONCD, създадена през 2021 г., докладва директно на президента, като ги съветва по киберсигурността и свързаните с нея въпроси. Политиката на САЩ вероятно ще има вълнообразен ефект в света на технологиите.

Много от най-лошите уязвимости в сигурността са имали проблеми с безопасността на паметта като основна причина. По-старите езици от по-ниско ниво дават на програмистите много мощност, но това увеличава риска кодът с грешки да причини сериозни последици.

Независимо от това, използването на безопасни за паметта езици – като Rust, Python и JavaScript – отдавна се увеличава. ONCD вероятно прави това съобщение, защото по-малко безопасните езици като C съществуват толкова дълго, че наследеният им код вече е вкоренен в инфраструктурата и голяма част от софтуера, който използваме ежедневно.

Как изглежда един опасен език?

Опасният код не винаги изглежда плашещ или дори сложен. Вземете този пример за проста C програма:

#include <stdio.h>

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

Това е класически пример за грешка, която може да доведе до атака с препълване на буфера. Програмистът е забравил, че масивите в C (и повечето други езици) са с нулев индекс, което означава, че първият елемент е в arr[0]и т.н. Опит за достъп до обр[3] следователно е грешка, но тази, която C ще позволи:

  7 най-добри AngularJS рамки за бързо разработване на приложения

Стойността при обр[3] е валиден адрес в паметта, като всеки друг, просто не принадлежи към масива. Всяка стойност може да се съхранява там и последствията от достъпа до нея или записването в нея могат да варират от срив на програмата до катастрофален инцидент със сигурността. Много хакери в историята са използвали такива грешки.

Въпреки че C компилаторът все още извежда предупреждение, той също генерира изпълним файл. Програмистът е свободен да игнорира предупрежденията и дори да ги скрие с помощта на флагове на компилатора. C все още ще ви позволи да се простреляте в крака, докато езици като Rust изобщо няма да ви предложат пистолет.

  8 висококачествени AB машини за извайване на вашите коремни мускули като професионалист

Как изглежда защитеният от паметта код?

В безопасен за паметта език като Rust, същият проблем просто не съществува. Ето същата програма в Rust:

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

Докато този код е синтактично валиден, Rust няма да успее да го компилира:

Компилаторът обяснява проблема и отказва да създаде изпълним файл. Rust просто няма да ви позволи да стартирате този код.

Rust има много повече функции освен това, за да ви помогне да се защитите. Той включва функции като интелигентни указатели за автоматично управление на паметта и предотвратяване на дерефериране на нулев указател.

Трябва ли да превключа езика?

Всеки език за програмиране има предназначение, така че трябва да внимавате със съветите да избягвате абсолютно всички, дори ако идват от президента. Въпреки че може да изберете да специализирате в конкретен език, винаги е полезно да научите различни, за да разширите възможностите си.

Безопасността на паметта е характеристика на толкова много съвременни езици, че е добре да сте запознати с поне един. C има своите приложения, но има по-безопасни опции, които ще причинят по-малко злополуки. По-специално, ако търсите ефективен език, който има някои добри предпазни мрежи, Rust е задължителен.