Wie man den Befehl docker scout cves verwendet, um Sicherheitslücken zu finden

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker scout cves effektiv nutzen können, um Sicherheitslücken in Ihren Docker-Images und zugehörigen Artefakten zu identifizieren. Wir beginnen damit, direkt in einem Docker-Image nach Sicherheitslücken zu suchen. Dabei zeigen wir Ihnen, wie Sie ein anfälliges Image herunterladen und einen Sicherheitsscanner wie Trivy verwenden können, um potenzielle Probleme zu finden.

Danach erkunden Sie, wie Sie Sicherheitslücken in einer docker save-Tarball und in einem OCI-Verzeichnis analysieren können. Dies zeigt die Flexibilität des Befehls docker scout cves bei der Arbeit mit verschiedenen Formaten. Abschließend lernen Sie, wie Sie den Sicherheitslückenbericht in eine SARIF-JSON-Datei exportieren können, um ihn weiter zu verarbeiten, und wie Sie die Sicherheitslücken zusammen mit ihren zugehörigen EPSS-Werten anzeigen können, um die Behebung dieser Lücken zu priorisieren.


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{{"Wie man den Befehl docker scout cves verwendet, um Sicherheitslücken zu finden"}} docker/pull -.-> lab-555202{{"Wie man den Befehl docker scout cves verwendet, um Sicherheitslücken zu finden"}} docker/images -.-> lab-555202{{"Wie man den Befehl docker scout cves verwendet, um Sicherheitslücken zu finden"}} docker/save -.-> lab-555202{{"Wie man den Befehl docker scout cves verwendet, um Sicherheitslücken zu finden"}} docker/cp -.-> lab-555202{{"Wie man den Befehl docker scout cves verwendet, um Sicherheitslücken zu finden"}} end

Analyse von Sicherheitslücken in einem Docker-Image

In diesem Schritt lernen wir, wie man mit Trivy Sicherheitslücken in einem Docker-Image analysiert. Trivy ist ein umfassender und vielseitiger Sicherheitsscanner. Er kann Sicherheitslücken in Betriebssystempaketen (Alpine, RHEL, CentOS, Debian, Ubuntu usw.) und Anwendungsabhängigkeiten (Bundler, Composer, npm, yarn usw.) erkennen. Darüber hinaus unterstützt Trivy verschiedene Scanziele, wie z. B. Container-Images, Dateisysteme und Git-Repositories.

Zunächst laden wir ein anfälliges Docker-Image herunter, das wir für die Analyse verwenden werden. Wir verwenden das library/ubuntu:18.04-Image, von dem bekannt ist, dass es einige Sicherheitslücken aufweist.

docker pull library/ubuntu:18.04

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird.

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

Jetzt, da wir das Image haben, müssen wir Trivy installieren. Da Trivy in der LabEx-Umgebung nicht vorinstalliert ist, werden wir es herunterladen und installieren. Wir laden die neueste Version aus dem offiziellen GitHub-Repository herunter.

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

Dieser Befehl lädt das Trivy-Debian-Paket herunter. Sie sollten eine ähnliche Ausgabe wie diese sehen:

--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]

Jetzt installieren wir das heruntergeladene Paket mit dpkg.

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

Sie sollten eine Ausgabe sehen, die den Installationsprozess anzeigt.

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

Nach der Installation von Trivy können wir nun das library/ubuntu:18.04-Docker-Image auf Sicherheitslücken untersuchen.

trivy image library/ubuntu:18.04

Trivy beginnt, das Image zu scannen. Dies kann einige Zeit dauern, da es die Sicherheitslückendatenbanken herunterlädt und die Image-Ebenen analysiert. Sie werden eine Ausgabe sehen, die den Fortschritt anzeigt, und dann einen detaillierten Bericht über die gefundenen Sicherheitslücken.

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                                                    │
│ ...                                               │ ...                             │ ...      │ ...               │ ...                                                       │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘

