GNU/Linux >> LINUX-Kenntnisse >  >> Linux

DevSecOps:Scannen von Bildern in Ihren Pipelines mit dem quay.io-Scanner

Laut dem Sysdig 2021 Container Security and Usage Report ist die Containersicherheit für viele Unternehmen ein wachsendes Anliegen. Allerdings gibt es noch einige Lücken. Das Scannen von Container-Images und privilegierte Container sind zwei der wichtigsten Aspekte.

Podman-Rootless-Container (siehe Rootless-Podman als Nicht-Root-Benutzer ausführen und Rootless-Container mit Podman:Die Grundlagen) und OpenShift Container Platform implementieren beide standardmäßig das Prinzip der geringsten Rechte, das Administratoren dabei hilft, Best Practices für die Sicherheit durchzusetzen. Die Angebote von Red Hat quay.io und Red Hat quay Container Registry helfen Administratoren und Entwicklern, Image-Schwachstellenscans in ihre CI/CD-Pipelines zu integrieren.

[Sie könnten auch gerne lesen: Verbesserte systemd-Integration mit Podman 2.0 ]

Red Hat verwaltet quay.io, eine gehostete öffentliche Containerregistrierung. Einzelpersonen oder Unternehmen können die Registrierung zum Speichern und Freigeben von Container-Images (innerhalb einer Organisation oder für die breite Öffentlichkeit) verwenden. Red Hat Universal Base Images (UBI) basieren auf RHEL und bieten eine Möglichkeit, Ihre Anwendungs-Images frei zu erstellen und freizugeben.

Die Registrierung verfügt über einen integrierten Sicherheitsscanner, der die Images auf Schwachstellen überprüft, Details zu den Paketen im Image bereitstellt und die Schwachstellen mit den zugehörigen Korrekturen identifiziert. Es organisiert die Schwachstellen in den Schweregradkategorien Niedrig, Mittel und Hoch. Es enthält auch Metadaten wie die CVE-Nummer und einen Link zu den Errata im Zusammenhang mit den Schwachstellen. Mit zunehmendem Alter von Container-Images werden neue CVEs entdeckt, daher werfen wir für diesen Artikel einen Blick auf eine ältere Version von UBI. Zum Zeitpunkt des Schreibens dieses Artikels hat beispielsweise einer der spezifischen Builds von ubi8 (8.2-299) die folgende Ausgabe, die 178 Pakete (10 Pakete mit hoher Auswirkung) und 38 Sicherheitslücken (10 hohe Auswirkung) hervorhebt.

Die Benutzeroberfläche von quay.io stellt die Informationen zu den Schwachstellen in einem benutzerfreundlichen Format bereit. Man kann die Liste der Pakete durchsuchen, die betroffenen Pakete überprüfen und die Schwachstellendetails anzeigen. Bei Organisationen, die sich auf DevSecOps konzentrieren, ist es jedoch vorteilhaft, diese Informationen spontan zu erhalten und sie vor jeder Bereitstellung zu verwenden, um sicherzustellen, dass nur sichere Images in die Produktionsumgebung gelangen.

Dieser Artikel setzt eine gewisse grundlegende Vertrautheit mit quay.io-Konzepten wie Repositories, Robot-Accounts und allgemeinen Aufgaben wie Image-Builds (mithilfe von DockerFiles) und Image-Tagging voraus. Falls Sie daran interessiert sind, mehr über diese Konzepte zu erfahren, können Sie in den quay.io-Benutzerhandbüchern nachschlagen.

Um die Scan-Informationen über die Befehlszeile abzurufen, verwenden Sie skopeo und jq Befehle. Mit Skopeo können Benutzer nicht nur Bilder untersuchen, ohne sie zuerst auf einen lokalen Computer herunterzuladen, sondern es unterstützt auch das Kopieren von Bildern von einem Repository (lokal oder remote) in ein anderes.

