Docker: Bildsicherheitslücken mit Trivy und Copa patchen
Docker-Container-Images enthalten oft Sicherheitslücken, die von ihren Basisbetriebssystempaketen übernommen werden. Anstatt Images von Grund auf neu zu erstellen, können Sie Trivy verwenden, um nach Sicherheitslücken zu scannen, und Copa, um diese direkt zu beheben. Dieses Tutorial zeigt, wie man Container-Sicherheitslücken auf Ubuntu-, Debian-, RHEL-, CentOS- und Fedora-Systemen mit diesen beiden leistungsstarken Open-Source-Tools identifiziert und behebt.
In diesem Tutorial lernst du:
- Wie man den Trivy-Schwachstellenscanner auf Ubuntu/Debian installiert
- Wie man das Copa-Container-Patching-Tool installiert
- Wie man Docker-Images auf Betriebssystem-Sicherheitslücken scannt
- Wie man Container-Sicherheitslücken automatisch behebt
- Wie man überprüft, dass gepatchte Bilder frei von Sicherheitslücken sind
Zusammenfassung des Artikels: Scannen Sie Docker-Images auf Sicherheitslücken mit Trivy und patchen Sie diese automatisch mit Copa.
| Schritt | Befehl/Aktion |
|---|---|
| 1. Bild scannen | |
| 2. JSON-Bericht exportieren | |
| 3. BuildKit starten | |
| 4. Bild patchen | |
Schritt 1: Installieren Sie den Trivy-Schwachstellenscanner
Trivy ist ein Open-Source-Schwachstellenscanner, der von Aqua Security entwickelt wurde. Er erkennt Schwachstellen in Betriebssystempaketen, Anwendungsabhängigkeiten und Container-Images.
Ubuntu/Debian
-
Abhängigkeiten installieren: Installieren Sie zunächst die für das Hinzufügen des Repositorys erforderlichen Pakete wget und gnupg:
$ sudo apt-get install wget gnupg -y Trivy GPG-Schlüssel hinzufügen: Laden Sie den Trivy-Repository-Signaturschlüssel herunter und fügen Sie ihn hinzu:
$ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/nullTrivy-Repository hinzufügen: Fügen Sie die offizielle Trivy-Repository zu Ihrer Quellenliste hinzu:
$ echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.listTrivy installieren: Paketliste aktualisieren und Trivy installieren:
$ sudo apt-get update $ sudo apt-get install trivy -y
RHEL/CentOS/Fedora
Trivy-Repository hinzufügen: Erstellen Sie die Trivy-Repo-Datei:
# sudo tee /etc/yum.repos.d/trivy.repo << 'EOF' [trivy] name=Trivy repository baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://aquasecurity.github.io/trivy-repo/rpm/public.key EOFTrivy installieren: Verwenden Sie dnf oder yum zur Installation:
# sudo dnf install trivy -y
Überprüfen Sie die Installation, indem Sie die Version prüfen:
$ trivy --versionSchritt 2: Installieren Sie das Copa-Patching-Tool
Copa (Copacetic) ist ein CNCF-Sandbox-Projekt, das Container-Images direkt patcht, ohne einen vollständigen Neuaufbau zu erfordern. Es nutzt Sicherheitsberichte von Scannern wie Trivy, um Sicherheitsupdates anzuwenden. Copa wird als einzelnes Binary verteilt, das auf allen Linux-Distributionen funktioniert.
Copa-Binärdatei herunterladen: Holen Sie sich die vorgefertigte Binärdatei von der offiziellen Copa GitHub-Release-Seite:
$ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gzArchiv entpacken: Das heruntergeladene Tar-Archiv entpacken:
$ tar -xzf copa_0.9.0_linux_amd64.tar.gz-
Copa installieren: Verschieben Sie die ausführbare Datei in Ihren Systempfad:
$ sudo mv copa /usr/local/bin/ Installation überprüfen: Bestätigen Sie, dass Copa korrekt installiert ist:
$ copa --version
Schritt 3: Container-Image auf Schwachstellen scannen
Bevor Sie patchen, müssen Sie Schwachstellen in Ihrem Container-Image identifizieren. Die folgenden Schritte verwenden linuxconfig/instantprivacy als Beispiel – ersetzen Sie es durch den Namen Ihres eigenen Images.
Ziehen Sie das Container-Image: Laden Sie das Image herunter, das Sie scannen möchten:
$ sudo docker pull linuxconfig/instantprivacyAuf Schwachstellen scannen: Führen Sie Trivy aus, um Schwachstellen auf Betriebssystemebene zu scannen. Das
--ignore-unfixed-Flag schließt Schwachstellen ohne verfügbare Behebungen aus:$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacyJSON-Bericht exportieren: Copa benötigt die Scan-Ergebnisse im JSON-Format:
$ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy
Schritt 4: Container-Image mit Copa patchen
Copa verwendet BuildKit, um Patches auf Container-Images anzuwenden.
BuildKit-Container starten: BuildKit als privilegierten Container starten:
$ sudo docker run --detach --rm --privileged \ -p 127.0.0.1:8888:8888/tcp \ --name buildkitd \ --entrypoint buildkitd \ moby/buildkit:v0.11.4 \ --addr tcp://0.0.0.0:8888-
Überprüfen, ob BuildKit läuft: Bestätigen Sie, dass der Container erfolgreich gestartet wurde:
$ sudo docker ps Container-Image patchen: Verwenden Sie Copa, um Sicherheitsupdates anzuwenden. Der
-t-Parameter gibt das Tag für das gepatchte Image an:$ sudo copa patch \ -i docker.io/linuxconfig/instantprivacy \ -r instantprivacy.json \ -t patched \ -a tcp://0.0.0.0:8888Copa lädt Sicherheitsupdates herunter und erstellt eine neue Bildebene mit den angewendeten Patches. Das gepatchte Image wird mit
linuxconfig/instantprivacy:patchedgekennzeichnet.
Schritt 5: Überprüfen Sie das gepatchte Bild
Scannen Sie das gepatchte Bild: Bestätigen Sie, dass alle Schwachstellen behoben wurden:
$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patchedGetestetes gepatchtes Image: Überprüfen Sie, ob das gepatchte Image korrekt ausgeführt wird:
$ sudo docker run --name=instantprivacy -d -p 8118:8118 linuxconfig/instantprivacy:patched $ export http_proxy="http://localhost:8118" $ curl api.ipify.org 45.84.107.174Aufräumen: Stoppen Sie den BuildKit-Container nach Abschluss:
$ sudo docker stop buildkitd
Schlussfolgerung
Sie haben erfolgreich ein Docker-Container-Image mit Trivy auf Sicherheitslücken gescannt und diese automatisch mit Copa gepatcht. Dieser Ansatz ist schneller, als Images von Grund auf neu zu erstellen, und fügt nur eine einzelne Patch-Schicht hinzu, wodurch die ursprüngliche Image-Struktur erhalten bleibt. Für Produktionsumgebungen integrieren Sie diese Tools in Ihre CI/CD-Pipeline, um Container-Images vor der Bereitstellung automatisch zu scannen und zu patchen. Weitere Informationen finden Sie in der offiziellen Trivy-Dokumentation und auf der Website des Copa-Projekts.
Häufig gestellte Fragen
- Welche Arten von Sicherheitslücken kann Copa beheben? Copa behebt nur Sicherheitslücken auf Betriebssystemebene (wie z. B. Debian-, Ubuntu-, Alpine- oder RHEL-Pakete). Anwendungsabhängigkeiten wie npm-Pakete, Python-pip-Module oder Go-Module kann es nicht patchen. Dafür müssen Sie die Anwendung mit aktualisierten Abhängigkeiten neu erstellen.
- Warum benötige ich BuildKit, um Copa auszuführen? Copa nutzt die Diff- und Merge-Funktionen von BuildKit, um eine neue Image-Schicht zu erstellen, die nur die gepatchten Dateien enthält. BuildKit läuft als privilegierter Container, der die niedrigstufige Bildmanipulation übernimmt. Ohne BuildKit kann Copa keine Patches auf das Container-Dateisystem anwenden.
- Kann ich Bilder aus privaten Registrierungen patchen? Ja, Copa unterstützt private Registrierungen. Sie müssen sich vor dem Ausführen des Patch-Befehls mit
docker loginauthentifizieren. Copa verwendet Ihre Docker-Anmeldedaten, um das Basisbild zu ziehen und das gepatchte Ergebnis bei Bedarf zu pushen. - Was passiert, wenn Copa nicht alle Schwachstellen beheben kann? Für einige Schwachstellen sind möglicherweise noch keine Korrekturen verfügbar. Das
--ignore-unfixed-Flag in Trivy schließt diese aus dem Bericht aus. Copa wird alles patchen, für das ein verfügbarer Fix existiert. Führen Sie Trivy erneut ohne--ignore-unfixedaus, um alle Schwachstellen zu sehen, einschließlich derjenigen, für die noch Patches ausstehen. - Wie aktualisiere ich Copa auf die neueste Version? Lade die neueste Version von der Copa GitHub-Release-Seite herunter und ersetze die Binärdatei in
/usr/local/bin/. Überprüfe die aktuelle Version mitcopa --version.