Die Ausgabe bietet eine Zusammenfassung der insgesamt gefundenen Sicherheitslücken, kategorisiert nach Schweregrad (UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL). Anschließend werden alle Sicherheitslücken aufgelistet, zusammen mit Details wie dem betroffenen Paket, der Sicherheitslücken-ID (z. B. CVE-YYYY-XXXX), dem Schweregrad, der installierten Version des Pakets und der behobenen Version, falls verfügbar. Dieser Bericht hilft Ihnen, die Sicherheitslage Ihres Docker-Images zu verstehen und Bereiche zu identifizieren, die behoben werden müssen.

Analyse von Sicherheitslücken aus einer docker save-Tarball

In diesem Schritt lernen wir, wie man Sicherheitslücken in einem als Tarball-Datei gespeicherten Docker-Image analysiert. Dies ist nützlich, wenn Sie ein Image scannen müssen, das nicht direkt in einem Docker-Registry oder auf dem lokalen Docker-Daemon verfügbar ist, aber Sie das Image als Datei gespeichert haben.

Zunächst müssen wir das library/ubuntu:18.04-Docker-Image, das wir im vorherigen Schritt heruntergeladen haben, in eine Tarball-Datei speichern. Hierfür können wir den Befehl docker save verwenden.

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

Dieser Befehl speichert das library/ubuntu:18.04-Image in einer Datei namens ubuntu_18.04.tar im aktuellen Verzeichnis (~/project). Das -o-Flag gibt die Ausgabedatei an.

Sie sollten eine Ausgabe sehen, die anzeigt, dass die Image-Ebenen gespeichert werden.

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

Jetzt, da wir das Image als Tarball gespeichert haben, können wir Trivy verwenden, um diese Datei zu scannen. Wir verwenden erneut den Befehl trivy image, geben diesmal aber die Tarball-Datei als Ziel an.

trivy image --input ubuntu_18.04.tar

Das --input-Flag teilt Trivy mit, ein Image aus einer Tarball-Datei zu scannen, anstatt es aus einem Registry zu laden oder ein lokales Image anhand des Namens zu scannen. Trivy liest die Image-Daten aus der Datei ubuntu_18.04.tar und führt die Sicherheitslückenanalyse durch, ähnlich wie beim direkten Scannen eines lokalen Images.

Sie werden eine Ausgabe sehen, die zeigt, dass Trivy das Image aus der Tarball lädt, gefolgt vom Sicherheitslückenscanning-Prozess und dem Bericht, genau wie im vorherigen Schritt.

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                                                    │
│ ...                                               │ ...                             │ ...      │ ...               │ ...                                                       │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘

Dies zeigt, wie Trivy Docker-Images analysieren kann, auch wenn sie nicht in den Docker-Daemon geladen sind, indem es die mit docker save erstellte Tarball scannt. Dies ist eine flexible Möglichkeit, den Sicherheitslückenscanning in Workflows zu integrieren, bei denen Images als Dateien übertragen werden.

Analyse von Sicherheitslücken aus einem OCI-Verzeichnis

In diesem Schritt werden wir untersuchen, wie man Sicherheitslücken in einem in Open Container Initiative (OCI)-Layout-Format gespeicherten Image analysiert. Die OCI Image Format Specification definiert einen Standard für die Verpackung von Container-Images. Tools wie Skopeo und Buildah können verwendet werden, um Images in diesem Format zu erstellen und zu verwalten. Trivy kann direkt Images scannen, die in einem OCI-Verzeichnis gespeichert sind.

Zunächst müssen wir aus unserem library/ubuntu:18.04-Docker-Image ein OCI-Verzeichnis erstellen. Hierfür verwenden wir das Befehlszeilen-Utilität skopeo. Da skopeo nicht vorinstalliert ist, müssen wir es installieren.

sudo apt update
sudo apt install -y skopeo

Dies aktualisiert die Paketliste und installiert skopeo. Sie werden eine Ausgabe sehen, die den Installationsprozess anzeigt.

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

Jetzt, da skopeo installiert ist, können wir das Docker-Image in ein OCI-Verzeichnis kopieren. Wir erstellen ein Verzeichnis namens ubuntu_oci in unserem ~/project-Verzeichnis und kopieren das Image hinein, indem wir skopeo copy verwenden.

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

