So finden Sie mit Trivy Schwachstellen in Docker-Containern

0
244

Ein Trivy-Scan untersucht das Basis-Image Ihres Dockerfiles auf ungelöste Schwachstellen, die Ihre Container erben. Trivy kann sich auch Betriebssystempakete und Quellcode-Abhängigkeiten ansehen, die über gängige Paketmanager hinzugefügt wurden.

Trivy bietet drei Scan-Typen: Container, Git-Repository und Dateisystemverzeichnis. In diesem Artikel konzentrieren wir uns auf Container-Scans. Die Trivy-Dokumentation enthält weitere Informationen darüber, wie Sie Ihren Quellcode und seine Umgebung analysieren können.

Trivy installieren

Trivy ist auf den gängigsten Linux-Distributionen verfügbar. Möglicherweise müssen Sie das Repository des Entwicklers hinzufügen. Den richtigen Link für Ihre Distribution finden Sie in den Trivy-Dokumenten.

Wenn Sie lieber eine bestimmte Version verwenden möchten, können Sie eine Binärdatei von der GitHub-Versionsseite des Projekts herunterladen. Es gibt auch ein automatisiertes Installationsskript, das die entsprechende Binärdatei für Ihr Betriebssystem herunterlädt.

Schließlich hat Trivy ein eigenes Docker-Image, das Sie anstelle der Bare-Metal-Installation verwenden können :

docker run –rm -v trivy-cache:/root/.cache/-v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest Werbung

Dieser Befehl bindet Ihr trivy-cache-Verzeichnis an den Cache-Pfad des Trivy-Containers. Dies verbessert die Leistung, indem es Trivy ermöglicht, zwischen den Scans Daten außerhalb von Docker zwischenzuspeichern.

Der Docker-Socket Ihres Hosts wird auch in den Container eingebunden. Dadurch kann Trivy andere Container scannen, die auf dem Host ausgeführt werden. Jetzt können Sie mit der Suche nach Schwachstellen beginnen.

Erster Lauf

Die Container-Engine von Trivy unterstützt lokale und Remote-Images. Es funktioniert mit Docker, Podman, exportierten Bildarchiven (Docker-Speichern) und Bildern in Registrierungen wie Docker Hub und GitHub Container Registry.

Sie können einen einfachen Scan mit dem Befehl trivy image starten. Dies akzeptiert ein Image-Tag.

trivy image my-image:latest

Trivy lädt seine Schwachstellendatenbank beim ersten Durchlauf herunter. Die Datenbank wird zwischengespeichert und für zukünftige Scans wiederverwendet.

Scanergebnisse werden direkt an Ihr Terminal ausgegeben. Die Zusammenfassung oben zeigt das erkannte Container-Betriebssystem und eine Aufschlüsselung der gefundenen Schwachstellen nach Schweregrad. Die Tabelle enthält eine vollständige Liste der Probleme, einschließlich der Bibliothek, in der jeder gefunden wurde, einer Beschreibung und einer CVE-ID, falls verfügbar.

Reduktion des Rauschens

Trivy unterstützt mehrere Flags, mit denen Sie die Ausgabe anpassen können. Es werden standardmäßig alle erkannten Schwachstellen angezeigt, wenn keine Flags vorhanden sind. Dazu können Schwachstellen gehören, die im Upstream-Projekt nicht gepatcht wurden.

Werbung

Sie können nicht behobene Probleme ausschließen, indem Sie das Flag –ignore-unfixed hinzufügen. Dadurch wird das Rauschen reduziert, indem Probleme ausgeblendet werden, die Sie nicht lösen können.

trivy image –ignore-unfixed my-image:latest

Manchmal möchten Sie vielleicht absichtlich eine Schwachstelle akzeptieren. Nicht alle Themen wirken sich auf alle Projekte gleichermaßen aus. Wenn Sie nicht betroffen sind oder bereit sind, das Risiko einzugehen, können Sie mit Trivy bestimmte CVE-IDs aus Ihren Scans auslassen.

Fügen Sie eine .trivyignore-Datei zu Ihrem Arbeitsverzeichnis hinzu. Geben Sie eine Liste von CVE-IDs ein, eine in jeder Zeile. Trivy findet und verwendet die Datei, wenn Sie einen Scan durchführen. CVEs, die in .trivyignore vorhanden sind, werden nicht in der Scan-Ausgabe angezeigt. Es empfiehlt sich, jedem ausgeschlossenen CVE einen Kommentar hinzuzufügen. Dadurch wird sichergestellt, dass andere Mitwirkende informiert werden, warum das Risiko akzeptiert wurde.

# .trivyignore # Dieses Problem ist für unsere Verwendung nicht relevant CVE-2021-1234

Filtern von Schwachstellen

Sie können filtern, um Schwachstellen eines bestimmten Typs anzuzeigen, indem Sie — vuln-Typ-Flag. Dies akzeptiert entweder Bibliothek oder os als Wert.

