Quanto è sicuro Java rispetto ad altri linguaggi?

Come per altri aspetti della sicurezza informatica, il livello di sicurezza del linguaggio di programmazione dipende da cosa intendiamo per "sicuro". È vero che Java ha meno vulnerabilità identificate rispetto ad altri linguaggi comunemente usati. È anche vero che alcuni linguaggi più recenti sembrano più sicuri di Java, almeno a prima vista.

Molte delle falle di sicurezza che sono state trovate in Java sono il risultato della sua popolarità. L'utilizzo diffuso significa che migliaia di cacciatori di bug si dedicano alla ricerca di vulnerabilità del linguaggio Java, il che conferisce a Java un "vantaggio" ingiusto in questo campo. Allo stesso modo, la sicurezza implicita di alcuni linguaggi più recenti, come Ruby, potrebbe riflettere il loro utilizzo di nicchia più della loro integrità.  

[Anche su JavaWorld: alcuni segnali indicano che gli sviluppatori Java stanno migliorando in termini di sicurezza.] 

In questo articolo vedremo come si posizionano i linguaggi di programmazione più comunemente usati in termini di sicurezza. Spiegherò alcuni fattori che rendono una lingua meno sicura di un'altra e perché le vulnerabilità identificate sono aumentate così tanto negli ultimi anni. Infine, suggerirò alcuni modi in cui gli sviluppatori Java possono ridurre le vulnerabilità nel codice.  

Conclusione: dal punto di vista della sicurezza, le vulnerabilità che conosciamo sono migliori di quelle che non conosciamo. 

Quanto è sicuro Java?

Una recente ricerca sulle vulnerabilità dei linguaggi di programmazione più comunemente usati è arrivata da WhiteSource, una piattaforma di sicurezza e conformità delle licenze open source. WhiteSource ha esaminato sette dei linguaggi di programmazione open source più popolari: C, Java, JavaScript, Python, Ruby, PHP e C ++. Gli analisti hanno quindi utilizzato una varietà di fonti per classificare le lingue in base al numero di vulnerabilità identificate.

Perché open source?

La decisione di classificare le lingue open source non è casuale. Molti linguaggi proprietari, comprese le implementazioni proprietarie di linguaggi open source, sono molto meno trasparenti quando si tratta di vulnerabilità. Non ha senso per un'azienda privata pubblicare falle di sicurezza nel proprio prodotto, quindi rimaniamo in gran parte all'oscuro del livello di vulnerabilità di tali lingue. I difetti che conosciamo sono molto più gestibili di quelli che non conosciamo.

Sulla base dello studio WhiteSource, il linguaggio di programmazione più vulnerabile è stato di gran lunga il C, con il 47% di tutte le vulnerabilità segnalate . Questa classifica non sorprenderà i programmatori esperti, ma altri risultati potrebbero. PHP è arrivato al secondo posto, con il 17%, seguito da Java con il 12% e JavaScript che ha completato i primi quattro con l'11%. A seguire questi "leader" sono stati Python, C ++ e Ruby. 

Comprensione della sicurezza del linguaggio di programmazione

Successivamente, dovremmo chiederci perché alcuni linguaggi di programmazione sono più vulnerabili di altri. Sulla base della ricerca che ho citato, potresti concludere che C rappresenta un'enorme minaccia alla sicurezza. Ma considera che il C è in uso da molto più tempo di qualsiasi altra lingua nell'elenco. Come afferma Stephen Turner, scrivendo sul Journal of Technology Research, "i linguaggi di programmazione sono come la genetica, in quanto sono proliferati alcuni antenati con tratti comuni". 

Essendo il linguaggio più vecchio nell'elenco, il C è stato sviluppato in un ambiente di minaccia completamente diverso dai linguaggi relativamente più recenti come Java e Ruby. Come sottolinea WhiteSource, l'età relativa di C significa che ha un volume corrispondentemente più alto di codice scritto. C è anche uno dei linguaggi utilizzati per le principali infrastrutture come OpenSSL e il kernel Linux. Questa combinazione di volume e centralità può portare a un numero maggiore di vulnerabilità open source note.

Sebbene Java funzioni bene in questa analisi, gli autori evidenziano due tipi di vulnerabilità che hanno un impatto particolare su Java. Innanzitutto, notano che US-CERT ci ha da tempo avvertito della vulnerabilità di Java agli attacchi di iniezione di log, principalmente attraverso i browser web. Tali attacchi possono essere evitati tramite la convalida o l'autenticazione dell'input inviato, ma gli sviluppatori sono spesso reticenti a convalidare completamente l'input per paura che ciò possa rendere le loro app meno user-friendly. 

In secondo luogo, Java è particolarmente vulnerabile agli exploit affidabili che seguono le vulnerabilità del controllo degli accessi. Sebbene i processi di certificazione siano migliorati dal 2013, molti sviluppatori si affidano a certificati di autorità poco affidabili. È possibile ottenere un certificato meno rigoroso di quanto dovrebbe essere. US-CERT, citato nel Journal of Technology Research, mette in guardia su questa porta aperta per gli aggressori remoti che eseguono codice arbitrario.

