GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So prüfen Sie den Inhalt eines Docker-Images, ohne einen Container zu starten

Docker-Images können beliebige Binärdateien und Bibliotheken in einem einzigen Daten-Blob bündeln. Indem Sie untersuchen, was tatsächlich in einem Bild enthalten ist, können Sie seine Eignung einschätzen und Sicherheitsrisiken identifizieren.

Der einfachste Weg, den Inhalt eines Bildes zu erkunden, besteht darin, einen Container zu starten, eine Shell-Sitzung zu erhalten und dann reguläre Terminalbefehle wie ls zu verwenden und cd um die Verzeichnisstruktur von innen anzuzeigen. Dies ist jedoch in sicherheitskritischen Umgebungen nicht ideal – das Erstellen eines Containers mit einem unbekannten Image könnte Sie einem böswilligen Einstiegspunkt-Skript aussetzen.

Hier sind Techniken, mit denen Sie die Dateien eines Bildes untersuchen können, ohne einen Container zu starten.

Erstellen eines Containers, ohne ihn zu starten

docker create ist ein weniger bekanntes Gegenstück zu docker run . Es erstellt einen neuen Container auf einem bestimmten Bild, ohne es zu starten. Sie können es später mit docker start starten Befehl.

Das Erstellen eines neuen Containers ist nicht gefährlich, da er inaktiv bleibt, bis er ausgeführt wird. Sie können es grob mit der Definition der Konfigurationseinstellungen für eine VM vergleichen, die Sie nicht verwenden. Selbst wenn es so eingestellt ist, dass es von einer fehlerhaften Betriebssystem-ISO bootet, werden Sie Ihrer Umgebung keinen Schaden zufügen.

docker create --name suspect-container suspect-image:latest

Der obige Befehl erstellt einen neuen Container namens suspect-container das basiert auf suspect-image:latest Bild.

Exportieren des Dateisystems des Containers

Jetzt haben Sie einen gültigen, aber angehaltenen Container, Sie können sein Dateisystem mit dem docker export exportieren Befehl. Da der Container noch nie gestartet wurde, können Sie sicher sein, dass der Export genau das Dateisystem darstellt, das durch die Ebenen Ihres Bildes definiert ist.

docker export suspect-container > suspect-container.tar

Am Ende haben Sie ein tar-Archiv in Ihrem Arbeitsverzeichnis, das alles in Ihrem Image enthält. Öffnen oder extrahieren Sie dieses Archiv mit Ihrer bevorzugten Software, um die Verzeichnisse des Bildes zu durchsuchen und Dateien aufzulisten und anzuzeigen.

Wenn Sie das Archiv nicht speichern oder öffnen müssen, sondern lieber die Dateiliste in Ihrem Terminal abrufen möchten, ändern Sie den tar Befehl:

docker export suspect-container | tar t > suspect-container-files.txt

tar t listet den Inhalt des Eingangsarchivs auf. Am Ende erhalten Sie eine Liste mit allem in Ihrem Image in suspect-container-files.txt .

Verwendung von „Docker-Image-Speicherung“

Eine Variation dieser Technik ist die Verwendung von docker image save . Dieser Befehl speichert die Daten eines Bildes direkt in einem tar-Archiv.

docker image save suspect-image:latest > suspect-image.tar

Diese Methode erzeugt ein Archiv, das sich auf das Bild konzentriert, nicht auf daraus erstellte Container. Das Tar enthält eine manifest.json Datei, die die Ebenen des Bildes beschreibt, und eine Reihe von Verzeichnissen, die den Inhalt aller einzelnen Ebenen enthalten.

Dies ist hilfreich, wenn Sie die Rolle der einzelnen Ebenen beim Erstellen des Bildes bewerten. Das Erstellen und Exportieren eines angehaltenen Containers ist jedoch eine zugänglichere Möglichkeit, das endgültige Dateisystem des Images zu durchsuchen.

Auflisten von Ebenen mit „docker image history“

Eine andere Möglichkeit, den Inhalt eines Bildes zu überprüfen, besteht darin, seine Ebenenliste mit dem docker image history anzuzeigen Befehl.

docker image history suspect-image:latest

Dadurch werden die Dockerfile-Anweisungen verfügbar gemacht, aus denen die Ebenen des Bildes zusammengesetzt sind. Dadurch können Sie einzelne Dateien und Verzeichnisse im Dateisystem des Abbilds nicht sehen, aber es kann effektiver sein, verdächtiges Verhalten hervorzuheben.

Jede Zeile in der Ausgabe des Befehls repräsentiert eine neue Ebene im Bild. Die Spalte „ERSTELLT VON“ zeigt die Dockerfile-Anweisung, die die Ebene erstellt hat.

