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