Google hvali Rust: Novi standard za sigurnu programiranje
Google je proglasio Rust, programski jezik koji osigurava sigurnost u upravljanju memorijom, ključnim elementom u smanjenju ranjivosti kroz svoju inicijativu Sigurno kodiranje. Ranjivosti zbog pristupa memoriji često se javljaju u jezicima koji nisu dizajnirani za sigurnost memorije. Godine 2019., problemi s memorijskom sigurnošću činili su 76% svih ranjivosti na Android platformi.
Preusmjeravanje na sigurnije jezike
Zbog ove zabrinjavajuće statistike, mnogi programeri i tehnološki divovi počeli su se okretati jezicima koji osiguravaju sigurnost memorije, kako bi razvili softver i tehnologije dizajnirane sa sigurnošću na umu. U svom blogu, Google je predstavio simulaciju prijelaza na jezike koji osiguravaju sigurnost memorije kroz postupnu implementaciju takvog koda u nove projekte tijekom razdoblja od pet godina. Rezultati su pokazali da, iako je došlo do postepenog povećanja koda pisanog u jezicima nesigurnim za memoriju, su ranjivosti vezane uz memoriju značajno smanjile.
Kako se smanjuju ranjivosti
Google objašnjava kako ranjivosti opadaju eksponencijalno. Novi kod pisan u jezicima nesigurnim za memoriju često sadrži greške i ranjivosti, ali uz postupnu reviziju i osvježavanje koda, ranjivosti se postupno uklanjaju, čineći kod sigurnijim tijekom vremena. Dakle, glavni izvor ranjivosti je novi kod, a prioritetnim korištenjem jezika koji osiguravaju sigurnost memorije prilikom pokretanja novih projekata, broj ranjivosti značajno opada.
U Googleovoj vlastitoj tranziciji prema jezicima koji osiguravaju sigurnost memorije, primijetili su značajan pad broja ranjivosti povezanih s memorijom – na 24% u 2024. godini, što je velika razlika u odnosu na 2019. i znatno ispod industrijskog prosjeka od 70%.
Strategije za poboljšanje sigurnosti memorije
Međutim, korištenje jezika koji osiguravaju sigurnost memorije nije čarobna formula. Google priznaje da, unatoč napretku, još uvijek nisu postigli održivo rješenje koje osigurava prihvatljivu razinu rizika. Strategije za rješavanje ranjivosti vezanih uz memoriju počele su s reaktivnim zakrpavanjem, pri čemu su ranjivosti koje osiguravaju sigurnost memorije imale prioritet kod proizvođača softvera, dok su druge ranjivosti ostavljene otvorene za brže iskorištavanje.
Drugi pristup bio je proaktivan, gdje su programeri poticani na uključivanje zaštitnih mehanizama poput “stack canaries” i integriteta kontrolnog toka, ali na račun brzine izvršenja, trajanja baterije i korištenja memorije. Međutim, programeri nisu mogli pratiti napredak napadača koji su koristili nove i kreativne načine za iskorištavanje ranjivosti.
Cilj: Visoka osigurana prevencija
Treći pristup je otkrivanje ranjivosti kroz fuzzing, proces gdje se ranjivosti prate na temelju simptoma nesigurne memorije. No, kako Google ukazuje, ovi alati su neučinkoviti i zahtijevaju puno vremena za korištenje, često ne otkrivajući sve ranjivosti čak ni nakon više provjera.
Kao četvrta strategija, Google se usmjerava na visokoudarnu prevenciju i sigurnu izradu razvoja. Korištenjem jezika poput Rusta, programeri bolje razumiju svoj kod i mogu predvidjeti ranjivosti na temelju svojih svojstava. Ovaj pristup smanjuje troškove programerima jer se broj ranjivosti smanjuje već od samog početka, uključujući i one van sigurnosnih problema vezanih uz memoriju. Ova kumulativna redukcija troškova također povećava produktivnost programera.
Zaključak
Jednostavna ideja je da, kada prestanemo unositi nove ranjivosti, one se smanjuju eksponencijalno, što osigurava veću sigurnost cijelog našeg koda. Ova promjena povećava učinkovitost dizajna sigurnosti i olakšava izazove u skalabilnosti povezane s postojećim strategijama sigurnosti memorije, omogućujući im da se primjenjuju učinkovitije i ciljano.