Comment utiliser la commande docker scout cves pour trouver des vulnérabilités

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à utiliser efficacement la commande docker scout cves pour identifier les vulnérabilités dans vos images Docker et les artefacts associés. Nous commencerons par analyser les vulnérabilités directement dans une image Docker, en montrant comment télécharger une image vulnérable et utiliser un outil de vérification de sécurité comme Trivy pour trouver les problèmes potentiels.

Ensuite, vous explorerez comment analyser les vulnérabilités à partir d'un fichier tarball docker save et d'un répertoire OCI, mettant en évidence la flexibilité de la commande docker scout cves sur différents formats. Enfin, vous apprendrez à exporter le rapport de vulnérabilité dans un fichier JSON SARIF pour un traitement ultérieur et à afficher les vulnérabilités avec leurs scores EPSS associés pour prioriser les efforts de correction.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/ImageOperationsGroup -.-> docker/save("Save Image") docker/VolumeOperationsGroup -.-> docker/cp("Copy Data Between Host and Container") subgraph Lab Skills docker/ls -.-> lab-555202{{"Comment utiliser la commande docker scout cves pour trouver des vulnérabilités"}} docker/pull -.-> lab-555202{{"Comment utiliser la commande docker scout cves pour trouver des vulnérabilités"}} docker/images -.-> lab-555202{{"Comment utiliser la commande docker scout cves pour trouver des vulnérabilités"}} docker/save -.-> lab-555202{{"Comment utiliser la commande docker scout cves pour trouver des vulnérabilités"}} docker/cp -.-> lab-555202{{"Comment utiliser la commande docker scout cves pour trouver des vulnérabilités"}} end

Analyser les vulnérabilités dans une image Docker

Dans cette étape, nous apprendrons à analyser les vulnérabilités dans une image Docker en utilisant Trivy. Trivy est un outil de vérification de sécurité complet et polyvalent. Il peut détecter les vulnérabilités dans les paquets du système d'exploitation (Alpine, RHEL, CentOS, Debian, Ubuntu, etc.) et les dépendances d'application (Bundler, Composer, npm, yarn, etc.). De plus, Trivy prend en charge diverses cibles de scan, telles que les images de conteneurs, les systèmes de fichiers et les dépôts Git.

Tout d'abord, téléchargeons une image Docker vulnérable que nous utiliserons pour l'analyse. Nous utiliserons l'image library/ubuntu:18.04, qui est connue pour avoir certaines vulnérabilités.

docker pull library/ubuntu:18.04

Vous devriez voir un affichage indiquant que l'image est en cours de téléchargement.

18.04: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

Maintenant que nous avons l'image, nous devons installer Trivy. Comme Trivy n'est pas préinstallé dans l'environnement LabEx, nous le téléchargerons et l'installerons. Nous téléchargerons la dernière version à partir du dépôt GitHub officiel.

wget https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb

Cette commande télécharge le paquet Debian de Trivy. Vous devriez voir un affichage similaire à ceci :

--2023-10-27 08:00:00--  https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
Resolving github.com (github.com)... 140.82.113.4
Connecting to github.com (github.com)|140.82.113.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=... [following]
--2023-10-27 08:00:00--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50000000 (48M) [application/octet-stream]
Saving to: ‘trivy_0.50.1_Linux-64bit.deb’

trivy_0.50.1_Linux-64bit.deb 100%[=================================================>]  47.68M  --.-MB/s    in 0.5s

2023-10-27 08:00:01 (95.3 MB/s) - ‘trivy_0.50.1_Linux-64bit.deb’ saved [50000000/50000000]

Maintenant, installons le paquet téléchargé en utilisant dpkg.

sudo dpkg -i trivy_0.50.1_Linux-64bit.deb

Vous devriez voir un affichage indiquant le processus d'installation.

Selecting previously unselected package trivy.
(Reading database ... 100000 files and directories currently installed.)
Preparing to unpack trivy_0.50.1_Linux-64bit.deb ...
Unpacking trivy (0.50.1) ...
Setting up trivy (0.50.1) ...