Das Scannen der Ebenenliste hilft Ihnen, verdächtige Aktionen schnell zu erkennen, die darauf hindeuten könnten, dass Sie ein schädliches Bild verwenden. Suchen Sie in RUN nach unbekannten Binärdateien Anweisungen, unerwartete Änderungen der Umgebungsvariablen und verdächtige CMD und ENTRYPOINT Aussagen.

Die letzten beiden Schichten sind wohl die wichtigsten, die es bei der Untersuchung der Geschichte eines Bildes zu beurteilen gilt. Sie sagen Ihnen genau, was gestartet wird, wenn Sie docker run ausführen oder docker start ein Container. Wenn eine der Anweisungen verdächtig oder ungewohnt aussieht, sollten Sie die oben genannten Techniken anwenden, um die referenzierten Binärdateien oder Skripte vollständig zu untersuchen.

Der Zugriff auf das Dateisystem eines Bildes bietet eine sehr detaillierte Ansicht seines Inhalts, in dem schädliche Inhalte selbst nach manueller Überprüfung leicht unbemerkt bleiben können. Die Ebenenliste, die vom docker image history verfügbar gemacht wird kann Ihnen nicht dabei helfen, getarnte Dateisystemelemente zu finden, ist aber effektiver bei der Aufdeckung offenkundig bösartiger Vorgänge wie heimlicher Spyware-Downloads oder Überschreibungen von Umgebungsvariablen.

Tools von Drittanbietern

Open-Source-Tools von Drittanbietern sind ebenfalls verfügbar, um Ihnen beim Auflisten des Inhalts von Bildern zu helfen. Diese bieten in der Regel Filterfunktionen, sodass Sie installierte Betriebssystempakete, Programmiersprachenabhängigkeiten und gewöhnliche Dateien schnell auflisten können.

Die Bildinspektion ist in die Container-Scan-Engine von Anchore integriert. Sie können es verwenden, indem Sie anchore-cli image content my-image:latest ausführen nachdem Sie Anchore installiert haben. Dies liefert eine vollständige Liste des Dateisysteminhalts des Zielimages.

Eine weitere Option ist Dive, ein Tool, das speziell für die Visualisierung von Bildinhalten entwickelt wurde. Es verwendet einen ebenenbasierten Ansatz und hebt die Dateisystemänderungen hervor, die mit jeder neuen Ebene vorgenommen werden. Sie durchsuchen das Dateisystem mit einer baumbasierten interaktiven Terminalansicht.

Schlussfolgerung

Docker-Images sind zum Zeitpunkt des Verbrauchs normalerweise undurchsichtig. Gängige Registrierungsstellen bieten keine Dateiliste in ihren APIs oder Benutzeroberflächen. Diese Funktionalität ist auch nicht in die Docker-CLI integriert. Obwohl viele Entwickler Images unverändert verwenden, kann ein ungeprüftes Image in Umgebungen mit hohem Risiko nicht tolerierbar sein.

Sie können ein verdächtiges Bild untersuchen, indem Sie es in ein Archiv exportieren und seinen Inhalt durchsuchen. Dies hält das Image inert, verhindert die Ausführung bösartiger Inhalte und bietet gleichzeitig eine vollständige Ansicht des Dateisystems, das es in einem Container erstellen würde.

Sie können Ihre Sicherheitslage weiter verbessern, indem Sie die manuelle Inhaltsexploration mit automatisierten Bildscans kombinieren. Diese beschleunigen den Prozess der Erkennung bekannter Schwachstellen, sind jedoch möglicherweise nicht effektiv beim Auffinden neuer bösartiger Dateien, die an verborgenen Orten abgelegt sind. Durch die Verwendung mehrerer Techniken können Sie Ihre Abdeckung erweitern und die größtmögliche Menge verdächtiger Dateien erfassen.


Docker
  1. So führen Sie MySQL in einem Docker-Container aus

  2. Wie man SSH in einen Docker-Container einfügt

  3. So weisen Sie einem Docker-Container eine statische IP zu

  4. So trennen Sie sich von einem Docker-Container, ohne ihn zu stoppen

  5. So installieren Sie Vim in einem Docker-Container

So führen Sie PHPMyAdmin in einem Docker-Container aus

So führen Sie Grafana in einem Docker-Container aus

So erstellen Sie ein Docker-Image aus einem laufenden Container

So erstellen Sie ein Docker-Windows-Image mit Docker-Build-Tag

So richten Sie einen Apache Docker-Container ein

So verwenden Sie Docker Commit zum Ändern von Container-Images