La vulnerabilità relativamente bassa di Java offre un interessante contrasto con C. Java è stato sviluppato molto tempo dopo C, in un ambiente in cui la consapevolezza delle minacce era molto più elevata, quindi non sorprende che Java sia molto più sicuro. Allo stesso modo, mentre Ruby sembra essere più sicuro di Java, ciò potrebbe essere spiegato dalla relativa giovinezza del linguaggio e dalla sua applicazione di nicchia.

Le vulnerabilità della sicurezza sono in aumento, più o meno

WhiteSource segnala un "aumento sostanziale del numero di vulnerabilità di sicurezza open source note in tutte le lingue negli ultimi due anni". Sebbene il numero complessivo di vulnerabilità in Java sia costantemente diminuito dal 2015, il picco più recente del numero di vulnerabilità richiede una spiegazione. Possiamo attribuire questo aumento a due fattori.  

Innanzitutto, ci sono i bug bounty, una tendenza relativamente nuova in cui migliaia di professionisti della tecnologia scelgono un linguaggio per trovare le vulnerabilità. Questi spiegano almeno in parte l'aumento delle vulnerabilità della sicurezza open source. Inoltre, si presume generalmente che i cacciatori di minacce scansionino tutte le lingue allo stesso modo, ma non è vero. Essendo uno dei linguaggi più comunemente utilizzati nello sviluppo web, Java è un obiettivo significativo per i cacciatori di minacce. In questo contesto, il terzo posto di Java per le vulnerabilità note inizia a sembrare piuttosto basso.

I sistemi software sono anche di un ordine di grandezza più complicati rispetto a 10 anni fa, il che è un altro fattore importante nel numero crescente di vulnerabilità riscontrate in Java e in altri linguaggi. In un mondo in cui le app per smartphone possono essere una fonte di infezione e in cui ogni azienda deve avere un sito Web abilitato per JavaScript, non sorprende che il numero di vulnerabilità del sito Web sia aumentato in modo esponenziale. Aggiungete a questo la carenza a lungo termine di professionisti della sicurezza informatica e le cose iniziano a sembrare cupe per il futuro della sicurezza informatica. 

Come evitare le vulnerabilità della sicurezza Java

Leggere le ricerche sulle vulnerabilità della sicurezza potrebbe farti battere forte il cuore, ma non temere: gli sviluppatori Java sono in una posizione di forza quando si tratta di sicurezza delle applicazioni. Con migliaia di professionisti che scansionano la lingua alla ricerca di vulnerabilità, ci sono buone probabilità che conosciamo una buona parte delle vulnerabilità nella lingua. Quella conoscenza è potere.

Un recente articolo di JavaWorld ha offerto 13 regole per lo sviluppo di applicazioni Java sicure. È inoltre possibile trovare numerosi articoli e white paper sull'implementazione sicura di Java in ambienti specifici, come la sicurezza del cloud per Java e la sicurezza delle app Web per Java. Consideriamo un paio di modi per ridurre le vulnerabilità che potresti aver trascurato.

Passa a un flusso di lavoro DevSecOps

Un modo per ridurre le vulnerabilità nel codice Java è passare a un flusso di lavoro DevSecOps. Questo tipo di flusso di lavoro rende la sicurezza una preoccupazione fondamentale in tutte le fasi del processo di sviluppo. Come sviluppatori, spesso dimentichiamo che il nostro software viene utilizzato (e talvolta adattato) da tutte le parti dell'organizzazione per cui lavoriamo. Non serve a rafforzare le tue app web contro le intrusioni se il tuo team di marketing è determinato a minare i tuoi sforzi. Includi tutti i tuoi team nel processo di sviluppo e assicurati che la sicurezza sia una considerazione per ogni aspetto del progetto.

Valuta la sicurezza del flusso di lavoro

Dovresti anche dare una buona occhiata alla sicurezza del tuo flusso di lavoro. Le tue app web potrebbero essere sicure di per sé, ma una delle fonti di vulnerabilità in più rapida crescita per gli sviluppatori è il sistema di sviluppo stesso. Se il tuo sistema di sviluppo viene violato, diventa un portale per l'iniezione di codice dannoso nel tuo software. Per evitare ciò, assicurati di utilizzare una VPN per crittografare tutte le tue comunicazioni interne. Inoltre, assicurati di implementare l'archiviazione dei dati crittografata.

Conclusione

Sebbene la ricerca abbia rilevato che Java è meno sicuro di alcuni altri linguaggi, gli sviluppatori dovrebbero prendere questa scoperta con le pinze. Le lingue più recenti e meno comunemente usate potrebbero sembrare più sicure, ma è probabile che molte delle loro vulnerabilità non siano state ancora scoperte o, peggio ancora, siano state trovate ma non segnalate.

Anche se dovresti conoscere i rischi e prendere tutte le ragionevoli precauzioni per proteggere le tue app Java, non preoccuparti troppo delle classifiche. Come sviluppatore Java, almeno sai con cosa ti trovi di fronte.

Questa storia, "Quanto è sicuro Java rispetto ad altri linguaggi?" è stato originariamente pubblicato da JavaWorld.