Avec Trivy installé, nous pouvons maintenant scanner l'image Docker library/ubuntu:18.04 pour détecter les vulnérabilités.

trivy image library/ubuntu:18.04

Trivy commencera à scanner l'image. Cela peut prendre quelques instants car il télécharge les bases de données de vulnérabilités et analyse les couches de l'image. Vous verrez un affichage montrant la progression, puis un rapport détaillé des vulnérabilités trouvées.

2023-10-27T08:00:05.000+0000    INFO    Need to update DB
2023-10-27T08:00:05.000+0000    INFO    Downloading DB...
...
2023-10-27T08:00:10.000+0000    INFO    Detected OS: ubuntu
2023-10-27T08:00:10.000+0000    INFO    Detecting Ubuntu vulnerabilities...
...
library/ubuntu:18.04 (ubuntu 18.04)
===================================
Total: 100 (UNKNOWN: 0, LOW: 50, MEDIUM: 30, HIGH: 15, CRITICAL: 5)

┌───────────────────────────────────────────────────┬─────────────────────────────────┬──────────┬───────────────────┬───────────────────────────────────────────────────────────┐
│                 Library/Package                   │              Vulnerability              │ Severity │ Installed Version │                       Fixed Version                       │
├───────────────────────────────────────────────────┼─────────────────────────────────┼──────────┼───────────────────┼───────────────────────────────────────────────────────────┤
│ apt                                               │ CVE-YYYY-XXXX                   │ HIGH     │ 1.6.12            │ 1.6.14                                                    │
│ ...                                               │ ...                             │ ...      │ ...               │ ...                                                       │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘

Le résultat fournit un résumé du nombre total de vulnérabilités trouvées, classées par gravité (INCONNUE, FAIBLE, MOYENNE, ÉLEVÉE, CRITIQUE). Il liste ensuite chaque vulnérabilité avec des détails tels que le paquet affecté, l'identifiant de la vulnérabilité (par exemple, CVE-YYYY-XXXX), le niveau de gravité, la version installée du paquet et la version corrigée si disponible. Ce rapport vous aide à comprendre la posture de sécurité de votre image Docker et à identifier les domaines qui nécessitent une correction.

Analyser les vulnérabilités à partir d'un fichier tarball créé avec docker save

Dans cette étape, nous apprendrons à analyser les vulnérabilités d'une image Docker enregistrée sous forme de fichier tarball. Cela est utile lorsque vous avez besoin de scanner une image qui n'est pas directement disponible dans un registre Docker ou sur le démon Docker local, mais que vous avez l'image enregistrée sous forme de fichier.

Tout d'abord, nous devons enregistrer l'image Docker library/ubuntu:18.04 que nous avons téléchargée à l'étape précédente dans un fichier tarball. Nous pouvons utiliser la commande docker save pour cela.

docker save library/ubuntu:18.04 -o ubuntu_18.04.tar

Cette commande enregistre l'image library/ubuntu:18.04 dans un fichier nommé ubuntu_18.04.tar dans votre répertoire actuel (~/project). Le flag -o spécifie le fichier de sortie.

Vous devriez voir un affichage indiquant que les couches de l'image sont en cours d'enregistrement.

The image 'library/ubuntu:18.04' is being saved to a tar file.
...

Maintenant que nous avons l'image enregistrée sous forme de tarball, nous pouvons utiliser Trivy pour scanner ce fichier. Nous utiliserons à nouveau la commande trivy image, mais cette fois-ci nous spécifierons le fichier tarball comme cible.

trivy image --input ubuntu_18.04.tar

Le flag --input indique à Trivy de scanner une image à partir d'un fichier tarball au lieu de la télécharger depuis un registre ou de scanner une image locale par son nom. Trivy lira les données de l'image à partir du fichier ubuntu_18.04.tar et effectuera l'analyse des vulnérabilités, de la même manière que lorsqu'il scanne directement une image locale.

Vous verrez un affichage montrant que Trivy charge l'image à partir du tarball, puis le processus de scan des vulnérabilités et le rapport, tout comme à l'étape précédente.

