Scanner les vulnérabilités des images
Ce guide explique comment configurer et utiliser le scan de vulnérabilités dans le Container Registry Numspot.
Vue d'ensemble
Le Container Registry Numspot intègre un scan de vulnérabilités basé sur Trivy, vous permettant de :
- Détecter les CVE : Identifier les vulnérabilités connues dans les images de conteneurs
- Appliquer des politiques de sécurité : Bloquer les images vulnérables lors du déploiement
- Satisfaire aux exigences de conformité : Respecter les exigences de sécurité pour les déploiements en production
- Surveillance continue : Scanner les images lors de l'envoi et selon un calendrier
Fonctionnalités principales
- Scan automatique : Scanner les images automatiquement lors de l'envoi
- Scanners multiples : Trivy (par défaut), et support pour des scanners externes
- Base de données CVE : Base de données de vulnérabilités à jour
- Classification de sévérité : CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN
- Application de politiques : Empêcher le déploiement d'images vulnérables
- Génération de SBOM : Software Bill of Materials pour la sécurité de la chaîne d'approvisionnement
- Rapports de scan : Rapports détaillés avec conseils de remédiation
Fonctionnement du scan de vulnérabilités
Architecture de scan
┌──────────────────────────────────────────────────────────┐
│ Instance Container Registry │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Envoi │ │ Trivy │ │ Moteur │ │
│ │ d'image │──▶│ Adaptateur │──▶│ Scanner │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Base de données │ │
│ │ CVE │ │
│ └──────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Rapport de scan │ │
│ │ (Résultats) │ │
│ └──────────────────┘ │
└──────────────────────────────────────────────────────────┘
Déclencheurs de scan
| Déclencheur | Description |
|---|---|
| À l'envoi | Scan automatique lors de l'envoi d'une image |
| Manuel | Déclencher un scan via l'interface ou l'API |
| Programmé | Rescan périodique (quotidien, hebdomadaire) |
| À la demande | Scans déclenchés via l'API |
Prérequis
- Instance de Container Registry : Un Container Registry Numspot en cours d'exécution
- Accès administrateur ou administrateur projet : Requis pour configurer le scan
- Scanner Trivy : Activé par défaut dans les registries Numspot
Étape 1 : Configurer les paramètres de scan
Via l'interface Harbor
- Connectez-vous à l'interface Harbor en tant qu'administrateur système
- Naviguez vers Administration → Interrogation Services → Scanners
- Configurez le scanner Trivy :
| Paramètre | Valeur |
|---|---|
| Nom | Trivy |
| Fournisseur | Aqua Security |
| Description | Scanner de vulnérabilités Trivy |
| URL | http://harbor-trivy:8080 |
| Type d'auth | Aucun (interne) |
- Cliquez sur Définir par défaut pour faire de Trivy le scanner par défaut
Configuration du scan au niveau projet
- Naviguez vers Projets → Sélectionner le projet → Configuration
- Configurez le scan :
| Paramètre | Valeur |
|---|---|
| Scanner automatiquement les images à l'envoi | Activer |
| Empêcher l'exécution d'images vulnérables | Activer (optionnel) |
| Sévérité | Sélectionner les niveaux de sévérité à bloquer |
| Arrêter le pull d'images avec exemptions CVE | Configurer selon les besoins |
Via l'API
curl -X PUT "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/projects/{project_id}/scanner" \
-u "admin:{password}" \
-H "Content-Type: application/json" \
-d '{
"is_default_scanner": true,
"use_project_scanner": false
}'
# Activer le scan automatique à l'envoi
curl -X PUT "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/projects/{project_id}" \
-u "admin:{password}" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"auto_scan": "true"
}
}'
Étape 2 : Scanner les images
Scan automatique à l'envoi
Lorsque le scan automatique est activé :
- Envoyez une image :
docker push registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/myproject/myimage:v1.0
- Harbor déclenche automatiquement un scan Trivy
- Le scan se termine en quelques secondes à quelques minutes (selon la taille de l'image)
Scan manuel
Via l'interface Harbor
- Naviguez vers Projets → Sélectionner le projet → Dépôts
- Cliquez sur le dépôt
- Cliquez sur le tag de l'artefact
- Cliquez sur le bouton Scanner
- Sélectionnez le scanner : Trivy
- Attendez la fin du scan
- Consultez les résultats du scan
Via l'API
curl -X POST "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/projects/{project_id}/repositories/{repository_name}/artifacts/{digest}/scan" \
-u "admin:{password}" \
-H "Content-Type: application/json" \
-d '{
"scan_type": "vulnerability"
}'
Scan programmé
Configurez des rescans périodiques :
- Naviguez vers Administration → Interrogation Services → Scanners
- Cliquez sur Planifier pour le scanner Trivy
- Configurez le calendrier cron :
0 2 * * * # Quotidien à 2h du matin
0 2 * * 0 # Hebdomadaire le dimanche
Étape 3 : Consulter les résultats du scan
Via l'interface Harbor
- Naviguez vers le dépôt et l'artefact
- Consultez l'onglet Vulnérabilités
- Visualisez :
- Total des vulnérabilités : Comptage par sévérité
- Résumé : CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN
- Liste des vulnérabilités : Informations détaillées sur les CVE
- Informations sur les packages : Package affecté et version
- Version corrigée : Conseils de remédiation
Détails des vulnérabilités
| Champ | Description |
|---|---|
| ID CVE | Identifiant CVE (ex : CVE-2023-12345) |
| Sévérité | CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN |
| Package | Nom du package affecté |
| Version | Version installée |
| Version corrigée | Version avec correctif (si disponible) |
| Description | Description de la vulnérabilité |
| Liens | Références vers les détails de la CVE |
Via l'API
# Obtenir le rapport de scan
curl -X GET "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/projects/{project_id}/repositories/{repository_name}/artifacts/{digest}/scan" \
-u "admin:{password}"
# Obtenir le résumé des vulnérabilités
curl -X GET "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/projects/{project_id}/repositories/{repository_name}/artifacts/{digest}/additions/vulnerabilities" \
-u "admin:{password}" | jq '.scan_overview'
Réponse :
{
"scan_overview": {
"application/vnd.scanner.adapter.vuln.report.harbor+json; version=1.0": {
"report_id": "abc123",
"scan_status": "Success",
"severity": "HIGH",
"duration": 45,
"summary": {
"total": 25,
"fixable": 18,
"summary": {
"CRITICAL": 2,
"HIGH": 8,
"MEDIUM": 10,
"LOW": 5,
"UNKNOWN": 0
}
},
"start_time": "2026-05-05T10:00:00Z",
"end_time": "2026-05-05T10:00:45Z"
}
}
}
Étape 4 : Appliquer les politiques de sécurité
Empêcher l'exécution d'images vulnérables
Bloquez les images avec des vulnérabilités au-dessus d'un seuil :
- Naviguez vers Projets → Sélectionner le projet → Configuration
- Activez Empêcher l'exécution d'images vulnérables
- Sélectionnez les niveaux de sévérité à bloquer :
- CRITICAL (recommandé)
- HIGH (recommandé)
- MEDIUM (optionnel)
- LOW (optionnel)
Une fois activé :
- Les images avec des vulnérabilités aux niveaux sélectionnés ou supérieurs ne peuvent pas être tirées
- Harbor retourne 403 Forbidden pour les images vulnérables
- Le scan doit être terminé avant que l'image puisse être tirée
Via l'API
curl -X PUT "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/projects/{project_id}" \
-u "admin:{password}" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"auto_scan": "true",
"prevent_vul": "true",
"severity": "high,critical"
}
}'
Liste blanche CVE
Autorisez des CVE spécifiques pour permettre des images avec des exceptions connues :
- Naviguez vers Administration → Configuration → Paramètres système
- Défiler jusqu'à Liste blanche CVE
- Ajoutez les ID CVE à autoriser :
CVE-2023-12345
CVE-2023-67890
- Cliquez sur Enregistrer
Via l'API
curl -X PUT "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/system/CVEWhitelist" \
-u "admin:{password}" \
-H "Content-Type: application/json" \
-d '{
"items": [
{"cve_id": "CVE-2023-12345"},
{"cve_id": "CVE-2023-67890"}
]
}'
Classification des sévérités
| Sévérité | Description | Recommandation |
|---|---|---|
| CRITICAL | Exploitable, risque immédiat | Corriger immédiatement |
| HIGH | Risque significatif, prioriser la correction | Corriger dans la prochaine version |
| MEDIUM | Risque modéré, devrait être corrigé | Corriger lorsque possible |
| LOW | Risque mineur, informatif | Évaluer l'impact |
| UNKNOWN | Données insuffisantes pour classifier | Investiguer davantage |
Bonnes pratiques
Stratégie de scan
- Activer le scan automatique : Scanner à chaque envoi
- Bloquer les vulnérabilités critiques : Empêcher le déploiement de CRITICAL et HIGH
- Rescans réguliers : Planifier des scans hebdomadaires pour les bases de données CVE mises à jour
- Scanner les images de base : S'assurer que les images de base sont exemptes de vulnérabilités
- Valider avant production : Scanner en staging avant promotion en production
Flux de remédiation
- Identifier les vulnérabilités : Examiner le rapport de scan
- Prioriser les corrections : Se concentrer d'abord sur CRITICAL et HIGH
- Mettre à jour les packages : Mettre à niveau vers les versions corrigées
- Vérifier les corrections : Rescanner après remédiation
- Documenter les exceptions : Utiliser la liste blanche CVE pour les risques acceptés
Intégration CI/CD
Intégrez le scan de vulnérabilités dans votre pipeline CI/CD :
# Exemple GitLab CI
scan-image:
stage: security
image: docker:latest
services:
- docker:dind
script:
- docker login -u "$HARBOR_USER" -p "$HARBOR_PASSWORD" $HARBOR_REGISTRY
- docker pull $HARBOR_REGISTRY/myproject/myimage:$CI_COMMIT_SHA
- |
SCAN_RESULT=$(curl -s -u "$HARBOR_USER:$HARBOR_PASSWORD" \
"$HARBOR_REGISTRY/api/v2.0/projects/myproject/repositories/myimage/artifacts/$CI_COMMIT_SHA/scan" | jq -r '.scan_overview[].severity')
if [ "$SCAN_RESULT" == "CRITICAL" ] || [ "$SCAN_RESULT" == "HIGH" ]; then
echo "Vulnérabilités détectées : $SCAN_RESULT"
exit 1
fi
allow_failure: false
Fonctionnalités avancées
Génération de SBOM
Générez un Software Bill of Materials :
- Naviguez vers les détails de l'artefact
- Cliquez sur l'onglet SBOM
- Visualisez les packages et dépendances
- Exportez le SBOM au format SPDX ou CycloneDX
Via l'API
curl -X POST "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/projects/{project_id}/repositories/{repository_name}/artifacts/{digest}/scan" \
-u "admin:{password}" \
-H "Content-Type: application/json" \
-d '{
"scan_type": "sbom"
}'
Configuration de Trivy
Options de configuration de Trivy :
| Paramètre | Description | Valeur par défaut |
|---|---|---|
| Ignorer la mise à jour | Ignorer la mise à jour de la base CVE | false |
| Scan hors ligne | Utiliser la base de données en cache | false |
| Sévérité | Sévérité minimale à signaler | UNKNOWN |
| Ignorer non corrigés | Ignorer les vulnérabilités sans correctif | false |
Surveillance et rapports
Métriques de scan
Surveillez les performances de scan :
- Naviguez vers Administration → Métriques
- Consultez les métriques de scan :
- Total d'images scannées
- Vulnérabilités détectées par sévérité
- Tendances de durée de scan
- Longueur de la file d'attente du scanner
Tableau de bord de sécurité
Visualisez la posture de sécurité :
- Naviguez vers Administration → Security Hub
- Consultez :
- Résumé des vulnérabilités par projet
- Images les plus vulnérables
- CVE les plus courantes
- Tendances de sécurité au fil du temps
Exporter les rapports
Exportez les rapports de vulnérabilités :
# Obtenir toutes les vulnérabilités pour un artefact
curl -X GET "https://registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/api/v2.0/projects/{project_id}/repositories/{repository_name}/artifacts/{digest}/additions/vulnerabilities" \
-u "admin:{password}" > rapport-vulnerabilites.json
Résolution de problèmes
Problème 1 : Timeout du scan
Symptôme : Le scan prend trop de temps ou expire
Solutions :
- Augmentez le timeout du scanner :
kubectl patch deployment harbor-trivy -n registry-instance-{registryId} --type=json -p='[{"op": "add", "path": "/spec/template/spec/containers/0/env/-", "value": {"name": "SCANNER_TIMEOUT", "value": "10m"}}]'
- Vérifiez les ressources du pod Trivy
- Vérifiez la connectivité réseau vers la base de données CVE
- Envisagez de scanner des images plus petites
Problème 2 : Scanner indisponible
Symptôme : Les scans échouent avec scanner indisponible
Solutions :
- Vérifiez le statut du pod Trivy :
kubectl get pods -n registry-instance-{registryId} | grep trivy
- Consultez les logs du pod Trivy :
kubectl logs -n registry-instance-{registryId} deployment/harbor-trivy
- Contactez le support Numspot
Problème 3 : Base de données CVE obsolète
Symptôme : CVE non détectées ou obsolètes
Solutions :
- Déclenchez la mise à jour de la base de données Trivy :
kubectl rollout restart deployment/harbor-trivy -n registry-instance-{registryId}
- Attendez la fin de la mise à jour de la base
- Rescannez les images affectées
Problème 4 : Faux positifs
Symptôme : CVE incorrectement signalées
Solutions :
- Vérifiez l'applicabilité de la CVE à votre usage
- Ajoutez les CVE à la liste blanche si le risque est accepté
- Documentez la justification de l'acceptation
- Signalez les faux positifs au projet Trivy
Référence API
Déclencher un scan
POST /api/v2.0/projects/{project_id}/repositories/{repository_name}/artifacts/{digest}/scan
Authorization: Basic {base64(admin:password)}
Content-Type: application/json
{
"scan_type": "vulnerability | sbom"
}
Obtenir le rapport de scan
GET /api/v2.0/projects/{project_id}/repositories/{repository_name}/artifacts/{digest}/scan
Authorization: Basic {base64(admin:password)}
Obtenir les détails des vulnérabilités
GET /api/v2.0/projects/{project_id}/repositories/{repository_name}/artifacts/{digest}/additions/vulnerabilities
Authorization: Basic {base64(admin:password)}
Mettre à jour les paramètres de scan du projet
PUT /api/v2.0/projects/{project_id}
Authorization: Basic {base64(admin:password)}
Content-Type: application/json
{
"metadata": {
"auto_scan": "true",
"prevent_vul": "true",
"severity": "high,critical"
}
}
Limitations
- Scan du système de fichiers uniquement : Trivy scanne le système de fichiers, pas les conteneurs en cours d'exécution
- Logiciels sous licence : Peut ne pas détecter les vulnérabilités dans les logiciels propriétaires
- Décalage de la base CVE : Les nouvelles CVE peuvent ne pas être immédiatement disponibles
- Faux négatifs : Certaines vulnérabilités peuvent ne pas être détectées
- Ressources intensives : Les images volumineuses nécessitent plus de temps de scan et de ressources