Renforcer la sécurité des applications Java contre les menaces de la chaîne d'approvisionnement
Un système pour prévenir les attaques sur les applications Java en utilisant une liste blanche de classes.
― 6 min lire
Table des matières
La chaîne d'approvisionnement logicielle est super importante pour développer des applis aujourd'hui, mais ça amène aussi des risques. Beaucoup de développeurs utilisent des bibliothèques tierces, ce qui peut créer des problèmes de sécurité. Si ces bibliothèques ont des failles, elles peuvent être exploitées par des attaquants. Un des attaques les plus connues s'appelle Log4Shell, qui a permis à du code malveillant de s'exécuter sur le serveur. Cet article parle d'un nouveau système qui aide à prévenir ces attaques dans les applications Java.
Le Problème
Avec la croissance du développement logiciel, la dépendance au code externe a augmenté. Ça introduit des vulnérabilités, surtout quand du code non vérifié est exécuté. Beaucoup d'attaques récentes ont visé cette faiblesse, exploitant des failles dans des bibliothèques populaires pour exécuter des commandes nuisibles à distance. Les méthodes de sécurité traditionnelles peuvent repérer ces problèmes pendant le développement, mais échouent souvent à protéger pendant l'exécution.
La Solution
Notre système proposé crée une liste autorisée de classes qui peuvent s'exécuter dans une application Java. Cette liste est faite sur la base de la chaîne d'approvisionnement logicielle de l'appli. En s'assurant que seules les classes de confiance sont exécutées, le système peut bloquer toutes les classes non reconnues ou modifiées pendant l'exécution.
Comment ça Marche
Création de la Liste Autorisée
Pendant la phase de construction d'une appli, le système analyse toutes les classes, créant une liste appelée Index de la Liste des Matériaux (BOMI). Cette liste inclut des classes des bibliothèques Java de base, des classes écrites par des développeurs et toutes les classes générées dynamiquement.
Classes de l'Environnement : Ce sont des classes Java intégrées. Le système enregistre les sommes de contrôle pour ces classes, qui servent d'identifiants uniques.
Classes de la Chaîne d'Approvisionnement : Ces classes viennent de bibliothèques tierces. Le système fait l'inventaire de toutes les bibliothèques et de leurs classes pour créer une liste complète.
Classes Dynamiques : Java permet de générer des classes pendant que l'appli s'exécute. Le système surveille l'appli pendant les tests pour enregistrer toutes les classes créées dynamiquement.
Surveillance en Temps Réel
Une fois le BOMI créé, l'appli peut être surveillée pendant l'exécution. Un composant appelé le SBOM Runtime Watchdog est activé. Il vérifie chaque classe chargée par rapport au BOMI.
- Si la classe est dans le BOMI et que la somme de contrôle correspond, elle peut s'exécuter.
- Si la classe n'est pas trouvée ou si la somme de contrôle ne correspond pas, l'appli est immédiatement arrêtée. Ça empêche tout code potentiellement nuisible de s'exécuter.
Pourquoi C'est Important
Ce système répond directement à un problème critique : la capacité d'exécuter des classes inconnues. En maintenant une liste autorisée stricte et en surveillant le chargement des classes, le système peut réduire efficacement le risque posé par les fonctionnalités de chargement de classes dynamiques en Java.
Tester le Système
Pour valider l'efficacité de notre système, nous l'avons testé contre trois vulnérabilités significatives connues dans le paysage de la sécurité.
Log4j : La vulnérabilité Log4Shell a montré comment des attaquants pouvaient exécuter un code malveillant via une bibliothèque de logging. Notre système a réussi à empêcher l'exécution de ce code malveillant en le comparant au BOMI.
Base de Données H2 : Ce moteur de base de données était aussi vulnérable à des attaques similaires. Nous avons reproduit les conditions d'un potentiel exploit et notre système a de nouveau empêché tout code nuisible de s'exécuter.
Configuration Apache Commons : En utilisant le moteur JavaScript Nashorn, qui était intégré avec Java, cette vulnérabilité a montré comment du code JavaScript pouvait mener à de graves problèmes de sécurité. Notre système a efficacement intercepté le code malveillant avant qu'il ne puisse s'exécuter.
Applicabilité dans le Monde Réel
Nous avons aussi évalué notre système sur des applications réelles pour mesurer son impact et sa performance. Nous avons testé sa compatibilité avec des logiciels existants, en visant à nous assurer qu'il n'interfère pas avec des opérations légitimes.
PDFBox : Cette appli manipule des fichiers PDF et a été testée sous une charge de travail impliquant diverses opérations PDF. Notre système a fonctionné sans faux positifs, identifiant et permettant avec succès les opérations légitimes.
Ttorrent : Une appli de téléchargement en peer-to-peer a été évaluée, gérant avec succès la génération de classes dynamiques sans interruptions.
GraphHopper : Cette appli de routage a été plus difficile, révélant que certaines classes générées dynamiquement ne pouvaient pas être capturées à cause de leur nature aléatoire. Néanmoins, le système a réussi à bloquer efficacement le code non autorisé.
Considérations de Performance
Un aspect clé de tout système de sécurité est son impact sur la performance. Nous avons mesuré l'overhead introduit par notre système pendant les opérations :
- Pendant le démarrage initial et la vérification des classes, il y a un overhead noticeable à cause des processus de validation et de somme de contrôle.
- Cependant, après le premier échauffement, l'impact sur la performance devient minimal, ce qui le rend adapté pour des applications à long terme.
Conclusion
L'intégration de notre système dans les applications Java améliore significativement la sécurité contre les attaques de la chaîne d'approvisionnement qui exploitent l'exécution de code dynamique. En créant un BOMI détaillé et en surveillant activement le chargement des classes, nous pouvons efficacement assurer l'intégrité des applications Java dans un paysage logiciel complexe.
Directions Futures
En regardant vers l'avenir, nous visons à étendre les capacités de notre système, en nous concentrant sur la détection de classes cachées que les méthodologies actuelles peuvent négliger. Nous prévoyons aussi d'explorer des comparaisons avec d'autres technologies qui traitent de préoccupations de sécurité similaires. Globalement, notre approche pose une base solide pour améliorer la sécurité des logiciels face à des menaces en évolution.
Titre: SBOM.EXE: Countering Dynamic Code Injection based on Software Bill of Materials in Java
Résumé: Software supply chain attacks have become a significant threat as software development increasingly relies on contributions from multiple, often unverified sources. The code from unverified sources does not pose a threat until it is executed. Log4Shell is a recent example of a supply chain attack that processed a malicious input at runtime, leading to remote code execution. It exploited the dynamic class loading facilities of Java to compromise the runtime integrity of the application. Traditional safeguards can mitigate supply chain attacks at build time, but they have limitations in mitigating runtime threats posed by dynamically loaded malicious classes. This calls for a system that can detect these malicious classes and prevent their execution at runtime. This paper introduces SBOM.EXE, a proactive system designed to safeguard Java applications against such threats. SBOM.EXE constructs a comprehensive allowlist of permissible classes based on the complete software supply chain of the application. This allowlist is enforced at runtime, blocking any unrecognized or tampered classes from executing. We assess SBOM.EXE's effectiveness by mitigating 3 critical CVEs based on the above threat. We run our tool with 3 open-source Java applications and report that our tool is compatible with real-world applications with minimal performance overhead. Our findings demonstrate that SBOM.EXE can effectively maintain runtime integrity with minimal performance impact, offering a novel approach to fortifying Java applications against dynamic classloading attacks.
Auteurs: Aman Sharma, Martin Wittlinger, Benoit Baudry, Martin Monperrus
Dernière mise à jour: 2024-06-28 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2407.00246
Source PDF: https://arxiv.org/pdf/2407.00246
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.
Liens de référence
- https://www.figma.com/file/hJy2ipZIE6zxGpZl4edy20/Untitled?type=design&node-id=0%3A1&mode=design&t=hIPopkVquOTQXC0o-1
- https://ctan.org/pkg/etoolbox
- https://github.com/chains-project/sbom.exe
- https://hacker.com/Exploit.class
- https://nvd.nist.gov/vuln/detail/CVE-2021-44228
- https://nvd.nist.gov/vuln/detail/CVE-2021-42392
- https://nvd.nist.gov/vuln/detail/CVE-2022-33980
- https://github.com/apache/pdfbox
- https://github.com/mpetazzoni/ttorrent
- https://github.com/graphhopper/graphhopper/
- https://central.sonatype.com/artifact/com.h2database/h2/1.4.200
- https://central.sonatype.com/artifact/org.apache.logging.log4j/log4j-core/2.14.1
- https://central.sonatype.com/artifact/org.apache.commons/commons-configuration2/2.7
- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox-app/3.0.2
- https://mvnrepository.com/artifact/com.turn/ttorrent-cli/1.5
- https://mvnrepository.com/artifact/com.graphhopper/graphhopper-web/9.1
- https://www.flaticon.com/