2023-10-27T08:05:00.000+0000    INFO    Loading image from ubuntu_18.04.tar...
2023-10-27T08:05:05.000+0000    INFO    Detected OS: ubuntu
2023-10-27T08:05:05.000+0000    INFO    Detecting Ubuntu vulnerabilities...
...
ubuntu_18.04.tar (ubuntu 18.04)
==============================
Total: 100 (UNKNOWN: 0, LOW: 50, MEDIUM: 30, HIGH: 15, CRITICAL: 5)

┌───────────────────────────────────────────────────┬─────────────────────────────────┬──────────┬───────────────────┬───────────────────────────────────────────────────────────┐
│                 Library/Package                   │              Vulnerability              │ Severity │ Installed Version │                       Fixed Version                       │
├───────────────────────────────────────────────────┼─────────────────────────────────┼──────────┼───────────────────┼───────────────────────────────────────────────────────────┤
│ apt                                               │ CVE-YYYY-XXXX                   │ HIGH     │ 1.6.12            │ 1.6.14                                                    │
│ ...                                               │ ...                             │ ...      │ ...               │ ...                                                       │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘

Cela démontre que Trivy peut analyser des images Docker même lorsqu'elles ne sont pas chargées dans le démon Docker, en scannant le tarball créé avec docker save. C'est une façon flexible d'intégrer la vérification des vulnérabilités dans les flux de travail où les images sont transférées sous forme de fichiers.

Analyser les vulnérabilités à partir d'un répertoire OCI

Dans cette étape, nous allons explorer comment analyser les vulnérabilités d'une image stockée au format de disposition Open Container Initiative (OCI). La spécification du format d'image OCI définit une norme pour l'empaquetage des images de conteneurs. Des outils tels que Skopeo et Buildah peuvent être utilisés pour créer et gérer des images dans ce format. Trivy peut directement scanner des images stockées dans un répertoire OCI.

Tout d'abord, nous devons créer un répertoire OCI à partir de notre image Docker library/ubuntu:18.04. Nous utiliserons l'utilitaire en ligne de commande skopeo pour cela. Comme skopeo n'est pas préinstallé, nous devons l'installer.

sudo apt update
sudo apt install -y skopeo

Cela mettra à jour la liste des paquets et installera skopeo. Vous verrez un affichage montrant le processus d'installation.

Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
...
Setting up skopeo (1.2.3-3) ...

Maintenant que skopeo est installé, nous pouvons copier l'image Docker dans un répertoire OCI. Nous allons créer un répertoire nommé ubuntu_oci dans notre répertoire ~/project et copier l'image à l'intérieur en utilisant skopeo copy.

mkdir ubuntu_oci
skopeo copy docker-daemon:library/ubuntu:18.04 oci:ubuntu_oci:18.04

La commande skopeo copy est utilisée pour transférer des images entre différents emplacements de stockage et formats.

  • docker-daemon:library/ubuntu:18.04 spécifie l'image source, qui est library/ubuntu:18.04 située dans le démon Docker local.
  • oci:ubuntu_oci:18.04 spécifie le format et l'emplacement de destination. oci: indique le format OCI, ubuntu_oci est le répertoire où l'image OCI sera stockée, et 18.04 est la balise (tag) de l'image dans ce répertoire OCI.

Vous verrez un affichage indiquant le processus de copie.

Getting image source signatures
Copying blob sha256:...
...
Copying config sha256:...
Writing manifest to image destination
Storing signatures

Maintenant, vous devriez avoir un répertoire nommé ubuntu_oci contenant les données de l'image OCI. Vous pouvez lister le contenu de ce répertoire pour voir les fichiers de la disposition OCI.

ls ubuntu_oci

Vous verrez des fichiers et des répertoires tels que oci-layout, index.json et blobs.

blobs  index.json  oci-layout

Enfin, nous pouvons utiliser Trivy pour scanner ce répertoire OCI à la recherche de vulnérabilités. Nous utiliserons la commande trivy image et spécifierons le chemin du répertoire OCI.

trivy image oci:ubuntu_oci:18.04

Trivy reconnaîtra le préfixe oci: et scannera l'image située dans le répertoire ubuntu_oci avec la balise 18.04. Il analysera les couches de l'image et signalera toutes les vulnérabilités trouvées, de la même manière que lorsqu'il scanne directement une image Docker.

