trivy

So verwenden Sie Trivy, um Schwachstellen in Docker-Containern zu finden

Stefan
8 Min Read
trivy

Ein Trivy-Scan überprüft das Basis-Image Ihres Docker-Files, um ungelöste Schwachstellen zu finden, die Ihre Container erben werden.

Ein Trivy-Scan überprüft das Basis-Image Ihres Dockerfiles, um ungelöste Schwachstellen zu finden, die Ihre Container erben werden. Trivy kann sich auch Betriebssystempakete und Quellcodeabhängigkeiten ansehen, die über gängige Paketmanager hinzugefügt wurden.

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

Trivy installieren

Trivy ist auf den meisten gängigen 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-Releases- Seite des Projekts herunterladen. Es gibt auch ein automatisiertes Installationsskript , das die entsprechende Binärdatei für Ihr Betriebssystem herunterlädt.

Schließlich verfügt Trivy über ein eigenes Docker-Image, das Sie anstelle einer 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

Dieser Befehl bindet Ihr trivy-cacheVerzeichnis an den Cache-Pfad des Trivy-Containers. Dies verbessert die Leistung, da Trivy Daten zwischen Scans außerhalb von Docker zwischenspeichern kann.

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

Erster Lauf

Die Container-Engine von Trivy unterstützt lokale und Remote-Images. Sie funktioniert mit Docker, Podman , exportierten Image-Archiven ( docker save) und Images in Registern wie Docker Hub und GitHub Container Registry .

Mit dem Befehl können Sie einen einfachen Scan starten trivy image. Dieser akzeptiert ein Bild-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.

Die Scanergebnisse werden direkt an Ihr Terminal gesendet. 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 jedes Problem gefunden wurde, einer Beschreibung und einer CVE-ID (sofern verfügbar).

Reduzierung des Lärms

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

Sie können nicht behobene Probleme ausschließen, indem Sie das –ignore-unfixedFlag hinzufügen. Dadurch wird der Lärm reduziert, indem Probleme ausgeblendet werden, die Sie nicht beheben können.

trivy image –ignore-unfixed my-image:latest

Manchmal möchten Sie eine Sicherheitslücke absichtlich in Kauf nehmen. Nicht alle Probleme 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 ausschließen.

.trivyignoreFügen Sie Ihrem Arbeitsverzeichnis eine Datei hinzu. Geben Sie eine Liste mit CVE-IDs ein, eine in jeder Zeile. Trivy findet und verwendet die Datei, wenn Sie einen Scan ausführen. Vorhandene CVEs .trivyignorewerden in der Scan-Ausgabe nicht angezeigt. Es ist eine gute Idee, jedem ausgeschlossenen CVE einen Kommentar hinzuzufügen. Dadurch wird sichergestellt, dass andere Mitwirkende informiert sind, warum das Risiko akzeptiert wurde.

# .trivyignore

# This issue is not relevant to our usage

CVE-2021-1234

Schwachstellen filtern

Mithilfe des Flags können Sie nach Schwachstellen eines bestimmten Typs filtern –vuln-type. Als Wert können entweder libraryoder verwendet werden.os

Durch die Verwendung librarywerden Probleme aufgedeckt, die sich aus Abhängigkeiten in Programmiersprachen ergeben. Die osOption beschränkt den Scan auf Betriebssystempakete.

Sie können auch nach der Schwere der Schwachstelle filtern. Dadurch können Sie sich auf die wichtigen Probleme konzentrieren, indem Sie relativ unbedeutende Schwachstellen ausblenden. Geben Sie eine durch Kommas getrennte Liste der CVSS-Schweregrade ein , die Folgendes umfassen:

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

Jetzt werden alle Probleme mit „geringer“ Schwere aus dem Bericht weggelassen.

Anpassen der Berichtsausgabe

Trivy verwendet standardmäßig eine visuelle Tabelle, die für die menschliche Nutzung in einem Terminal konzipiert ist. Sie können stattdessen maschinenlesbares JSON erhalten, indem Sie hinzufügen –format json.

Es gibt auch Unterstützung für benutzerdefinierte Ausgabestile mithilfe von Vorlagen. Es sind mehrere Vorlagen enthalten, wie beispielsweise xmlund html:

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

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

Verwenden von Trivy in CI

Sie können Trivys problemlos in Ihre CI-Skripte integrieren. Beachten Sie, dass der Exit-Code immer 0standardmäßig ist, auch wenn Schwachstellen gefunden werden. Fügen Sie das –exit-code 1Flag hinzu, damit Trivy bei Problemen mit einem Code ungleich Null beendet wird.

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

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

COPY –from=aquasec/trivy:latest /usr/local/bin/trivy /usr/local/bin/trivy

RUN trivys filesystem —exit-code 1 –no-progress /

Normalerweise empfiehlt es sich, Trivys gegen Ende auszuführen Dockerfile, nachdem alle Ihre Softwareabhängigkeiten installiert sind. Führen Sie es rm /usr/local/bin/trivyanschließend aus, um die Größe Ihres endgültigen Images zu reduzieren.

Server-Modus

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

Trivys-Binärdateien verfügen über einen integrierten Servermodus. Führen Sie diesen aus trivys server, um eine Serverinstanz auf Ihrem Computer zu starten. Der Standardport ist 4594; Sie können dies ändern, indem Sie –listen localhost:8080den gewünschten Port hinzufügen und angeben.

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

Sie verbinden einen Trivys-Client mit Ihrem Server mithilfe von trivys client:

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

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

Zusammenfassung

Wenn Sie Trivys zum Scannen Ihrer Docker-Container verwenden, können Sie Schwachstellen finden, bevor sie in der Produktion zum Problem werden. Sie können sich auf Ihre Container verlassen, indem Sie sie regelmäßig auf veraltete Betriebssystempakete und Abhängigkeiten von Programmiersprachen prüfen.

Trivys bezieht seine Schwachstellenlisten aus verschiedenen Quellen. Einige dieser Quellen geben nur die nichtkommerzielle Nutzung an. Sie sollten daher überprüfen  , ob Ihr Projekt kompatibel ist, bevor Sie Trivys zu Ihren Builds hinzufügen.