Gina Sanders - stock.adobe.com
Clair hilft Schwachstellen in Docker-Images aufzuspüren
Schwachstellen in Containern bieten Einfallstore für Angreifer und kaskadierende Systemausfälle. Mit Clair lassen sich Images vor der Installation Scannen, um das zu verhindern.
Docker-Images enthalten nicht nur Anwendungen, sondern auch ein Basisbetriebssystem und einige zusätzliche Hilfsprogramme, damit die Anwendung funktioniert wie gewünscht. Docker erlaubt zwar kleine Container-Images, Nutzer sollten sich aber bewusst sein, dass diese immer ein Sicherheitsrisiko mitbringen. Scans sind eine Möglichkeit, sich zu schützen.
Tools zum Scannen von Containern suchen nach bekannten Schwachstellen in Images. Viele Scan-Tools für Container verwenden eine Datenbank namens Common Vulnerabilities and Exposures. Diese Datenbank mit Schwachstellen, die gemeinhin als CVE bezeichnet wird, dient den Scan-Tools als Grundlage für ihre Suche.
In diesem Artikel nutzen wir Clair, um ein Docker-Image auf Schwachstellen zu untersuchen. Clair ist ein Open-Source-Tool zum Scannen von Containern und kommt von Quay.io – einer von Red Hat im Jahr 2018 übernommenen Firma. Clair ist nicht das einzige Scan-Werkzeug für Container auf dem Markt. Die meisten von ihnen führen eine statische Analyse des Docker-Images durch. Dafür vergleichen sie die Versionen der Docker-Anwendung mit der CVE-Liste.
Das Prüfen von Docker-Images auf Schwachstellen hilft zwar, Anwendungen vor Angriffen zu schützen. Dabei erfasst der Scan jedoch nur den Zustand des Images genau zum Zeitpunkt der Prüfung – der sich aber im Laufe der Zeit ändern kann.
Voraussetzungen
Dieser Artikel enthält ein Tutorial and behandelt das lokale Scannen von Containern als Proof of Concept (PoC) für die Scan-Funktion im allgemeinen.
Installieren Sie
- einen Ubuntu04-Host;
- die neueste Version von Docker und
- Docker Compose, ein Tool für das Definieren und das Ausführen von Multi-Container-Docker-Anwendungen.
Installieren Sie Docker Compose mit dem Befehl:
(sudo apt install docker-compose -y)
Das Clair-System für unser Tutorial besteht aus einem PostgreSQL-Backend-Server, einem Middleware-Server und einem Endanwender-Tool – genauer gesagt clairctl, einem Tool zum Überprüfen der Kommandozeile (CLI, Command Line Interface). Das Tutorial verwendet all diese Elemente innerhalb einer Docker-Umgebung.
Systemeinrichtung
Docker Compose ermöglicht es, mehrere diskrete Docker-Images auf einmal aufzustellen und sie als eine Einheit zu steuern.
In einer SSH-Eingabeaufforderung (Secure Shell) auf dem Host – stellen Sie sicher, dass Sie in Ihrem Home-Verzeichnis beginnen – verwenden Sie die folgenden Befehle in der aufgeführten Reihenfolge:
mkdir -p clair/docker-compose-data/clair-config
wget https://raw.githubusercontent.com/jgsqware/clairctl/master/docker-compose.yml --directory-prefix=clair/docker-compose-data/
wget https://raw.github.com/jgsqware/clairctl/master/docker-compose-data/clair-config/config.yml --directory-prefix=clair/clair-config/
cd clair/docker-compose-data
Innerhalb des Ordners clair-config befindet sich passenderweise die Server-Konfiguration von Clair. Nach der Ausführung der zuvor gezeigten Befehle und dem Prüfen der Ausführung starten Sie den Prozess mit dem folgenden Befehl:
docker-compose up
Damit wird automatisch die PostgreSQL-Datenbank, der Clair-Middleware-Server und clairctl als lokaler Befehlszeilen-Scanner aufgesetzt. Zunächst wird das Datenbank-Backend mehrere Minuten benötigen, um alle CVE-Daten herunterzuladen.
Hinweis: Sie werden schwerwiegende Fehler über eine fehlgeschlagene Ladekonfiguration gemeldet bekommen (Abbildung 1). Diese sind, zumindest im Hinblick auf unsere Tutorial-Anforderungen an das Scannen von Docker-Containern, rein kosmetischer Natur.
Die aufgerufenen URLs suchen eine Clair-Konfigurationsdatei, der Einfachheit halber stellen wir eine solche aber selbst bereit, um dieses Tutorial einfach und prägnant zu halten. Trotz der Kennzeichnung als schwerwiegend haben diese Fehler keinen Einfluss auf die nachfolgenden Schritte des Prozesses.
Nach einigen Minuten sollte das System bereit sein, nach Schwachstellen zu suchen. Überprüfen Sie in einer zusätzlichen SSH-Shell, dass alle Docker-Container laufen.
Scannen eines problemanfälligen Images
An diesem Punkt benötigen wir nun ein problematisches Image. Zum Testen von Scannern gibt es eigens schlecht programmierte Images, zum Beispiel die Damn Vulnerable Web Application (DVWA). Damit können Sie prüfen, ob ein Scan-Tool funktioniert wie gewünscht. Verwenden Sie dieses Image ausschließlich, um Clair auf die Probe zu stellen – es ist mit voller Absicht mit jeder Menge Fehlern versehen.
Um dieses anfällige Image auf einem Ubuntu-Server zu scannen, verwenden Sie den folgenden Befehl:
docker pull infoslack/dvwa
Sobald das Image bezogen wurde, verwenden Sie diesen Befehl, um es zu testen:
docker-compose exec clairctl clairctl clairctl analyze -l infoslack/dvwa
Hier weist Docker-compose exec clairctl die Docker-Umgebung an, den folgenden Befehl auf dem Docker-Container clairctl auszuführen. Der Rest des Befehls definiert das zu prüfende Image, was in diesem Beispiel clairctl analyze -l infoslack/dvwa ergibt.
Scannen Sie an dieser Stelle mit Clair das Docker-Image auf Schwachstellen. Erstellen Sie dann einen HTML-Bericht über den Scan, wie in Abbildung 2 dargestellt. Diese HTML-Berichte zeigen Einzelheiten zu den CVEs des gescannten Images und einen kurze Überblick zu jeder Schwachstelle.
Für das Erstellen eines Berichts, verwenden Sie erneut den Befehl clairctl, geben dabei aber die Berichtsoption an:
docker-compose exec clairctl clairctl clairctl report -l infoslack/dvwa
Die Berichte werden in den Ordner reports geschrieben, der sich auf dem Docker-Host innerhalb des Ordners docker-compose-data befindet. Wenn sich die Clair-Docker-Instanz auf einer Remote-VM (virtuelle Maschine) befindet, installieren Sie Lynx (einen Text-Webbrowser), um die Berichte auf dem Host zu lesen. Auf diese Weise vermeiden Sie, dass Sie die Dateien von der VM kopieren müssen. Verwenden Sie dafür den Befehl:
sudo apt lynx install -y
Navigieren Sie nun zum Ordner reports und verwenden Sie den Befehl:
Lynx "html file to view".html
Bei Bedarf verwenden Sie den Befehl scp, um den Ordner auf Ihren Desktop zu kopieren. Admins können auch einen Webserver als zusätzliche Komponente der Docker Compose Group einrichten.