Die Verwendung von Bibliothek wird Probleme aufdecken, die sich aus Programmiersprachenabhängigkeiten ergeben. Die Option os beschränkt den Scan auf Betriebssystempakete.

Werbung

Sie können auch nach dem Schweregrad der Schwachstelle filtern. Dies hilft Ihnen, sich auf die wichtigen Probleme zu konzentrieren, indem relativ unbedeutende Schwachstellen ausgeblendet werden. Geben Sie eine durch Kommas getrennte Liste von CVSS-Schweregraden ein, um Folgendes einzuschließen:

trivy image –severity MEDIUM,HIGH,CRITICAL my-image:latest

Jetzt alle “low” Schwereprobleme werden im Bericht ausgelassen.

Anpassung der Berichtsausgabe

Trivy verwendet standardmäßig eine visuelle Tabelle, die für den menschlichen Verzehr in einem Terminal entwickelt wurde. Sie können stattdessen maschinenlesbares JSON erhalten, indem Sie –format json hinzufügen.

Es werden auch benutzerdefinierte Ausgabestile mithilfe von Vorlagen unterstützt. Mehrere Vorlagen sind enthalten, z. B. xml und html:

trivy image –format template @contrib/html.tpl -o scan.html my-image:latest

Dieser Scan erzeugt einen HTML-Bericht, der in scan.html gespeichert wird. Grafische Berichte können schneller gelesen und leichter geteilt werden, insbesondere wenn viele Probleme gefunden werden.

Trivy in CI verwenden

Sie können Trivy ganz einfach in Ihre CI-Skripte einbinden. Beachten Sie, dass der Exitcode standardmäßig immer 0 ist, auch wenn Schwachstellen gefunden werden. Fügen Sie das Flag –exit-code 1 hinzu, damit Trivy mit einem Code ungleich Null beendet wird, wenn Probleme auftreten.

Werbung

Sie haben mehrere Möglichkeiten, Trivy in Ihre Builds zu integrieren. Offizielle Integrationsmuster sind für beliebte CI-Anbieter verfügbar, darunter GitHub, GitLab, Travis und CircleCI.

Wenn Sie Images in Ihrer Pipeline erstellen, können Sie Trivy entweder auf der endgültigen Build-Ausgabe ausführen oder das Tool im Container verwenden. Mit den mehrstufigen Builds von Docker können Sie auf das Trivy-Image verweisen und den Build abbrechen, wenn ein Scan fehlschlägt. Stellen Sie sicher, dass Sie den Dateisystemmodus anstelle von Image verwenden, da Sie den laufenden Container von innen scannen.

COPY –from=aquasec/trivy:latest /usr/local/bin/trivy /usr/local/bin/trivy RUN trivy filesystem –exit-code 1 –no-progress/

Normalerweise ist es am besten, Trivy am Ende Ihres Dockerfiles auszuführen, nachdem alle Ihre Softwareabhängigkeiten installiert sind. Führen Sie anschließend rm /usr/local/bin/trivy aus, um die Größe Ihres endgültigen Images zu reduzieren.

Servermodus

Trivy kann im Client-Server ausgeführt werden Modus. Dadurch wird die Schwachstellendatenbank auf den Server verschoben, sodass Clients keine eigenen Versionen pflegen müssen.

Trivy-Binärdateien werden mit integriertem Servermodus geliefert. Führen Sie trivy server aus, um eine Serverinstanz auf Ihrem Computer zu starten. Der Standardport ist 4594; Sie können dies ändern, indem Sie –listen localhost:8080 hinzufügen und den ausgewählten Port angeben.

Der Server lädt die Schwachstellendatenbank beim Start herunter. Es sucht im Hintergrund nach Updates und zieht automatisch neue Versionen.

Werbung

Sie verbinden einen Trivy-Client über den Trivy-Client mit Ihrem Server:

trivy client –remote http ://localhost:8080 image my-image:latest

Wenn Sie eine Authentifizierung benötigen, fügen Sie den Server- und Clientbefehlen ein –token-Flag hinzu. Der Server akzeptiert nur neue Clients, wenn sie das richtige Token vorlegen.

Zusammenfassung

Die Verwendung von Trivy zum Scannen Ihrer Docker-Container hilft Ihnen, Schwachstellen zu finden, bevor sie zu einem Problem werden in Produktion. Sie können Ihren Containern mehr Vertrauen schenken, indem Sie regelmäßig nach veralteten Betriebssystempaketen und Programmiersprachenabhängigkeiten suchen.

Trivy bezieht seine Schwachstellenlisten aus verschiedenen Quellen. Einige dieser Quellen geben nur die nicht-kommerzielle Nutzung an, daher sollten Sie überprüfen, ob Ihr Projekt konform ist, bevor Sie Trivy zu Ihren Builds hinzufügen.