Der Befehl skopeo copy wird verwendet, um Images zwischen verschiedenen Speicherorten und Formaten zu übertragen.

  • docker-daemon:library/ubuntu:18.04 gibt das Quellimage an, das library/ubuntu:18.04 im lokalen Docker-Daemon ist.
  • oci:ubuntu_oci:18.04 gibt das Zielformat und den Zielort an. oci: gibt das OCI-Format an, ubuntu_oci ist das Verzeichnis, in dem das OCI-Image gespeichert wird, und 18.04 ist das Tag für das Image innerhalb dieses OCI-Verzeichnisses.

Sie werden eine Ausgabe sehen, die den Kopiervorgang anzeigt.

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

Jetzt sollten Sie ein Verzeichnis namens ubuntu_oci haben, das die OCI-Image-Daten enthält. Sie können den Inhalt dieses Verzeichnisses auflisten, um die OCI-Layout-Dateien zu sehen.

ls ubuntu_oci

Sie werden Dateien und Verzeichnisse wie oci-layout, index.json und blobs sehen.

blobs  index.json  oci-layout

Schließlich können wir Trivy verwenden, um dieses OCI-Verzeichnis auf Sicherheitslücken zu scannen. Wir verwenden den Befehl trivy image und geben den Pfad des OCI-Verzeichnisses an.

trivy image oci:ubuntu_oci:18.04

Trivy erkennt das oci:-Präfix und scannt das Image im Verzeichnis ubuntu_oci mit dem Tag 18.04. Es analysiert die Image-Ebenen und meldet alle gefundenen Sicherheitslücken, ähnlich wie beim direkten Scannen eines Docker-Images.

Sie werden eine Ausgabe sehen, die zeigt, dass Trivy das OCI-Image scannt, gefolgt vom Sicherheitslückenbericht.

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                                                    │
│ ...                                               │ ...                             │ ...      │ ...               │ ...                                                       │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘

Dies zeigt Trivys Fähigkeit, Images im OCI-Format zu scannen, und bietet Flexibilität bei der Verwaltung und dem Scannen Ihrer Container-Images.

Exportieren eines Sicherheitslückenberichts in eine SARIF-JSON-Datei

In diesem Schritt lernen wir, wie man den von Trivy generierten Sicherheitslückenbericht in eine SARIF-JSON-Datei exportiert. SARIF (Static Analysis Results Interchange Format) ist ein Standardformat für die Ausgabe von statischen Analysetools. Das Exportieren von Berichten im SARIF-Format erleichtert die Integration von Sicherheitslückenscannergebnissen in andere Tools und Workflows, wie z. B. CI/CD-Pipelines oder Sicherheitsdashboards.

Wir werden das library/ubuntu:18.04-Docker-Image erneut scannen, aber diesmal verwenden wir Trivys Formatierungsoptionen, um das Ergebnis im SARIF-Format auszugeben und es in einer Datei zu speichern.

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

Lassen Sie uns diesen Befehl zerlegen:

  • trivy image library/ubuntu:18.04: Dies ist der Standardbefehl, um das angegebene Docker-Image zu scannen.
  • --format sarif: Dieses Flag teilt Trivy mit, die Ausgabe als SARIF-JSON zu formatieren.
  • --output report.sarif: Dieses Flag leitet die Ausgabe in eine Datei namens report.sarif im aktuellen Verzeichnis (~/project) um.

Trivy führt den Scan durch und speichert die Ergebnisse in der angegebenen Datei. Sie werden den detaillierten Bericht nicht auf der Konsole sehen, nur Fortschrittsinformationen.

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

Nachdem der Befehl abgeschlossen ist, sollten Sie eine Datei namens report.sarif in Ihrem ~/project-Verzeichnis haben. Sie können die Existenz der Datei mit dem ls-Befehl überprüfen.

ls report.sarif

Sie sollten den Dateinamen ausgegeben sehen, was bestätigt, dass die Datei erstellt wurde.

