Si, comme environ 10 millions d’autres personnes, vous êtes un développeur Java, vous voulez probablement savoir comment sécuriser le code Java. Les développeurs devront toujours se tenir au courant des conseils et des meilleures pratiques pour résoudre les problèmes de sécurité Java.
Java est le langage de programmation le plus populaire aujourd’hui, avec raison. Le code Java est multiplateforme. La programmation Java est largement enseignée dans les départements d’informatique universitaires. Tant de programmeurs aux yeux impatients entrent dans leurs premiers emplois prêts à coder en Java. Et la conception orientée objet de Java facilite la réutilisation du code.
Pourtant, malgré la popularité de Java, il serait difficile de trouver quelqu’un qui soutiendrait que Java est le langage de programmation le plus sécurisé du marché. Les problèmes de sécurité Java sont réels. Java a été conçu pour être aussi sécurisé que la plupart des autres langages de programmation populaires, et il offre des fonctionnalités telles que SecurityManager pour aider à améliorer la sécurité dans certains contextes. Cependant, les applications Java sont soumises à un certain nombre de vulnérabilités de sécurité potentielles, y compris, mais sans s’y limiter, diverses attaques par injection.
Il est crucial pour les développeurs et les administrateurs Java de garder à l’esprit les vulnérabilités de sécurité Java courantes lorsqu’ils écrivent et déploient des applications Java. La programmation axée sur la sécurité est particulièrement importante dans le cas de Java, car la nature multiplateforme du code Java signifie que les cadres de sécurité au niveau du système d’exploitation ne peuvent pas toujours être fiables pour sécuriser les applications.
Vous ne devez pas non plus vous attendre à ce que les utilisateurs finaux soient en mesure de gérer efficacement les menaces de sécurité Java. Bien sûr, vous pouvez reprocher à vos utilisateurs d’exécuter du code Java non approuvé ou de désactiver les mises à jour automatiques de leurs runtimes Java, mais en fin de compte, la charge d’écrire des applications Java sécurisées et d’isoler le code dans un environnement Java qui pourrait ne pas être sécurisé incombe aux développeurs.
Problèmes de sécurité Java courants
Les programmeurs Java doivent garder à l’esprit les défis de sécurité suivants lorsqu’ils conçoivent et écrivent des applications Java.
Injections SQL
Les injections SQL se produisent lorsqu’un attaquant insère du code de requête SQL malveillant dans un formulaire. Si l’application ne parvient pas à détecter le code malveillant et le transmet à une base de données, celle-ci pourrait être modifiée de manière nuisible ou des données sensibles pourraient être exposées à des parties non autorisées.
La prolifération des outils automatisés pour les injections SQL fait des attaques par injection SQL un défi de sécurité généralisé pour les applications Java et, d’ailleurs, pratiquement tout autre type d’application qui pourrait se connecter à une base de données aujourd’hui.
La solution aux attaques par injection SQL en Java est assez simple: Assurez-vous que votre application valide correctement les entrées et empêche l’ajout de code malveillant aux données déjà acceptées dans un formulaire. En règle générale et si possible, évitez les requêtes dynamiques pour atténuer le risque d’injections SQL dans les applications Java. La classe PreparedStatement de Java peut également être utile pour prévenir les attaques SQL.
Injections LDAP Java
Les attaques par injection qui exploitent des instructions LDAP (Lightweight Directory Access Protocol) représentent une autre attaque courante sur les applications Java. Ici encore, la validation des entrées est la clé pour prévenir les attaques.
En particulier, les développeurs Java peuvent contrecarrer la plupart des types d’attaques par injection LDAP s’ils échappent aux caractères spéciaux LDAP.
Autres types d’attaques par injection Java
Nous avons déjà couvert les injections SQL et les injections LDAP, mais les attaques par injection dans les applications Java ne s’arrêtent pas là. Les injections de chaînes de connexion, les injections de script intersite (XSS) et d’autres types d’attaques sont tous possibles.
Ces types d’attaques ne s’appliquent pas à toutes les applications Java – XSS n’est vraiment qu’un risque sérieux avec les applications Web, par exemple – mais elles rappellent encore pourquoi la validation des entrées est si importante.
Vulnérabilités de SecurityManager
SecurityManager est conçu pour que vous puissiez exécuter un bytecode non approuvé en toute sécurité dans les applications Java. SecurityManager bac à sable le bytecode afin d’éviter les attaques.
Cela fait de SecurityManager une excellente ressource pour la sécurité Java – à condition, bien sûr, que cela fonctionne correctement. Le principal risque de SecurityManager est l’historique des vulnérabilités de sécurité survenues au sein de SecurityManager lui-même. Ces vulnérabilités permettent parfois au code isolé de sortir du bac à sable et d’exécuter des attaques.
Dans une certaine mesure, la gestion des problèmes de sécurité SecurityManager et Java est un problème non pas pour les développeurs mais pour les administrateurs système, qui doivent tenir les runtimes Java à jour. Cependant, les développeurs peuvent faire leur part et éviter les bacs à sable lorsque cela est possible. En d’autres termes, ne faites pas aveuglément confiance à SecurityManager. Si vous devez l’utiliser dans une application, utilisez-le. Mais si vous pouvez obtenir les fonctionnalités dont vous avez besoin sans cela, atténuez les risques de sécurité Java et évitez-les.
Pots malveillants
Lorsqu’une application Java charge des POTS au moment de l’exécution, un pirate informatique peut parfois tromper l’application en liant des POTS malveillants. C’est un vieux problème de sécurité, et Java a introduit un certain nombre de contrôles au fil des ans pour aider à le prévenir.
Certaines de ces fonctionnalités d’atténuation des attaques agissent de leur propre chef, mais les développeurs peuvent en tirer pleinement parti en signant des fichiers JAR. De cette façon, les signatures sont vérifiées au moment de l’exécution et empêchent les intrusions. Les programmeurs peuvent également atténuer la menace posée par les POTS malveillants en restreignant les privilèges d’accès de classes spécifiques de sorte que, si du code malveillant est chargé, les stratégies de sécurité naturelles limiteront les dommages que le code malveillant peut causer.