UBI-Images nutzen, um Container-Schwachstellen zu minimieren
Rags Srinivas
27. März 2020
0 Min. LesezeitBei Snyk arbeiten wir kontinuierlich daran, Lösungen für Container- und Cloud-Native-Sicherheit zu verbessern. Snyk Container unterstützt Entwickler dabei, die Sicherheit ihrer Container-Images vollständig selbst zu verantworten.
Eine häufige Ursache für Schwachstellen in Containern ist das Basis-Image, das als Grundlage für Ihre eigenen benutzerdefinierten Images dient. Statt lediglich auf neue Schwachstellen zu reagieren, empfiehlt es sich, proaktiv vorzugehen und mit einer sorgfältig zusammengestellten und regelmäßig aktualisierten Auswahl an Basis-Images zu beginnen.
In diesem Beitrag befassen wir uns mit Red Hat Universal Base Images, die dabei helfen, das oben beschriebene Ziel zu erreichen.
Was ist ein Universal Base Image (UBI)?
Auf dem Red Hat Summit 2019 angekündigt, basieren Red Hat Universal Base Images auf einer Plattform für Unternehmen: Red Hat Enterprise Linux (RHEL). Bei den Images handelt es sich um OCI-konforme Container-Betriebssystem-Basis-Images mit verschiedenen Laufzeitumgebungen für Programmiersprachen und frei weiterverteilbaren Paketen. Diese Images für UBI 8 werden beispielsweise bei jeder Aktualisierung der RHEL-8-Basis-Images und bei der Behebung kritischer CVEs aktualisiert.
Aus technischer Sicht sind sie nahezu identisch mit Red Hat Enterprise Linux-Images und bieten daher hohe Sicherheit und Leistung sowie lange Lebenszyklen. Sie werden unter einer anderen Endbenutzer-Lizenzvereinbarung veröffentlicht. So können Sie mit UBI eine containerisierte Anwendung erstellen, in eine beliebige Registry übertragen und einfach mit anderen teilen. Da sie frei weiterverteilbar ist, können Sie die Anwendung sogar auf Nicht-Red-Hat-Plattformen bereitstellen.
Ausführliche Informationen finden Sie in der Red Hat-Dokumentation zum Erstellen, Ausführen und Verwalten von Containern. Zertifizierte Container-Images sind außerdem im Container-Katalog von Red Hat aufgeführt. Die UBI-Images decken zahlreiche beliebte Programmiersprachen ab, darunter dotnet, golang, nodejs, Python, PHP und Ruby.
Weitere Informationen zu UBI-Images finden Sie in den FAQ von Red Hat. Wie wir im Folgenden zeigen, lassen sich UBI-Images jedoch recht einfach in Ihren Workflow integrieren.
Container-Images mit UBI erstellen
Sehen wir uns zunächst ein Dockerfile-Beispiel für Python an. Mit einem ähnlichen Ansatz lassen sich UBI-Images auch für verschiedene Laufzeitumgebungen anderer Programmiersprachen verwenden.
Hier sehen Sie ein automatisch generiertes Dockerfile für ein einfaches Python-Beispiel mit „Hello World!“, das Flask verwendet.
Statt python als Basis-Image zu verwenden, nutzen wir das UBI-Image aus der Red Hat-Registry und passen das Dockerfile wie unten gezeigt an. (Möglicherweise benötigen Sie die entsprechenden Zugangsdaten, um sich zu authentifizieren und die Images zu verwenden.) Beachten Sie, dass sich nur die erste Zeile ändert, in der wir das UBI-Image verwenden.
Eine containerisierte Anwendung mit einem UBI-Image als Basis zu erstellen, funktioniert genauso wie mit einem Image ohne UBI, wie unten gezeigt:
Wenn Sie Snyk für die containerisierte Anwendung mit einem UBI-Image als Basis ausführen, wird eine Liste von Schwachstellen wie unten gezeigt erstellt.
Das Ausführen des UBI-basierten Container-Images funktioniert genauso wie das Ausführen der Anwendung auf Grundlage eines Images ohne UBI, wie unten gezeigt.
Dies ist dank des in der Dokumentation beschriebenen Prinzips möglich: „Mit den neuen Red Hat Universal Base Images können Sie Ihren Container EINMAL erstellen und frei auf mehreren Bereitstellungsplattformen weiterverteilen.“
Wenn Sie zum Testen oder Ausführen der Anwendung lieber das Container-Toolset von Red Hat verwenden, können Sie den folgenden Befehl nutzen:
Nachdem wir uns ein Beispiel für Python angesehen haben, wollen wir nicht jede Laufzeitumgebung einzeln durchgehen (zumal für die jeweilige Laufzeitumgebung möglicherweise noch kleinere Änderungen erforderlich sind), sondern uns alle gemeinsam ansehen.
UBI-Images für mehrere Programmiersprachen
Wie bereits erwähnt, gibt es UBI-Images für verschiedene Laufzeitumgebungen von Programmiersprachen. Eine Snyk-Analyse der verschiedenen UBI-Images liefert die in der folgenden Tabelle zusammengefassten Ergebnisse.
UBI-Image | Abhängigkeiten | Schwachstellen |
|---|---|---|
registry.redhat.io/ubi8/nodejs-10 | 373 | 9 |
registry.redhat.io/ubi8/python-36 | 417 | 9 |
registry.redhat.io/ubi8/ruby-26 | 481 | 9 |
registry.redhat.io/ubi8/php-73 | 403 | 9 |
registry.redhat.io/ubi8/go-toolset | 371 | 13 |
registry.redhat.io/ubi8/dotnet-21 | 248 | 10 |
Die UBI-Images für verschiedene Programmiersprachen weisen so wenige Schwachstellen auf, weil Red Hat sie sorgfältig zusammenstellt und aktualisiert. Dazu gehören das Basis-Betriebssystem, die yum-Repositories für die Installation von Paketen und Tools sowie die Programmiersprachen und Frameworks. In diesem Artikel von Red Hat erfahren Sie mehr dazu. Er beschreibt insbesondere, wie Red Hat eine Fehlerliste für die UBI-Images pflegt und sie regelmäßig nach einem ähnlichen Verfahren wie das Basis-Betriebssystem aktualisiert und wartet.
Zusammenfassung und nächste Schritte
Wir haben gezeigt, wie einfach sich containerisierte Anwendungen für verschiedene Laufzeitumgebungen auf UBI-Images aufbauen lassen. Die erforderlichen Änderungen, einschließlich des Abrufs des Red Hat UBI-Images, lassen sich problemlos in Ihre CI/CD- oder Entwicklungs-Pipeline integrieren, ohne dass Sie Ihre gewohnten Arbeitsabläufe ändern müssen.
Aus Sicherheitssicht sind UBI-Images eine gute Option für die Containerisierung Ihrer Anwendungen. Wie wir gesehen haben, werden UBI-Images einem strengen Wartungsprozess unterzogen, der dem etablierten Verfahren für das RHEL-Betriebssystem entspricht. Da UBI-Images für verschiedene Laufzeitumgebungen verfügbar sind, können sie als Basis für Ihre Container-Images dazu beitragen, Schwachstellen in Ihrer Anwendung zu minimieren.
Snyk unterstützt die Sicherheit Ihrer Anwendungsentwicklung während des gesamten Softwareentwicklungszyklus. Dazu gehören Integrationen mit Ihrer Image-Registry, Ihrem Dockerfile-Repository, Ihren CI/CD-Pipelines und Ihren Kubernetes-Clustern, einschließlich OpenShift-4-Umgebungen. Snyk Container unterstützt UBI- und RHEL-Images sowie weitere beliebte Linux-Distributionen.
Container-Sicherheit mit Fokus auf Entwickler
Snyk findet und behebt automatisch Schwachstellen in Container-Images und Kubernetes-Workloads.
