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.

Homepage

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. Add product

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 :

Product dashboard

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 :

ASVS

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.

Import results

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.

Engagement

Les tests importés dans l'engagement.

Engagement tests

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.

Finding

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.

Product metrics

Metrics

Pour définir des métriques spécifiques, une panoplie de filtres est disponible pour ne sélectionner que les critères souhaités.

Custom metrics

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).

Report builder

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


Voir également