Der folgende Befehl ruft die Bildmetadaten ähnlich wie docker inspect ab Befehl, der für ein lokales Bild ausgeführt wird:

# IMAGE_NAME='app-sre/ubi8-ubi'
# IMAGE_TAG='8.2-299'
# skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG

Um den eindeutigen Digest des Bildes zu erhalten, können wir die empfangene json-Ausgabe mit jq parsen Befehl.

# IMAGE_DIGEST=`skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG | jq -r .Digest`

Mit dem Digest können Sie den Sicherheitsbericht für das Bild abrufen, indem Sie die quay.io-APIs abfragen. Wir können die Ausgabe (json-Datei) in einer lokalen Datei speichern und jq verwenden um nach den gewünschten Inhalten zu filtern.

# curl -o `basename $IMAGE_NAME`.json https://quay.io/api/v1/repository/$IMAGE_NAME/manifest/$IMAGE_DIGEST/security?vulnerabilities=true

Um beispielsweise die Informationen zu Schwachstellen mit hohem Schweregrad mit der zugehörigen Advisory-ID, Advisory-URL, dem Paketnamen, der betroffenen Version und der Version, die die Korrekturen enthält, abzurufen, kann der folgende Befehl verwendet werden:

jq '.data.Layer.Features[]' `basename $IMAGE_NAME`.json | jq -c '{"Name":.Name,"Version":.Version,"Advisory":.Vulnerabilities[]} | select(.Advisory.Severity=="High") | {"Advisory":.Advisory.Name,"Link":.Advisory.Link,"PACKAGE":.Name,"CURRENT VERSION":.Version,"FIXED IN VERSION":.Advisory.FixedBy }'

Der Befehl erzeugt eine Ausgabe wie die folgende, die angibt, dass dieses UBI-Image (app-sre/ubi8-ubi) 10 beratende Benachrichtigungen enthält:

{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-tools","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-libs","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-common","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-daemon","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:2755","Link":"https://access.redhat.com/errata/RHSA-2020:2755","PACKAGE":"libnghttp2","CURRENT VERSION":"1.33.0-1.el8_0.1","FIXED IN VERSION":"0:1.33.0-3.el8_2.1"}
{"Advisory":"RHSA-2020:5476","Link":"https://access.redhat.com/errata/RHSA-2020:5476","PACKAGE":"openssl-libs","CURRENT VERSION":"1:1.1.1c-15.el8","FIXED IN VERSION":"1:1.1.1g-12.el8_3"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"python3-librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:2637","Link":"https://access.redhat.com/errata/RHSA-2020:2637","PACKAGE":"gnutls","CURRENT VERSION":"3.6.8-10.el8_2","FIXED IN VERSION":"0:3.6.8-11.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}

[ Kostenloser Kurs:Technischer Überblick über Red Hat Satellite. ] 

Abschluss

Im nächsten Teil dieser Artikelserie integriere ich die Informationen aus diesem Artikel in eine Beispielpipeline, um fundierte Entscheidungen darüber zu treffen, ob mit diesem Image fortgefahren und Anwendungen in der Produktion bereitgestellt werden sollen.


Linux
  1. Container-Image-Builds mit Buildah beschleunigen

  2. Rogue-Geräte in Ihrem Netzwerk mit Nmap finden

  3. Fügen Sie diese 4 Tools zu Ihrer Linux-Container-Toolbox hinzu

  4. So schreiben Sie mit dem Linux-Befehl Text auf ein Bild

  5. Verwenden Sie „Rufus“, um Ihr ISO-Image auf einen USB-Stick zu kopieren

Verwalten Sie Ihre Spiele mit Lutris unter Linux

Verwenden von Telnet zur Fehlerbehebung Ihres E-Mail-Systems

Manuelles Erstellen eines Linux-Containers mithilfe von Namespaces

Eine Einführung in die Containerregistrierung von Quay

So ändern Sie die Größe von Bildern mit Python

Skanlite – Ein einfaches Bildscan-Tool für Linux