Koliko je Java sigurna u usporedbi s drugim jezicima?

Kao i kod ostalih aspekata cyber sigurnosti, razina sigurnosti programskog jezika ovisi o tome što podrazumijevamo pod "sigurnim". Istina je da Java ima manje identificiranih ranjivosti od nekih drugih uobičajenih jezika. Istina je i da se neki noviji jezici čine sigurnijima od Jave, barem na prvi pogled.

Mnoge sigurnosne rupe pronađene u Javi rezultat su njene popularnosti. Široka uporaba znači da su tisuće lovaca na programske pogreške posvećene pronalaženju ranjivosti Java jezika, što Javi daje nepravednu "prednost" na ovom polju. Isto tako, implicirana sigurnost nekih novijih jezika, poput Rubyja, mogla bi više odraziti njihovu upotrebu niša nego integritet.  

[Također na JavaWorldu: Postoje neki znakovi da programeri Java postaju sve bolji u sigurnosti.] 

U ovom ćemo članku pogledati kako se najčešće upotrebljavani programski jezici rangiraju u smislu sigurnosti. Objasnit ću neke čimbenike koji jedan jezik čine manje sigurnim od drugog i zašto su se identificirane ranjivosti toliko povećale u posljednjih nekoliko godina. Na kraju ću predložiti nekoliko načina na koje programeri Java mogu smanjiti ranjivosti u kodu.  

Dno crta: Iz sigurnosne perspektive, ranjivosti za koje znamo su bolje od onih koje ne poznajemo. 

Koliko je Java sigurna?

Nedavna istraživanja ranjivosti najčešće korištenih programskih jezika došla su iz WhiteSourcea, platforme za sigurnost i usklađenost s licencama otvorenog koda. WhiteSource je proučio sedam najpopularnijih programskih jezika otvorenog koda: C, Java, JavaScript, Python, Ruby, PHP i C ++. Analitičari su se zatim koristili raznim izvorima za rangiranje jezika prema broju identificiranih ranjivosti.

Zašto open source?

Odluka o rangiranju jezika otvorenog koda nije slučajna. Mnogi zaštićeni jezici - uključujući vlasničke implementacije jezika otvorenog koda - daleko su manje transparentni kada su u pitanju ranjivosti. Privatna tvrtka nema poslovnog smisla objavljivati ​​sigurnosne nedostatke u svom proizvodu, tako da smo uglavnom u mraku oko razine ranjivosti tih jezika. Nedostaci o kojima znamo daleko su rješiviji od onih koje ne znamo.

Na temelju studije WhiteSource, najranjiviji programski jezik do sada je bio C, s 47% svih prijavljenih ranjivosti . To rangiranje neće iznenaditi iskusne programere, ali drugi bi rezultati mogli. PHP je došao u dalekoj sekundi, sa 17%, slijedi Java s 12%, a JavaScript je zaokružio prva četiri s 11%. Slijedili su ove "vođe" Python, C ++ i Ruby. 

Razumijevanje sigurnosti programskog jezika

Dalje, trebali bismo se zapitati zašto su neki programski jezici ranjiviji od drugih. Na temelju istraživanja koje sam citirao, mogli biste zaključiti da C predstavlja ogromnu sigurnosnu prijetnju. Ali uzmite u obzir da se C koristi puno duže od bilo kojeg drugog jezika s popisa. Kao što je rekao Stephen Turner, pišući u Journal of Technology Research, "programski su jezici poput genetike, jer postoji nekoliko predaka sa zajedničkim osobinama koji su se razvili". 

Kao najstariji jezik na popisu, C je razvijen u potpuno drugačijem okruženju prijetnje od relativno novijih jezika kao što su Java i Ruby. Kao što WhiteSource ističe, relativna dob C-a znači da ima odgovarajuće veći opseg napisanog koda. C je također jedan od jezika koji se koristi za glavne infrastrukture poput OpenSSL-a i Linux kernela. Ta kombinacija volumena i centralnosti može dovesti do većeg broja poznatih ranjivosti otvorenog koda.

Iako se Java dobro izvodi u ovoj analizi, autori ističu dvije vrste ranjivosti koje posebno utječu na Javu. Prvo, primjećuju da nas US-CERT već dugo upozorava na Javinu ranjivost za bilježenje napada ubrizgavanjem, uglavnom putem web preglednika. Takvi se napadi mogu spriječiti provjerom valjanosti ili provjerom autentičnosti poslanih unosa, ali programeri su često suzdržani da temeljito provjere unos iz straha da bi to njihove aplikacije moglo učiniti manje prijateljskim. 

Drugo, Java je posebno ranjiva na povjerljive eksploatacije koje slijede ranjivosti kontrole pristupa. Iako su se postupci certificiranja poboljšali od 2013. godine, mnogi se programeri oslanjaju na certifikate nadležnih tijela koji su manje nego pouzdani. Moguće je dobiti certifikat koji je manje strog nego što bi trebao biti. US-CERT, citiran u Journal of Technology Research, upozorava na ova otvorena vrata za udaljene napadače koji izvršavaju proizvoljan kod.

