Faire avancer les frameworks de test pour les bibliothèques cryptographiques
Un nouveau cadre améliore l'efficacité des tests et la détection de bugs dans les bibliothèques cryptographiques.
― 9 min lire
Table des matières
- Challenges in Testing
- Automated Cryptographic Validation Protocol (ACVP)
- Contributions of This Work
- Related Work
- Introducing ACVP Test Generation Framework
- Hybrid Fuzzing Approach
- Improving NSS Testing Coverage
- Discovering Bugs in NSS
- Analysis of Coverage Improvement
- Suggestions for Improving ACVP Test Vector Format
- Conclusion
- Source originale
- Liens de référence
Tester des logiciels de manière approfondie est super important pour s'assurer qu'ils fonctionnent bien, surtout dans les bibliothèques cryptographiques qui gèrent des infos sensibles. Les erreurs humaines mènent souvent à des problèmes dans les logiciels, comme des programmes qui vérifient mal la taille des entrées. Ça peut créer des vulnérabilités, donnant accès à des intrus. Même si beaucoup de langages de programmation proposent des solutions à ces soucis, la performance est essentielle dans l'écriture de logiciels cryptographiques. Du coup, les programmeurs préfèrent souvent des langages de bas niveau comme C ou C++.
Une façon de garantir la justesse du code de bas niveau est de passer par des tests automatisés, qui vérifient l'exécution du programme sans intervention humaine, ce qui fait gagner du temps et de l'argent. Les tests automatisés présentent divers défis, et l'idée est de fournir des entrées au programme pour voir s'il produit les résultats attendus.
Challenges in Testing
La couverture est un facteur important dans les tests ; elle mesure à quel point un programme a été testé et identifie les zones qui pourraient rester non testées. Le fuzz testing, ou fuzzing, est une forme de test automatisé qui fait tourner le logiciel cible avec des entrées aléatoires pour dénicher des erreurs.
Ces dernières années, un type de fuzzing appelé fuzzing grey-box basé sur la couverture (CGF) a vu le jour. Cette technique améliore le processus de test en ajoutant des marqueurs spéciaux dans le code, ce qui aide à rassembler des données sur la quantité du programme exécutée. Plus de retours sont recueillis, plus la méthode utilise ces données pour identifier quelles entrées changer pour maximiser la couverture.
Cependant, atteindre des objectifs de couverture complexes peut être gourmand en ressources. Pour y faire face, les chercheurs ont exploré différentes méthodes, comme l'utilisation du support matériel ou l'exécution symbolique.
Automated Cryptographic Validation Protocol (ACVP)
En 1995, un programme a été lancé pour valider des modules cryptographiques, s'assurant qu'ils fonctionnaient comme prévu. Le besoin de cycles de test plus rapides a conduit au développement du Protocole de Validation Cryptographique Automatisé (ACVP). Ce protocole permet le test automatique des logiciels ou matériels cryptographiques. Il inclut un format universel pour les données de test, facilitant son utilisation.
L'ACVP implique trois principaux composants : un serveur, un proxy et un client. Le serveur gère les demandes de données de test et de validation, tandis que le proxy se connecte aux systèmes hors ligne pour relayer les infos. Le client communique directement avec le système testé.
Les tests de l'ACVP couvrent divers primitives cryptographiques et les tests sont regroupés en ensembles. Chaque ensemble contient des infos sur l'algorithme, les spécifications révisées et une série de tests détaillant ce qui doit être exécuté. Le module examiné doit répondre à chaque ensemble avec un résultat structuré.
Contributions of This Work
Cette recherche se concentre sur la création d'un système complet pour générer des tests pour des bibliothèques cryptographiques. Ce système propose un format simple, lisible par l'homme et flexible. Plusieurs outils s'interfacent avec l'ACVP, mais beaucoup sont codés en C, ce qui entraîne de la complexité et un manque d'extensibilité.
Pour améliorer ça, une nouvelle bibliothèque a été développée en utilisant Rust, connue pour son typage fort et son accent sur la sécurité. Le projet inclut :
- Un cadre logiciel pour produire et exécuter des ensembles de tests pour des bibliothèques cryptographiques.
- Une méthode qui utilise l'assistance humaine pour améliorer la génération de vecteurs de test.
- Des suggestions pour des améliorations du format ACVP, ainsi que de nouvelles spécifications.
Les tests approfondis ont révélé des bugs cachés dans la bibliothèque cryptographique NSS de Mozilla, confirmant que le cadre développé aide à détecter les bugs.
Related Work
Le fuzzing est un domaine en constante évolution. De nombreux fuzzers guidés par la couverture sont matures et rivalisent pour de meilleures performances. Voici quelques exemples :
AFL++ : Un outil open-source basé sur des versions antérieures d'AFL. Il utilise les retours du code exécuté pour muter les entrées et vise une meilleure couverture. Cependant, il peut avoir du mal avec des logiciels cryptographiques complexes à cause de la génération d'entrées aléatoires.
LibFuzzer : Intégré dans le framework de compilation LLVM, cet outil effectue un fuzzing conscient de la structure. Bien qu'il génère des tests complets, il fait également face à des défis, surtout pour répondre à des conditions spécifiques des implémentations cryptographiques.
Fuzztruction : Cette méthode améliore les sorties en altérant le programme qui les produit. Mais, elle nécessite l'existence du programme original.
Carpetfuzz : Cet outil utilise le traitement du langage naturel pour créer des entrées à partir de la documentation, bien qu'il dépende fortement de la présence de documentation pertinente.
Introducing ACVP Test Generation Framework
L'ACVP fournit un format de test universel, mais il y a un besoin évident de logiciels pouvant l'adapter facilement à diverses bibliothèques cryptographiques. Le nouveau cadre permet de générer des tests avec fuzzing, en utilisant des retours pour valider les bibliothèques.
Le cadre se compose de deux parties principales :
- Runners : Ces adaptateurs se connectent à des bibliothèques tierces, fournissant une interface commune.
- Library : Cette logique partagée gère le parsing des tests ACVP et la coordination avec les runners.
Les utilisateurs peuvent exécuter des tests sur un runner pour valider un module ou faire du fuzzing pour détecter des soucis, améliorant ainsi le processus de test pour n'importe quelle bibliothèque compilée par LLVM.
Hybrid Fuzzing Approach
Le fuzzing est efficace pour découvrir des erreurs à partir d'entrées inattendues, mais il peut avoir du mal à produire une couverture approfondie car beaucoup d'entrées sont rejetées tôt. Cette recherche met en œuvre un fuzzing hybride, combinant un fuzzing de mutation de base avec un traducteur de cas de test. Cette approche aide à produire les entrées nécessaires qui répondent à des conditions spécifiques.
En utilisant le fuzzing hybride, le système cherche à trouver des entrées profondes, tandis que l'implication humaine aide à naviguer dans les parties difficiles. En conséquence, les ensembles de tests générés peuvent être appliqués à d'autres bibliothèques, rendant le processus efficace à travers différentes plateformes.
Improving NSS Testing Coverage
La bibliothèque NSS, utilisée par diverses applications, a été testée pour s'assurer que les modifications de code ne brisent pas la cryptographie. Bien que la bibliothèque ait réussi de nombreux tests, d'autres améliorations ont été mises en œuvre sur la base de ce travail.
En développant un runner pour NSS, des vérifications supplémentaires ont été introduites, s'assurant que tous les bords du code soient testés correctement. L'effort vise à couvrir plus d'aspects de la cryptographie, y compris la génération de signatures et la population des clés.
Discovering Bugs in NSS
En améliorant les tests de NSS, des bugs ont été découverts qui étaient auparavant indétectés. Par exemple, des problèmes liés aux opérations RSA sont survenus, entraînant un accès mémoire inapproprié. Bien que ces bugs n'aient pas été exploités dans les logiciels existants, ils soulignent la nécessité de divers cas de test pour couvrir efficacement différents scénarios limites.
Les bugs trouvés lors des tests soulignent l'importance d'inclure un large éventail de cas de test pour sécuriser les logiciels contre des vulnérabilités potentielles. La méthodologie fournie par le fuzzing hybride permet aux chercheurs de couvrir des zones difficiles que les tests traditionnels pourraient manquer.
Analysis of Coverage Improvement
Mesurer la couverture implique généralement de regarder le pourcentage de code couvert lors des tests. L'accent n'est pas seulement sur combien de code est testé, mais aussi sur le nombre de problèmes qui sont soit découverts soit empêchés. Les tests effectués dans cette recherche ont montré des améliorations significatives en termes de couverture.
La méthode hybride permet au processus de test d'explorer des zones du code qui sont souvent difficiles à atteindre. Les résultats montrent que le cadre non seulement augmente la couverture, mais améliore aussi la qualité globale du fuzzing, menant à une découverte plus efficace des problèmes potentiels.
Suggestions for Improving ACVP Test Vector Format
Sur la base des résultats du processus de test, des recommandations ont été faites pour améliorer le format de test ACVP. Celles-ci incluent :
- Introduire des structures plus claires pour un parsing et un traitement plus faciles.
- Simplifier la création de tests en permettant le partage de données entre les groupes de tests.
Ces changements visent à améliorer l'utilisabilité globale du système ACVP, rendant plus simple pour les développeurs la mise en œuvre de tests liés à la cryptographie.
Conclusion
En résumé, un nouveau cadre logiciel a été développé pour analyser efficacement les bibliothèques cryptographiques. L'objectif principal de cette initiative est d'identifier les bugs potentiels dans le code. Des tests approfondis ont montré que cette approche produit des tests efficaces et réutilisables parmi diverses bibliothèques. De plus, l'application réussie du cadre sur la bibliothèque NSS illustre son efficacité à dénicher des vulnérabilités.
Ce projet souligne l'importance de tests réfléchis et la nécessité de cas de test divers pour couvrir à la fois les conditions standard et limites. À l'avenir, il y a plein d'opportunités pour élargir ce travail, y compris le développement de nouvelles spécifications et l'automatisation de davantage du processus de test.
Le soutien à la science ouverte et à la recherche reproductible sous-tend ces efforts, avec l'objectif de permettre à d'autres chercheurs de bénéficier des découvertes et des outils développés dans ce travail.
Titre: Point Intervention: Improving ACVP Test Vector Generation Through Human Assisted Fuzzing
Résumé: Automated Cryptographic Validation Protocol (ACVP) is an existing protocol that is used to validate a software or hardware cryptographic module automatically. In this work, we present a system providing the method and tools to produce well-covering tests in ACVP format for cryptographic libraries. The system achieves better coverage than existing fuzzing methods by using a hybrid approach to fuzzing cryptographic primitives. In addition, the system offers a framework that allows to creates easily and securely create testing modules for cryptographic libraries. The work demonstrates how this system has been used to improve automated testing of NSS (Network Security Services), a popular cryptographic library, detect its vulnerabilities and suggest ways to improve and further develop the ACVP test format.
Auteurs: Iaroslav Gridin, Antonis Michalas
Dernière mise à jour: 2024-07-11 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2407.08535
Source PDF: https://arxiv.org/pdf/2407.08535
Licence: https://creativecommons.org/licenses/by-sa/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://firefox-source-docs.mozilla.org/security/nss/index.html
- https://anonymous.4open.science/r/acvpframe/
- https://gitlab.com/nisec/acvp-rust
- https://www.rdocumentation.org/packages/exomePeak/versions/2.6.0/topics/bltest
- https://searchfox.org/nss/source/cmd/bltest/tests/sha256
- https://searchfox.org/nss/source/cmd/bltest/tests/aes_gcm
- https://searchfox.org/nss/source/cmd/bltest/tests/rsa
- https://searchfox.org/nss/source/cmd/bltest/tests/rsa_pss
- https://searchfox.org/nss/source/cmd/bltest/tests/rsa_oaep
- https://searchfox.org/nss/source/cmd/bltest/tests/ecdsa
- https://merkel.texture.rocks/Latex/natbib.php
- https://anonymous.4open.science/api/repo/acvpframe/file/reports/rsa.insane.html
- https://anonymous.4open.science/api/repo/acvpframe/file/reports/rsa.sane.html
- https://gitlab.com/nisec/acvp-rust/-/raw/master/reports/rsa.insane.html?inline=false
- https://gitlab.com/nisec/acvp-rust/-/raw/master/reports/rsa.sane.html?inline=false
- https://serde.rs/derive.html
- https://aflplus.plus/docs/custom