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.
Sicherheitslücken in einem Docker-Image analysieren
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.
Sicherheitslücken in einem mit docker save erstellten Tarball analysieren
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.
Sicherheitslücken in einem OCI-Verzeichnis analysieren
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.04gibt das Quellimage an, daslibrary/ubuntu:18.04im lokalen Docker-Daemon ist.oci:ubuntu_oci:18.04gibt das Zielformat und den Zielort an.oci:gibt das OCI-Format an,ubuntu_ociist das Verzeichnis, in dem das OCI-Image gespeichert wird, und18.04ist 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.
Sicherheitslückenbericht in eine SARIF - JSON - Datei exportieren
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 namensreport.sarifim 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.
Sicherheitslücken mit EPSS - Scores anzeigen
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.