Vous verrez un affichage montrant Trivy en train de scanner l'image OCI, puis le rapport des vulnérabilités.

2023-10-27T08:10:00.000+0000    INFO    Detected OS: ubuntu
2023-10-27T08:10:00.000+0000    INFO    Detecting Ubuntu vulnerabilities...
...
oci:ubuntu_oci:18.04 (ubuntu 18.04)
==================================
Total: 100 (UNKNOWN: 0, LOW: 50, MEDIUM: 30, HIGH: 15, CRITICAL: 5)

┌───────────────────────────────────────────────────┬─────────────────────────────────┬──────────┬───────────────────┬───────────────────────────────────────────────────────────┐
│                 Library/Package                   │              Vulnerability              │ Severity │ Installed Version │                       Fixed Version                       │
├───────────────────────────────────────────────────┼─────────────────────────────────┼──────────┼───────────────────┼───────────────────────────────────────────────────────────┤
│ apt                                               │ CVE-YYYY-XXXX                   │ HIGH     │ 1.6.12            │ 1.6.14                                                    │
│ ...                                               │ ...                             │ ...      │ ...               │ ...                                                       │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘

Cela démontre la capacité de Trivy à scanner des images stockées au format OCI, offrant une flexibilité dans la gestion et la vérification de vos images de conteneurs.

Exporter le rapport de vulnérabilités dans un fichier JSON SARIF

Dans cette étape, nous apprendrons à exporter le rapport de vulnérabilités généré par Trivy dans un fichier JSON SARIF. SARIF (Static Analysis Results Interchange Format, format d'échange des résultats d'analyse statique) est un format standard pour la sortie des outils d'analyse statique. Exporter les rapports au format SARIF facilite l'intégration des résultats de la vérification des vulnérabilités dans d'autres outils et flux de travail, tels que les pipelines CI/CD ou les tableaux de bord de sécurité.

Nous allons scanner à nouveau l'image Docker library/ubuntu:18.04, mais cette fois-ci nous utiliserons les options de formatage de Trivy pour sortir le résultat au format SARIF et le sauvegarder dans un fichier.

trivy image --format sarif --output report.sarif library/ubuntu:18.04

Décortiquons cette commande :

  • trivy image library/ubuntu:18.04 : C'est la commande standard pour scanner l'image Docker spécifiée.
  • --format sarif : Ce flag indique à Trivy de formater la sortie au format JSON SARIF.
  • --output report.sarif : Ce flag redirige la sortie dans un fichier nommé report.sarif dans votre répertoire actuel (~/project).

Trivy effectuera le scan et sauvegardera les résultats dans le fichier spécifié. Vous ne verrez pas le rapport détaillé affiché dans la console, seulement des informations sur la progression.

2023-10-27T08:15:00.000+0000    INFO    Detected OS: ubuntu
2023-10-27T08:15:00.000+0000    INFO    Detecting Ubuntu vulnerabilities...
...

Une fois la commande terminée, vous devriez avoir un fichier nommé report.sarif dans votre répertoire ~/project. Vous pouvez vérifier son existence en utilisant la commande ls.

ls report.sarif

Vous devriez voir le nom du fichier affiché, confirmant que le fichier a été créé.

report.sarif

Vous pouvez également afficher le contenu du fichier SARIF en utilisant un outil en ligne de commande comme cat ou less. Le contenu sera au format JSON, conforme à la spécification SARIF.

cat report.sarif

Vous verrez la sortie JSON, qui peut être assez longue en fonction du nombre de vulnérabilités trouvées.

{
  "version": "2.1.0",
  "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
  "runs": [
    {
      "tool": {
        "driver": {
          "name": "Trivy",
          "version": "0.50.1",
          ...
        }
      },
      "results": [
        {
          "ruleId": "CVE-YYYY-XXXX",
          "level": "error",
          "message": {
            "text": "apt: CVE-YYYY-XXXX (HIGH)"
          },
          ...
        },
        ...
      ]
    }
  ]
}