Relativno niska ranjivost Java nudi zanimljiv kontrast C. C. Java je razvijena dugo nakon C, u okruženju u kojem je svijest o prijetnjama bila mnogo veća, pa ne čudi da je Java daleko sigurnija. Isto tako, dok se čini da je Ruby sigurniji od Jave, to bi se moglo objasniti relativnom mladošću jezika i njegovom primjenom u niši.

Sigurnosne ranjivosti su u porastu - nekako

WhiteSource izvještava o "značajnom porastu broja poznatih sigurnosnih ranjivosti otvorenog koda na svim jezicima tijekom posljednje dvije godine." Iako se ukupan broj ranjivosti u Javi neprestano smanjivao od 2015. godine, novije skočenje broja ranjivosti zahtijeva objašnjenje. To povećanje možemo pripisati dvama čimbenicima.  

Prvo, tu su blagodati, relativno nov trend u kojem tisuće tehnoloških stručnjaka pretražuju jezik kako bi pronašli ranjivosti. Oni predstavljaju barem dio povećanja sigurnosnih ranjivosti otvorenog koda. Uz to, općenito se pretpostavlja da lovci na prijetnje jednako skeniraju sve jezike, ali to nije istina. Kao jedan od najčešće korištenih jezika u web razvoju, Java je značajna meta za lovce na prijetnje. U tom kontekstu, Java-ovo treće mjesto za poznate ranjivosti počinje izgledati prilično nisko.

Softverski sustavi također su reda veličine složeniji nego prije 10 godina, što je još jedan od glavnih čimbenika sve većeg broja ranjivosti pronađenih u Javi i drugim jezicima. U svijetu u kojem aplikacije za pametne telefone mogu biti izvor zaraze i gdje svaka tvrtka mora imati web mjesto s omogućenim JavaScriptom, ne čudi da se broj ranjivosti web mjesta eksponencijalno povećao. Dodajte tome dugoročni nedostatak stručnjaka za kibernetsku sigurnost i stvari počinju izgledati sumorno za budućnost kibernetičke sigurnosti. 

Kako izbjeći Java sigurnosne ranjivosti

Čitanjem istraživanja o sigurnosnim ranjivostima možda ćete ubrzati rad srca, ali ne bojte se: programeri Java u snažnoj su poziciji kada je u pitanju sigurnost aplikacija. S tisućama profesionalaca koji skeniraju jezik radi ranjivosti, velika je šansa da znamo o dobrom udjelu ranjivosti u jeziku. To znanje je snaga.

Nedavni članak JavaWorld ponudio je 13 pravila za razvoj sigurnih Java aplikacija. Također možete pronaći mnoštvo članaka i tehničkih tekstova o sigurnoj implementaciji Jave u određenim okruženjima, poput sigurnosti u oblaku za Javu i sigurnosti web aplikacija za Javu. Razmotrimo nekoliko načina za smanjenje ranjivosti koje ste možda previdjeli.

Premjestite se na tijek rada DevSecOps

Jedan od načina za smanjenje ranjivosti u Java kodu je prelazak na tijek rada DevSecOps. Ova vrsta radnog tijeka čini sigurnost najvažnijom brigom u svim fazama razvojnog procesa. Kao programeri, često zaboravljamo da naš softver koriste (a ponekad i prilagođavaju) svi dijelovi organizacije za koju radimo. Nije dobro učvrstiti vaše web aplikacije protiv upada ako je vaš marketinški tim odlučan potkopati vaše napore. Uključite sve svoje timove u proces razvoja i pobrinite se da sigurnost bude bitna za svaki aspekt projekta.

Procijenite sigurnost tijeka rada

Također biste trebali dobro pogledati sigurnost vlastitog tijeka rada. Vaše web aplikacije mogu biti sigurne same po sebi, ali jedan od najbrže rastućih izvora ranjivosti za programere je sam razvojni sustav. Ako je vaš razvojni sustav hakiran, on postaje portal za ubrizgavanje zlonamjernog koda u vaš softver. Da biste to izbjegli, koristite VPN za šifriranje svih internih komunikacija. Također, svakako implementirajte šifriranu pohranu podataka.

Zaključak

Iako istraživanje otkriva da je Java manje sigurna od nekih drugih jezika, programeri bi to otkriće trebali uzeti s malo soli. Noviji i rjeđe korišteni jezici mogu se činiti sigurnijima, ali to je vjerojatno zato što mnoge njihove ranjivosti još nisu otkrivene - ili još gore, pronađene su, ali nisu prijavljene.

Iako biste trebali znati rizike i poduzeti sve razumne mjere predostrožnosti kako biste osigurali svoje Java aplikacije, ne brinite previše o ljestvici. Kao programer Jave, barem znate s čime se suočavate.

Ova priča "Koliko je Java sigurna u usporedbi s drugim jezicima?" izvorno je objavio JavaWorld.