Gestion des analyses de sécurité avec DefectDojo
Lors de la vie d’une application, des tests de sécurité (manuels et/ou automatisés) sont réalisés. Pour réaliser ces tests, des pentesteurs et/ou des outils rentrent en jeux pour détecter des vulnérabilités. Une fois ces problèmes remontés dans des rapports souvent statiques, il est nécessaire d’assurer un suivi de ces vulnérabilités pour suivre et maitriser l’état de santé d’une application sur l’aspect sécurité.
Pour faciliter cette gestion, des outils d’agrégation/gestion de vulnérabilités comme DefectDojo, ThreadFix ou CodeDX permettent rendre cette tâche plus facile.
L’objectif de cet article est de présenter l’outil DefectDojo, un des projets flagship de l’OWASP disponible sur Github.
Destiné aussi bien pour les ingénieurs en cybersécurité qui souhaitent gérer les vulnérabilités remontées par différents scanners qu’au management souhaitant avoir une vue d’ensemble des métriques sur les vulnérabilités traitées, acceptées et restantes sur toutes les applications (développées en interne, 3rd party, etc.).
L’outil propose un large spectre de fonctionnalités et le support d’un grand nombre d’outils. Malheureusement toutes ces fonctionnalités n’ont pas encore été implémentées de manière complète et quelques manquements subsistent.
Installation
L’installation de DefectDojo est bien packagée et permet de déployer rapidement une instance de l’application via un docker-compose
ou via un script bash offrant plus de possibilités : installation en environnements de développement avec des secrets connus à l’avance, installation avec tous les services sur un même serveur et enfin une installation avec une répartition des services sur plusieurs serveurs.
DefectDojo se compose des éléments suivants :
- MySQL
- RabbitMQ
- Nginx
- Application web Django avec Celery et uWSGI
Pour plus d’informations sur les installations, vous pouvez vous réferer à la documentation officielle (Docker, Setup bash), notamment pour la récupération des identifiants avec Docker.
Configuration
Une fois installé, l’outil est directement opérationnel mais peut nécessiter quelques configurations pour une utilisation en entreprise.
Gestion des utilisateurs
Les utilisateurs peuvent être gérés directement dans DefectDojo mais pour une meilleure intégration dans l’écosystème de l’entreprise, il est possibile de déléguer cette tâche à un annuaire LDAP ou à un fournisseur d’identités compatible avec le protocole OAuth.
Notifications
Pour être alerté des événements produits par la plateforme, un système de notifications sur plusieurs canaux est disponible. Les canaux disponibles sont : l’email, Slack et HipChat. Les informations de connexions pour ces moyens de communication sont configurables dans l’espace d’administration.
Ticketing
Pour s’intégrer un peu plus dans les outils déjà utilisé en entreprise, DefectDojo peut se connecter à Jira.
Plus d’informations sur l’interconnexion avec Jira.
SLA
Un indicateur intéressant au niveau des vulnérabilités remontées est l’engagement de correction en fonction de la criticité.
Par défaut :
- vulnérabilité critique : 7 jours
- vulnérabilité haute : 30 jours
- vulnérabilité moyenne : 90 jours
- vulnérabilité faible : 120 jours
Ces valeurs sont modifiables dans l’espace d’administration.
Divers
Un certain nombre d’autres paramètres, plus ou moins bien documentés, sont également disponibles (gestion des doublons, des credentials, outils, etc.)
Tout n’étant pas implémenté dans l’interface de DefectDojo, il peut être nécessaire de se rendre dans la partie administration de Django disponible à l’adresse suivante : http://<url_defectdojo>/admin/.
Features
DefectDojo s’articule autour de 4 concepts principaux: Product
, Engagement
, Finding
et Endpoint
.
Products
Un product
est une application ou un ensemble d’applications qui est testé dans DefectDojo. Elle peut être développée en interne, être développée par un tiers ou être sur étagère.
Pour définir un produit, outre le nom et la description, un ensemble d’informations non obligatoires sont proposées.
On notera par exemple les aspects réglementaires à appliquer (ex: RGPD), la source du développement, la criticité de l’application, le type d’applications, les responsables, etc.
Ces éléments seront intéressants pour définir des rapports ou des métriques ciblés.
Une fois le produit créé, une page récapitulative est disponible :
La partie benchmark
permet de définir un niveau cible pour l’application d’ASVS (Application Security Verification Standard) ainsi que les règles déjà couvertes :
A noter que pour définir les technologies et langages utilisés par le produit, il est nécessaire de passer par l’interface d’administration de Django :
- Technologies : http://<url_defectdojo>/admin/dojo/app_analysis/
- Langages : http://<url_defectdojo>/admin/dojo/languages/
Engagements
Une fois le produit défini, les engagements
peuvent être créés. Ils correspondent à un ensemble de tests sur un produit. Cette campagne est définie par une version de l’application à tester, une date de début et de fin, un responsable, un statut et un ensemble d’autres paramètres.
C’est dans ces engagements
que les résultats de tests (findings
) des différents outils seront importés.
Une fois importé, les informations sur les tests liés à l’engagement
sont résumées sur un tableau de bord avec le lien vers les tests.
Les tests importés dans l’engagement
.
Les vulnérabilités ne pouvant pas toujours être corrigées, il est possible d’indiquer des vulnérabilités pour lesquelles le risque est accepté en indiquant quelles autres mesures ont été mises en place pour réduire le risque à un niveau acceptable.
CI/CD
Les engagement
de type CI/CD peuvent également être créés par un pipeline d’intégration continue grâce à l’API proposée par DefectDojo. Cet autre type d’engagement
offre la possibilité de spécifier un numéro de commit, un identifiant de build, une branche ou un tag, etc. permettant de lier une campagne d’analyse avec une version intermédiaire bien définie de l’application.
Ces engagements
CI/CD sont visuellement séparés des autres engagements
dans le portail web.
Endpoints
Sur un product
, un ensemble de endpoints
peuvent être définis pour indiquer les différents moyens d’accéder à l’application ainsi que les chemins vulnérables.
Lors de l’import du résultat d’une analyse dynamique (DAST) avec un outil comme Arachni, les endpoints
identifiés par le scanner sont enregistrés avec leurs vulnérabilités associées.
Il est ainsi possible de lister les endpoints
vulnérables et connaitre ceux qui sont impactés par une vulnérabilité spécifique.
Findings
C’est l’élément qui correspond aux vulnérabilités identifiées. Elles peuvent être ajoutées manuellement ou via l’import de rapports provenant de différents outils de détection. Elles sont caractérisées par un niveau de criticité, une CWE (si disponible dans le rapport de l’outil), un statut (active, doublon, etc.) et un ensemble d’autres informations utilisées pour décrire le problème.
Si plusieurs scanners sont utilisés sur DefectDojo, il est possible d’avoir des vulnérabilités identiques remontées par plusieurs outils. Si l’option est activée dans la partie administration, DefectDojo peut automatiquement identifier les doublons et/ou les supprimer globalement ou sur un engagmenent
seul.
En fonction du mode d’import (IHM, APIv1, APIv2) les règles de dédoublonnage ne sont pas exactement les mêmes.
Différentes vues sont disponibles pour lister directement les vulnérabilités fermées, actives, acceptées, etc.
Il est à noter que les champs avec du contenu riche pour la description d’un problème peuvent s’afficher plus ou moins clairement en fonction de la qualité de l’export.
Outils pris en charge
Dans la version actuelle, DefectDojo supporte 64 outils et possède également un format CSV générique d’import. La liste exaustive est disponible ici. On retrouve en autres Spotbugs, Arachni Checkmarx, Dependency-Track, Nikto, nmap, sslyze, etc.
Pour chaque outil, la documentation indique le format du rapport attendu.
Metriques et rapport
DefectDojo est un outil très orienté métrique et rapport.
Métriques
De multiples tableaux de bord sont disponibles, à différents niveaux (global, product
, type de product
) via des dashboards déjà conçus.
Pour définir des métriques spécifiques, une panoplie de filtres est disponible pour ne sélectionner que les critères souhaités.
Rapports
Pour éditer un rapport sous forme de fichier, le report builder
offre la possibilité de composer avec différentes briques pour fournir un rapport au format ASCIIDoc ou PDF (nécessite l’installation de librairies additionnelles).
Exemple de rapport converti en HTML.
Dans la version actuelle, quelques dysfonctionnements sont présents dans la génération des rapports.
Conclusion
DefectDojo fournit un ensemble très intéressant de fonctionnalités allant au delà de la simple agrégation de vulnérabilités ainsi qu’un très bonne compatbilité avec les outils du marché. Même si il apporte un gain de productivité non négligeable, le produit souffre de nombreux bugs (il n’est pas rare de tomber sur une page d’erreur 500) et d’une doc un peu légère. Il aurait été intéressant de plus se concentrer sur les fonctionnalités clé en mettant de côté les features annexes.
Malgré ces quelques travers, DefectDojo reste un produit intéressant à suivre. Etant opensource, vous pouvez contribuer à son développement.
Ressources
Site officiel : https://www.defectdojo.org/
Github : https://github.com/DefectDojo/django-DefectDojo
Documentation : https://defectdojo.readthedocs.io/en/latest/
Projet OWASP : https://www.owasp.org/index.php/OWASP_DefectDojo_Project