Exporter les rapports au format SARIF est un moyen puissant d'intégrer la vérification des vulnérabilités dans des flux de travail de sécurité automatisés et de tirer parti d'outils qui comprennent la norme SARIF.

Afficher les vulnérabilités avec les scores EPSS

Dans cette étape, nous apprendrons à afficher les vulnérabilités ainsi que leurs scores Exploit Prediction Scoring System (EPSS) à l'aide de Trivy. L'EPSS est une initiative basée sur des données pour estimer la probabilité qu'une vulnérabilité soit exploitée dans la nature. L'inclusion des scores EPSS dans les rapports de vulnérabilités peut aider à prioriser les efforts de correction en se concentrant sur les vulnérabilités les plus susceptibles d'être activement exploitées.

Trivy peut récupérer et afficher les scores EPSS pour les vulnérabilités si ceux-ci sont disponibles. Pour ce faire, nous devons utiliser le flag --vuln-type os,library pour nous assurer que nous recherchons à la fois les vulnérabilités du système d'exploitation et celles des bibliothèques. Trivy inclura automatiquement les scores EPSS dans la sortie si les données sont disponibles pour une CVE donnée.

Scannons à nouveau l'image Docker library/ubuntu:18.04, cette fois en demandant explicitement les types de vulnérabilités du système d'exploitation et des bibliothèques.

trivy image --vuln-type os,library library/ubuntu:18.04

Le flag --vuln-type os,library spécifie les types de vulnérabilités à scanner. Par défaut, Trivy scanne souvent ces types, mais en incluant explicitement le flag, nous le garantissons. Lorsque Trivy trouve une vulnérabilité (identifiée par un identifiant CVE) pour laquelle des données EPSS existent, il inclura le score EPSS dans le rapport.

Trivy effectuera le scan comme précédemment. La sortie sera similaire au scan initial, mais vous remarquerez une colonne supplémentaire pour les scores EPSS de certaines vulnérabilités.

2023-10-27T08:20:00.000+0000    INFO    Detected OS: ubuntu
2023-10-27T08:20:00.000+0000    INFO    Detecting Ubuntu vulnerabilities...
...
library/ubuntu:18.04 (ubuntu 18.04)
===================================
Total: 100 (UNKNOWN: 0, LOW: 50, MEDIUM: 30, HIGH: 15, CRITICAL: 5)

┌───────────────────────────────────────────────────┬─────────────────────────────────┬──────────┬───────────────────┬───────────────────────────────────────────────────────────┬───────┐
│                 Library/Package                   │              Vulnerability              │ Severity │ Installed Version │                       Fixed Version                       │ EPSS  │
├───────────────────────────────────────────────────┼─────────────────────────────────┼──────────┼───────────────────┼───────────────────────────────────────────────────────────┼───────┤
│ apt                                               │ CVE-YYYY-XXXX                   │ HIGH     │ 1.6.12            │ 1.6.14                                                    │ 0.95  │
│ ...                                               │ ...                             │ ...      │ ...               │ ...                                                       │ ...   │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┴───────┘

Remarquez la nouvelle colonne EPSS dans le tableau de sortie. Les valeurs de cette colonne représentent le score EPSS de la vulnérabilité correspondante, allant de 0 à 1. Un score EPSS plus élevé indique une probabilité plus élevée que la vulnérabilité soit exploitée dans les 30 prochains jours. Cette information est précieuse pour prioriser les vulnérabilités à traiter en premier, en se concentrant sur celles ayant des scores EPSS plus élevés.

En incluant les scores EPSS dans votre analyse des vulnérabilités, vous pouvez aller au-delà des seuls niveaux de gravité et prendre des décisions plus éclairées concernant les risques et les corrections.

Résumé

Dans ce laboratoire (lab), nous avons appris à analyser les vulnérabilités dans une image Docker à l'aide de Trivy, un outil de vérification de sécurité polyvalent. Nous avons téléchargé une image Ubuntu vulnérable et installé Trivy pour effectuer l'analyse. Cette première étape s'est concentrée sur le processus fondamental de vérification d'une image Docker en cours d'exécution pour détecter les faiblesses de sécurité.