Quel est le niveau de sécurité de Java par rapport aux autres langages?

Comme pour d'autres aspects de la cybersécurité, le niveau de sécurité du langage de programmation dépend de ce que nous entendons par «sécurisé». Il est vrai que Java a moins de vulnérabilités identifiées que certains autres langages couramment utilisés. Il est également vrai que certains langages plus récents semblent plus sécurisés que Java, du moins à première vue.

La plupart des failles de sécurité trouvées dans Java sont le résultat de sa popularité. Une utilisation généralisée signifie que des milliers de chasseurs de bogues se consacrent à la recherche de vulnérabilités du langage Java, ce qui donne à Java un «avantage» injuste dans ce domaine. De même, la sécurité implicite de certains langages plus récents, comme Ruby, pourrait refléter leur utilisation de niche plus que leur intégrité.  

[Également sur JavaWorld: certains signes indiquent que les développeurs Java s'améliorent en matière de sécurité.] 

Dans cet article, nous verrons comment les langages de programmation les plus couramment utilisés se classent en termes de sécurité. J'expliquerai certains facteurs qui rendent une langue moins sûre qu'une autre, et pourquoi les vulnérabilités identifiées ont tellement augmenté ces dernières années. Enfin, je suggérerai quelques moyens aux développeurs Java de réduire les vulnérabilités du code.  

Conclusion: du point de vue de la sécurité, les vulnérabilités que nous connaissons sont meilleures que celles que nous ne connaissons pas. 

Quelle est la sécurité de Java?

Des recherches récentes sur les vulnérabilités des langages de programmation les plus couramment utilisés proviennent de WhiteSource, une plate-forme de sécurité et de conformité de licence open source. WhiteSource a examiné sept des langages de programmation open-source les plus populaires: C, Java, JavaScript, Python, Ruby, PHP et C ++. Les analystes ont ensuite utilisé diverses sources pour classer les langages en fonction du nombre de vulnérabilités identifiées.

Pourquoi l'open source?

La décision de classer les langues open source n'est pas fortuite. De nombreux langages propriétaires, y compris les implémentations propriétaires de langages open source, sont beaucoup moins transparents en ce qui concerne les vulnérabilités. Cela n'a pas de sens pour une entreprise privée de publier des failles de sécurité dans son produit, nous restons donc largement dans l'ignorance du niveau de vulnérabilité de ces langages. Les défauts que nous connaissons sont beaucoup plus gérables que ceux que nous ne connaissons pas.

D'après l'étude WhiteSource, le langage de programmation le plus vulnérable était de loin C, avec 47% de toutes les vulnérabilités signalées . Ce classement ne surprendra pas les programmeurs expérimentés, mais d'autres résultats pourraient le faire. PHP est arrivé en deuxième position, avec 17%, suivi de Java avec 12% et JavaScript complétant le top quatre avec 11%. A la suite de ces «leaders» se trouvaient Python, C ++ et Ruby. 

Comprendre la sécurité du langage de programmation

Ensuite, nous devrions nous demander pourquoi certains langages de programmation sont plus vulnérables que d'autres. Sur la base des recherches que j'ai citées, vous pourriez conclure que C représente une énorme menace pour la sécurité. Mais considérez que C est utilisé depuis beaucoup plus longtemps que toute autre langue de la liste. Comme Stephen Turner, écrit dans le Journal of Technology Research, le dit, «les langages de programmation sont comme la génétique, en ce sens qu'il y a quelques ancêtres avec des traits communs qui ont proliféré». 

En tant que langage le plus ancien de la liste, C a été développé dans un environnement de menace complètement différent des langages relativement plus récents comme Java et Ruby. Comme le souligne WhiteSource, l'âge relatif de C signifie qu'il a un volume de code écrit proportionnellement plus élevé. C est également l'un des langages utilisés pour les infrastructures majeures comme OpenSSL et le noyau Linux. Cette combinaison de volume et de centralité peut conduire à un nombre plus élevé de vulnérabilités open source connues.

Bien que Java se comporte bien dans cette analyse, les auteurs mettent en évidence deux types de vulnérabilité qui affectent particulièrement Java. Premièrement, ils notent que US-CERT nous a longtemps mis en garde contre la vulnérabilité de Java aux attaques par injection de journaux, principalement via les navigateurs Web. De telles attaques peuvent être évitées par la validation ou l'authentification des entrées soumises, mais les développeurs sont souvent réticents à valider les entrées de manière approfondie de peur que cela ne rende leurs applications moins conviviales. 

Deuxièmement, Java est particulièrement vulnérable aux exploits de confiance qui suivent des vulnérabilités de contrôle d'accès. Bien que les processus de certification se soient améliorés depuis 2013, de nombreux développeurs s'appuient sur des certificats d'autorités qui sont moins que fiables. Il est possible d'obtenir un certificat moins strict qu'il ne devrait l'être. US-CERT, cité dans le Journal of Technology Research, met en garde contre cette porte ouverte aux attaquants distants exécutant du code arbitraire.

La vulnérabilité relativement faible de Java offre un contraste intéressant avec C. Java a été développé longtemps après C, dans un environnement où la conscience des menaces était beaucoup plus élevée, il n'est donc pas surprenant que Java soit beaucoup plus sécurisé. De même, si Ruby semble être plus sûr que Java, cela pourrait s'expliquer par la relative jeunesse du langage et son application de niche.

Les vulnérabilités de sécurité sont en augmentation - en quelque sorte

WhiteSource signale une "augmentation substantielle du nombre de vulnérabilités de sécurité open source connues dans toutes les langues au cours des deux dernières années". Bien que le nombre global de vulnérabilités en Java ait régulièrement diminué depuis 2015, le pic plus récent du nombre de vulnérabilités nécessite une explication. On peut attribuer cette augmentation à deux facteurs.  

Premièrement, il y a les primes de bogues, une tendance relativement nouvelle dans laquelle des milliers de professionnels de la technologie choisissent un langage pour trouver des vulnérabilités. Ceux-ci expliquent au moins une partie de l'augmentation des vulnérabilités de sécurité open source. De plus, on suppose généralement que les chasseurs de menaces analysent toutes les langues de la même manière, mais ce n'est pas vrai. En tant que l'un des langages les plus couramment utilisés dans le développement Web, Java est une cible importante pour les chasseurs de menaces. Dans ce contexte, le classement de la troisième place de Java pour les vulnérabilités connues commence à paraître assez bas.

Les systèmes logiciels sont également d'un ordre de grandeur plus compliqués qu'ils ne l'étaient il y a 10 ans, ce qui est un autre facteur majeur du nombre croissant de vulnérabilités trouvées en Java et dans d'autres langages. Dans un monde où les applications pour smartphone peuvent être une source d'infection et où chaque entreprise doit disposer d'un site Web compatible JavaScript, il n'est pas surprenant que le nombre de vulnérabilités de sites Web ait augmenté de façon exponentielle. Ajoutez à cela la pénurie à long terme de professionnels de la cybersécurité, et les choses commencent à paraître sinistres pour l'avenir de la cybersécurité. 

Comment éviter les vulnérabilités de sécurité Java

La lecture des recherches sur les vulnérabilités de sécurité peut faire battre votre cœur plus vite, mais n'ayez crainte: les développeurs Java sont en bonne position en matière de sécurité des applications. Avec des milliers de professionnels analysant le langage à la recherche de vulnérabilités, il y a de fortes chances que nous connaissions une bonne proportion des vulnérabilités dans le langage. Cette connaissance est le pouvoir.

Un article récent de JavaWorld proposait 13 règles pour développer des applications Java sécurisées. Vous pouvez également trouver de nombreux articles et livres blancs sur la mise en œuvre sécurisée de Java dans des environnements spécifiques, tels que la sécurité du cloud pour Java et la sécurité des applications Web pour Java. Examinons quelques façons de réduire les vulnérabilités que vous auriez peut-être négligées.

Passer à un workflow DevSecOps

Une façon de réduire les vulnérabilités dans le code Java consiste à passer à un flux de travail DevSecOps. Ce type de flux de travail fait de la sécurité une préoccupation primordiale à toutes les étapes du processus de développement. En tant que développeurs, nous oublions souvent que nos logiciels sont utilisés (et parfois adaptés) par toutes les parties de l'organisation pour laquelle nous travaillons. Il n'est pas bon de renforcer vos applications Web contre les intrusions si votre équipe marketing est déterminée à saper vos efforts. Incluez toutes vos équipes dans le processus de développement et assurez-vous que la sécurité est une considération pour chaque aspect du projet.

Évaluer la sécurité du flux de travail

Vous devez également examiner attentivement la sécurité de votre propre flux de travail. Vos applications Web peuvent être sécurisées en elles-mêmes, mais l'une des sources de vulnérabilité les plus dynamiques pour les développeurs est le système de développement lui-même. Si votre système de développement est piraté, il devient un portail pour injecter du code malveillant dans votre logiciel. Pour éviter cela, assurez-vous d'utiliser un VPN pour crypter toutes vos communications internes. Assurez-vous également de mettre en œuvre un stockage de données crypté.

Conclusion

Bien que la recherche révèle que Java est moins sécurisé que certains autres langages, les développeurs devraient prendre cette découverte avec une pincée de sel. Les langues plus récentes et moins utilisées peuvent sembler plus sûres, mais c'est probablement parce que beaucoup de leurs vulnérabilités n'ont pas encore été découvertes - ou pire, elles ont été trouvées mais pas signalées.

Bien que vous deviez connaître les risques et prendre toutes les précautions raisonnables pour sécuriser vos applications Java, ne vous inquiétez pas trop du classement. En tant que développeur Java, vous savez au moins à quoi vous vous heurtez.

Cette histoire, "Quel est le niveau de sécurité de Java par rapport aux autres langages?" a été initialement publié par JavaWorld.