Aller au contenu

Démarrer avec Dependency Track

Mise à jour :

dependency-track logo

Je vais vous présenter Dependency Track, un outil open-source conçu pour aider les équipes de développement et de sécurité à gérer les vulnérabilités dans les dépendances logicielles. Aujourd’hui, les projets intègrent de plus en plus de bibliothèques tierces, souvent open-source, ce qui peut exposer à des risques de sécurité si ces dépendances contiennent des failles ou du code malveillant. Dependency Track surveille et analyse ces composants, vous aidant à identifier et corriger rapidement les vulnérabilités présentes dans vos projets.

Pourquoi utiliser Dependency Track ?

La sécurisation de la supply chain logicielle est devenue un enjeu important avec l’augmentation des cyberattaques ciblant les dépendances logicielles et les composants tiers. Dans un contexte où de nombreuses entreprises utilisent des bibliothèques et outils open-source, il est essentiel de garantir que chaque composant utilisé dans leurs projets est sécurisé et exempt de vulnérabilités connues.

Un autre aspect important de la sécurisation de la supply chain est l’adoption du principe Zero Trust. Ce concept repose sur l’idée qu’aucun élément du système ne doit être automatiquement considéré comme sécurisé, même à l’intérieur de votre réseau. Appliqué à la gestion des dépendances, cela signifie que chaque composant doit être continuellement vérifié, peu importe sa provenance ou sa fiabilité apparente.

Il est donc essentiel de maintenir une analyse continue de vos dépendances au fil du temps et pas seulement au moment de l’intégration initiale des composants. En effet, les vulnérabilités dans les composants open-source peuvent être découvertes longtemps après l’intégration de ces derniers dans vos projets. C’est là que Dependency Track intervient en offrant une surveillance continue de l’intégrité de vos dépendances.

Concepts clés à connaître

Pour bien comprendre comment fonctionne Dependency Track, il est important de maîtriser certains concepts fondamentaux qui sont au cœur de cet outil.

  • SBOM (Software Bill of Materials) : Ce terme désigne la liste complète des dépendances et composants utilisés dans un projet. C’est l’élément central de Dependency Track, car c’est sur cette base qu’il identifie les failles de sécurité.
  • Vulnérabilités : Dependency Track scanne en continu vos projets à la recherche de failles de sécurité, en se basant sur des bases de données publiques comme la National Vulnerability Database (NVD). Chaque vulnérabilité trouvée est associée à une dépendance spécifique, vous permettant de savoir quel composant doit être mis à jour ou corrigé.
  • Scoring CVSS (Common Vulnerability Scoring System) : Chaque vulnérabilité identifiée reçoit un score selon la méthode CVSS. Ce score permet de mesurer la sévérité de la vulnérabilité, avec une échelle de 0 à 10. Plus le score est élevé, plus la vulnérabilité est critique. Cela vous aide à prioriser les actions à entreprendre pour résoudre les problèmes les plus graves en premier.
  • Composants : Ce terme fait référence à chaque bibliothèque, framework ou autre module utilisé dans votre projet. Dependency Track identifie chaque composant par sa version et compare les informations avec des bases de données de vulnérabilités afin de détecter les failles de sécurité.

Fonctionnalités principales de Dependency Track

Dependency Track propose une gamme de fonctionnalités puissantes pour vous aider à gérer la sécurité de vos dépendances tout au long du cycle de vie de vos projets.

  • Analyse des dépendances : Dependency Track scanne automatiquement les dépendances de vos projets et génère un rapport complet sur leur état de sécurité.
  • Détection des vulnérabilités : En se connectant à des sources publiques comme la National Vulnerability Database (NVD), il détecte en temps réel les vulnérabilités associées à vos dépendances.
  • Gestion des projets : Vous pouvez créer et suivre plusieurs projets à la fois. Chaque projet correspond à un ensemble de composants ou dépendances, ce qui facilite la gestion et la priorisation des vulnérabilités pour chaque application ou module.
  • Suivi des mises à jour : L’outil vous alerte dès qu’une nouvelle version d’un composant est disponible, surtout si elle corrige une vulnérabilité connue. Cela vous permet de toujours utiliser des versions sécurisées des bibliothèques dans vos projets.
  • Intégration avec des outils DevOps : Dependency Track s’intègre facilement avec des outils comme Gitlab CI pour automatiser l’analyse des dépendances dans vos pipelines CI/CD. Vous pouvez ainsi analyser chaque nouvelle version de vos applications avant de les déployer en production.

Prérequis pour l’installation de Dependency Track

Avant d’installer Dependency Track, il est important de s’assurer que votre environnement respecte certains prérequis afin de garantir un fonctionnement optimal.

Prérequis matériels

  • Serveur API :

    • Mémoire : minimum 4,5 Go de RAM (16 Go recommandé)
    • Processeurs : 2 cœurs CPU (4 cœurs recommandé)
  • Front-end :

    • Mémoire : minimum 512 Mo de RAM (1 Go recommandé)
    • Processeurs : 1 cœur CPU (2 cœurs recommandé)

Prérequis logiciels

