Passer au contenu principal

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éclencheurDescription
À l'envoiScan automatique lors de l'envoi d'une image
ManuelDéclencher un scan via l'interface ou l'API
ProgramméRescan périodique (quotidien, hebdomadaire)
À la demandeScans 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

  1. Connectez-vous à l'interface Harbor en tant qu'administrateur système
  2. Naviguez vers AdministrationInterrogation ServicesScanners
  3. Configurez le scanner Trivy :
ParamètreValeur
NomTrivy
FournisseurAqua Security
DescriptionScanner de vulnérabilités Trivy
URLhttp://harbor-trivy:8080
Type d'authAucun (interne)
  1. Cliquez sur Définir par défaut pour faire de Trivy le scanner par défaut

Configuration du scan au niveau projet

  1. Naviguez vers Projets → Sélectionner le projet → Configuration
  2. Configurez le scan :
ParamètreValeur
Scanner automatiquement les images à l'envoiActiver
Empêcher l'exécution d'images vulnérablesActiver (optionnel)
SévéritéSélectionner les niveaux de sévérité à bloquer
Arrêter le pull d'images avec exemptions CVEConfigurer 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é :

  1. Envoyez une image :
docker push registry-{registryId}.hcp.cloudgouv-eu-west-1.numspot.com/myproject/myimage:v1.0
  1. Harbor déclenche automatiquement un scan Trivy
  2. Le scan se termine en quelques secondes à quelques minutes (selon la taille de l'image)

Scan manuel

Via l'interface Harbor

  1. Naviguez vers Projets → Sélectionner le projet → Dépôts
  2. Cliquez sur le dépôt
  3. Cliquez sur le tag de l'artefact
  4. Cliquez sur le bouton Scanner
  5. Sélectionnez le scanner : Trivy
  6. Attendez la fin du scan
  7. 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 :

  1. Naviguez vers AdministrationInterrogation ServicesScanners
  2. Cliquez sur Planifier pour le scanner Trivy
  3. 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

  1. Naviguez vers le dépôt et l'artefact
  2. Consultez l'onglet Vulnérabilités
  3. 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

ChampDescription
ID CVEIdentifiant CVE (ex : CVE-2023-12345)
SévéritéCRITICAL, HIGH, MEDIUM, LOW, UNKNOWN
PackageNom du package affecté
VersionVersion installée
Version corrigéeVersion avec correctif (si disponible)
DescriptionDescription de la vulnérabilité
LiensRé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 :

  1. Naviguez vers Projets → Sélectionner le projet → Configuration
  2. Activez Empêcher l'exécution d'images vulnérables
  3. 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 :

  1. Naviguez vers AdministrationConfigurationParamètres système
  2. Défiler jusqu'à Liste blanche CVE
  3. Ajoutez les ID CVE à autoriser :
CVE-2023-12345
CVE-2023-67890
  1. 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éDescriptionRecommandation
CRITICALExploitable, risque immédiatCorriger immédiatement
HIGHRisque significatif, prioriser la correctionCorriger dans la prochaine version
MEDIUMRisque modéré, devrait être corrigéCorriger lorsque possible
LOWRisque mineur, informatifÉvaluer l'impact
UNKNOWNDonnées insuffisantes pour classifierInvestiguer davantage

Bonnes pratiques

Stratégie de scan

  1. Activer le scan automatique : Scanner à chaque envoi
  2. Bloquer les vulnérabilités critiques : Empêcher le déploiement de CRITICAL et HIGH
  3. Rescans réguliers : Planifier des scans hebdomadaires pour les bases de données CVE mises à jour
  4. Scanner les images de base : S'assurer que les images de base sont exemptes de vulnérabilités
  5. Valider avant production : Scanner en staging avant promotion en production

Flux de remédiation

  1. Identifier les vulnérabilités : Examiner le rapport de scan
  2. Prioriser les corrections : Se concentrer d'abord sur CRITICAL et HIGH
  3. Mettre à jour les packages : Mettre à niveau vers les versions corrigées
  4. Vérifier les corrections : Rescanner après remédiation
  5. 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 :

  1. Naviguez vers les détails de l'artefact
  2. Cliquez sur l'onglet SBOM
  3. Visualisez les packages et dépendances
  4. 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ètreDescriptionValeur par défaut
Ignorer la mise à jourIgnorer la mise à jour de la base CVEfalse
Scan hors ligneUtiliser la base de données en cachefalse
SévéritéSévérité minimale à signalerUNKNOWN
Ignorer non corrigésIgnorer les vulnérabilités sans correctiffalse

Surveillance et rapports

Métriques de scan

Surveillez les performances de scan :

  1. Naviguez vers AdministrationMétriques
  2. 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é :

  1. Naviguez vers AdministrationSecurity Hub
  2. 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 :

  1. 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"}}]'
  1. Vérifiez les ressources du pod Trivy
  2. Vérifiez la connectivité réseau vers la base de données CVE
  3. Envisagez de scanner des images plus petites

Problème 2 : Scanner indisponible

Symptôme : Les scans échouent avec scanner indisponible

Solutions :

  1. Vérifiez le statut du pod Trivy :
kubectl get pods -n registry-instance-{registryId} | grep trivy
  1. Consultez les logs du pod Trivy :
kubectl logs -n registry-instance-{registryId} deployment/harbor-trivy
  1. 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 :

  1. Déclenchez la mise à jour de la base de données Trivy :
kubectl rollout restart deployment/harbor-trivy -n registry-instance-{registryId}
  1. Attendez la fin de la mise à jour de la base
  2. Rescannez les images affectées

Problème 4 : Faux positifs

Symptôme : CVE incorrectement signalées

Solutions :

  1. Vérifiez l'applicabilité de la CVE à votre usage
  2. Ajoutez les CVE à la liste blanche si le risque est accepté
  3. Documentez la justification de l'acceptation
  4. 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