Кључне ствари
- Бела кућа активно промовише коришћење програмских језика са заштитом меморије, попут Руста, ради смањења безбедносних рањивости у софтверу.
- Традиционални, нижи програмски језици као што је C представљају потенцијални ризик због грешака у коду, које могу довести до озбиљних безбедносних пропуста.
- Језици који су безбедни за меморију, попут Руста, нуде аутоматско управљање меморијом и механизме за спречавање уобичајених грешака, чиме се повећава безбедност апликација.
Америчка владина тела све чешће препоручују програмерима да дају предност језицима са заштитом меморије, као што су Руст и Јава. Али, шта ове језике чини бољим и зашто је ово важно?
Шта је саопштила Бела кућа?
У саопштењу од 26. фебруара, Национална канцеларија за сајбер безбедност (ОНЦД) при Белој кући, позвала је програмере софтвера да усвоје језике који нуде заштиту меморије, посебно истичући Руст.
Као нација, имамо могућност, а и одговорност, да смањимо број потенцијалних сајбер напада и спречимо улазак целог низа безбедносних грешака у дигитални свет. То, међутим, захтева прелазак на програмске језике са заштитом меморије, што је озбиљан изазов.
Зашто је ово важно?
ОНЦД, формиран 2021. године, одговара директно председнику и саветује га о питањима сајбер безбедности и сродним темама. Ова америчка политика вероватно ће имати значајан утицај на технолошку индустрију на глобалном нивоу.
Већина великих безбедносних пропуста је последица проблема са управљањем меморијом. Старији, нижи програмски језици пружају велику флексибилност програмерима, али то повећава и ризик од грешака у коду, што може имати озбиљне последице.
Употреба језика који су сигурни за меморију, као што су Руст, Пајтон и ЈаваСкрипт, већ је у порасту. Чини се да ОНЦД овим саопштењем наглашава да је присуство мање безбедних језика, попут C, и даље велико, а застарели код написан у њима је дубоко укорењен у инфраструктури и софтверу који свакодневно користимо.
Како изгледа небезбедан код?
Небезбедан код не мора изгледати застрашујуће или компликовано. Узмимо једноставан пример C програма:
#include <stdio.h> int main (void) { int arr[3] = { 0, 0, 0 }; printf("%d\n", arr[3]); return 0; }
Ово је типичан пример грешке која може довести до прекорачења бафера. Програмер је превидео да су низови у C (као и у већини других језика) индексирани почев од нуле, што значи да први елемент има индекс `arr[0]`. Покушај приступа `arr[3]` је, дакле, грешка коју C дозвољава:
Вредност на локацији `arr[3]` је валидна меморијска адреса, али она не припада низу. На тој локацији може се наћи било која вредност, а приступ тој меморији може довести до пада програма или до озбиљних безбедносних инцидената. Ова врста грешака била је кључна за многе хакерске нападе кроз историју.
Иако C компајлер генерише упозорење, он ће ипак креирати извршну датотеку. Програмер може једноставно да игнорише упозорења или да их сакрије помоћу заставица компајлера. C ће вам дозволити да сами себи направите проблем, док вам језици попут Руста уопште неће ни дати ту могућност.
Како изгледа меморијски сигуран код?
Код написан на језику који је безбедан за меморију, попут Руста, једноставно не дозвољава овакву грешку. Ево истог примера у Русту:
fn main() { let arr: [u32; 5] = [0;3]; println!("{}", arr[3]); }
Иако је овај код синтактички исправан, Руст компајлер га неће прихватити:
Компајлер је јасан у вези са проблемом и неће произвести извршну датотеку. Руст једноставно не дозвољава да се овакав код покрене.
Руст нуди многе друге функције које вас додатно штите. Садржи функције попут паметних показивача за аутоматско управљање меморијом и спречавање деференцирања нултог показивача.
Да ли је потребно мењати програмске језике?
Сваки програмски језик има своју сврху, стога треба бити опрезан са препорукама да се потпуно избегава било који језик, чак и ако долазе од председника. Иако се можете специјализовати за један језик, увек је корисно учити различите језике како бисте проширили своје могућности.
Безбедност меморије је карактеристика многих савремених језика, те је корисно познавати барем један такав језик. C има своје предности, али постоје и сигурније опције које смањују ризик од грешака. Ако тражите ефикасан језик са добрим сигурносним механизмима, Руст је свакако избор који треба размотрити.