Vous devez avoir une version récente de Docker installée sur votre système. Aucune autre dépendance n’est requise pour utiliser Docker et déployer Dependency Track.

Pour plus d’informations, consultez la page Installation Docker.

Installation de Dependency Track

L’installation de Dependency Track est relativement simple et peut être adaptée selon vos besoins en termes d’infrastructure. Vous avez plusieurs méthodes disponibles pour déployer l’outil, que ce soit pour un environnement de test ou de production.

Installation avec Docker

Pour cette démonstration, nous allons utiliser la méthode Docker Compose pour configurer Dependency Track. Cela vous permet d’exécuter facilement l’application sur une machine distante en modifiant certains paramètres dans le fichier de configuration Docker.

Voici un exemple de fichier docker-compose.yml que vous pouvez utiliser. Il contient deux services : le serveur API et le frontend. Vous devrez adapter l’IP ou le domaine de la machine distante pour que l’interface soit accessible via une URL publique.

version: '3.7'
volumes:
dependency-track:
services:
dtrack-apiserver:
image: dependencytrack/apiserver
environment:
- ALPINE_CORS_ENABLED=true
- ALPINE_CORS_ALLOW_ORIGIN=*
- ALPINE_CORS_ALLOW_METHODS=GET, POST, PUT, DELETE, OPTIONS
- ALPINE_CORS_ALLOW_HEADERS=Origin, Content-Type, Authorization, X-Requested-With, Content-Length, Accept, Origin, X-Api-Key, X-Total-Count, *
- ALPINE_CORS_EXPOSE_HEADERS=Origin, Content-Type, Authorization, X-Requested-With, Content-Length, Accept, Origin, X-Api-Key, X-Total-Count
- ALPINE_CORS_ALLOW_CREDENTIALS=true
- ALPINE_CORS_MAX_AGE=3600
deploy:
resources:
limits:
memory: 12288m
reservations:
memory: 8192m
restart_policy:
condition: on-failure
ports:
- '8081:8080'
volumes:
- 'dependency-track:/data'
restart: unless-stopped
dtrack-frontend:
image: dependencytrack/frontend
depends_on:
- dtrack-apiserver
environment:
- API_BASE_URL=http://<IP_Machine_Distante>:8081
ports:
- "8080:8080"
restart: unless-stopped
  • Modification pour une machine distante : Dans le fichier ci-dessus, vous devez remplacer <IP_Machine_Distante> par l’adresse IP publique ou le nom de domaine de votre machine distante. Cela permet au frontend d’accéder à l’API sur cette machine.

  • Vérification de l’installation : Une fois votre docker-compose.yml configuré et lancé, vous pouvez vérifier que l’installation s’est bien déroulée en utilisant la commande suivante :

Terminal window
docker logs dependency-track-dtrack-frontend-1
/docker-entrypoint.sh: Configuration complete; ready for start up

Cela vous permettra de surveiller les logs et de vous assurer que le processus initial de mirroring des vulnérabilités est terminé avant d’utiliser l’interface utilisateur.