report.sarif

Sie können auch den Inhalt der SARIF-Datei mit einem Befehlszeilentool wie cat oder less anzeigen. Der Inhalt wird im JSON-Format sein und der SARIF-Spezifikation folgen.

cat report.sarif

Sie werden die JSON-Ausgabe sehen, die je nach Anzahl der gefundenen Sicherheitslücken recht lang sein kann.

{
  "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)"
          },
          ...
        },
        ...
      ]
    }
  ]
}

Das Exportieren von Berichten im SARIF-Format ist eine leistungsstarke Möglichkeit, den Sicherheitslückenscanning in automatisierte Sicherheitsworkflows zu integrieren und Tools zu nutzen, die den SARIF-Standard verstehen.

Anzeige von Sicherheitslücken mit EPSS-Scores

In diesem Schritt lernen wir, wie man mit Trivy Sicherheitslücken zusammen mit ihren Exploit Prediction Scoring System (EPSS)-Scores anzeigt. EPSS ist ein datengesteuerter Ansatz, um die Wahrscheinlichkeit abzuschätzen, dass eine Sicherheitslücke in der Praxis ausgenutzt wird. Das Einbeziehen von EPSS-Scores in Sicherheitslückenberichte kann helfen, die Behebungsefforts zu priorisieren, indem man sich auf Sicherheitslücken konzentriert, die wahrscheinlicher aktiv ausgenutzt werden.

Trivy kann EPSS-Scores für Sicherheitslücken abrufen und anzeigen, wenn diese verfügbar sind. Dazu müssen wir die Option --vuln-type os,library verwenden, um sicherzustellen, dass wir sowohl nach Betriebssystem- als auch nach Bibliothekssicherheitslücken suchen. Trivy wird automatisch EPSS-Scores in die Ausgabe aufnehmen, wenn die Daten für eine bestimmte CVE verfügbar sind.

Lassen Sie uns das library/ubuntu:18.04-Docker-Image erneut scannen, diesmal explizit nach Betriebssystem- und Bibliothekssicherheitslücken.

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

Die Option --vuln-type os,library gibt die Typen der zu suchenden Sicherheitslücken an. Standardmäßig sucht Trivy oft nach diesen Typen, aber das explizite Hinzufügen der Option stellt dies sicher. Wenn Trivy eine Sicherheitslücke (identifiziert durch eine CVE-ID) findet, für die EPSS-Daten vorhanden sind, wird es den EPSS-Score in den Bericht aufnehmen.

Trivy führt den Scan wie zuvor durch. Die Ausgabe wird ähnlich wie beim ersten Scan sein, aber Sie werden eine zusätzliche Spalte für EPSS-Scores für einige Sicherheitslücken bemerken.

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  │
│ ...                                               │ ...                             │ ...      │ ...               │ ...                                                       │ ...   │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┴───────┘

Beachten Sie die neue EPSS-Spalte in der Ausgabetabelle. Die Werte in dieser Spalte repräsentieren den EPSS-Score für die entsprechende Sicherheitslücke und liegen zwischen 0 und 1. Ein höherer EPSS-Score zeigt eine höhere Wahrscheinlichkeit an, dass die Sicherheitslücke in den nächsten 30 Tagen ausgenutzt wird. Diese Informationen sind wertvoll, um zu priorisieren, welche Sicherheitslücken zuerst behoben werden sollen, indem man sich auf diejenigen mit höheren EPSS-Scores konzentriert.

Durch das Einbeziehen von EPSS-Scores in Ihre Sicherheitslückenanalyse können Sie über reine Schweregrade hinausgehen und informiertere Entscheidungen über Risiken und Behebungen treffen.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mit Trivy, einem vielseitigen Sicherheitsscanner, Sicherheitslücken in einem Docker-Image analysiert. Wir haben ein anfälliges Ubuntu-Image heruntergeladen und Trivy installiert, um die Analyse durchzuführen. Dieser erste Schritt konzentrierte sich auf den grundlegenden Prozess des Scannens eines aktiven Docker-Images auf Sicherheitslücken.