Une fois l’installation terminée, vous pouvez vous connecter à Dependency Track via votre navigateur en accédant à l’URL configurée (par exemple, http://<IP_Machine_Distante>:8080).

Lors de votre première connexion, utilisez les identifiants par défaut :

  • Utilisateur : admin
  • Mot de passe : admin

Après cette première connexion, vous serez invité à changer le mot de passe pour sécuriser l’accès. Assurez-vous de choisir un mot de passe fort pour protéger l’administration de votre instance Dependency Track.

login Dependency-track

Installation sur Kubernetes

Pour les environnements de production ou les grandes infrastructures, il est possible d’utiliser Kubernetes pour gérer le déploiement et la mise à l’échelle de Dependency Track. Un fichier Helm Chart est disponible pour simplifier cette installation.

Voici un exemple rapide pour installer avec Helm :

  • Installez Helm si ce n’est pas déjà fait.

  • Ajoutez le dépôt Helm de Dependency Track :

    Terminal window
    helm repo add dependency-track https://dependencytrack.org/helm-charts
  • Installez l’outil :

    Terminal window
    helm install dependency-track dependency-track/dependency-track

Une première Analyse d’une SBOM

Création d’une équipe (Team)

Pour permettre l’envoi de SBOM et la création de projets via l’API, vous devez créer une équipe et lui assigner les droits appropriés et lui générer une clé d’API.

  • Allez dans Administration > Teams et cliquez sur Ajouter une équipe.
  • Nommez l’équipe (ex : “Développeurs”).
  • Assignez les permissions BOM_UPLOAD (pour envoyer des SBOMs) et PROJECT_CREATION_UPLOAD (pour créer des projets via l’API).
  • Ajoutez lui une nouvelle clé et copiez la.

Génération du fichier SBOM avec Trivy

Pour générer un fichier SBOM au format CycloneDX, vous pouvez utiliser l’outil Trivy. Voici un exemple de commande pour analyser une image Docker et générer un fichier SBOM pour l’image PostgreSQL 16 :

Terminal window
trivy image --format cyclonedx --output result.json postgres:16-bullseye

Cette commande crée un fichier result.json contenant les informations des dépendances et vulnérabilités de l’image Docker.

Envoi de la SBOM à Dependency Track

Après avoir généré le fichier SBOM, vous pouvez l’envoyer à Dependency Track en utilisant une requête HTTP POST avec l’API. Voici un exemple de commande curl pour envoyer le fichier :

Terminal window
curl -X "POST" "http://<IP_Machine_Distante>:8081/api/v1/bom" \
-H "Content-Type: multipart/form-data" \
-H "X-Api-Key: odt_ePcRsAdQ2FZukqRS8ucJOF4zejdxWuqF" \
-F "autoCreate=true" \
-F "projectName=test" \
-F "projectVersion=0.1" \
-F "bom=@result.json"

Cette commande :

  • Envoie le fichier SBOM (result.json) au serveur Dependency Track.
  • Si le projet n’existe pas déjà, il sera automatiquement créé grâce au paramètre autoCreate=true.
  • Le projet sera nommé test et versionné en 0.1.

En utilisant cette méthode, vous pouvez intégrer facilement l’analyse des dépendances dans vos workflows et projets.

Analyse des résultats et informations clés à en tirer

L’analyse des résultats dans Dependency Track repose sur plusieurs indicateurs qui vous permettent de suivre et de prioriser les actions à mener sur vos dépendances.

  1. Vulnérabilités par projet : Pour chaque projet, Dependency Track fournit une liste détaillée des vulnérabilités présentes dans les dépendances. Chaque vulnérabilité est associée à un Risk Score, qui combine le score CVSS et l’EPSS (Exploit Prediction Scoring System). Cela vous aide à prioriser les vulnérabilités les plus critiques et à identifier celles susceptibles d’être exploitées.

    login Dependency-track

  2. Score CVSS : Le score CVSS vous permet de mesurer la gravité d’une vulnérabilité sur une échelle de 0 à 10. Les vulnérabilités avec un score élevé nécessitent une attention immédiate, tandis que les scores plus bas peuvent être résolus plus tard.

  3. Exploit Prediction : Un tableau à double entrée indique la probabilité qu’une vulnérabilité soit exploitée en fonction de son score EPSS. Cet indicateur est crucial pour évaluer les risques d’attaque.

    login Dependency-track

  4. Tendances et alertes : Vous pouvez suivre l’évolution des vulnérabilités au fil du temps et configurer des alertes, par exemple via e-mail ou Teams, pour être notifié lorsqu’une nouvelle vulnérabilité critique est détectée.

Ces indicateurs vous offrent une vue d’ensemble de la sécurité de vos projets et vous aident à anticiper et gérer les risques de manière proactive.

Bonnes pratiques pour l’utilisation de Dependency Track

L’utilisation efficace de Dependency Track nécessite de suivre quelques bonnes pratiques pour maximiser la sécurité de vos projets tout en optimisant les performances de l’outil.

  1. Mettre à jour régulièrement : Assurez-vous que Dependency Track et ses dépendances sont toujours à jour pour bénéficier des dernières fonctionnalités et correctifs de sécurité.
  2. Prioriser les vulnérabilités critiques : Utilisez le score CVSS et Exploit Prediction pour prioriser les vulnérabilités les plus susceptibles d’être exploitées. Ne vous concentrez pas sur toutes les vulnérabilités, mais sur celles avec un impact élevé.
  3. Automatiser l’envoi de SBOM : Intégrez Dependency Track à votre pipeline CI/CD, par exemple avec Gitlab CI, pour assurer une analyse automatique des dépendances après chaque modification du projet.
  4. Créer des notifications personnalisées : Configurez les notifications (e-mails, Teams, etc.) pour être alerté en temps réel lors de la découverte de nouvelles vulnérabilités critiques.
  5. Exclure les vulnérabilités non pertinentes : Si certaines vulnérabilités ne concernent pas votre contexte d’utilisation (ex : environnement fermé), vous pouvez les ignorer pour éviter des alertes non pertinentes.
  6. Restreindre les droits d’accès : Utilisez des équipes et des clés d’API avec des permissions adaptées (par exemple, BOM_UPLOAD et PROJECT_CREATION_UPLOAD) pour contrôler qui peut envoyer des SBOM ou créer des projets.

Conclusion

Dependency Track est un outil essentiel pour assurer une gestion proactive des dépendances logicielles, mais il est encore plus puissant lorsqu’il est utilisé en complément avec d’autres solutions comme Dependabot ou Renovate. Ces outils automatisent la création de Merge Requests (MR) pour mettre à jour les dépendances. Cependant, toutes les mises à jour ne doivent pas être acceptées automatiquement.

Grâce à Dependency Track, vous pouvez analyser en profondeur les vulnérabilités détectées et décider d’accepter ou non une MR proposée par Dependabot ou Renovate. Vous pourrez ainsi prioriser les correctifs critiques tout en évitant les changements non nécessaires ou perturbateurs. Cette approche garantit un équilibre entre la sécurité et la stabilité des projets, en permettant une gestion fine et raisonnée des mises à jour.

Plus d’infos