Design wechseln

Docker-Image-Sicherheitsscans und Behebung: Trivy-Praxis-Tutorial und CI/CD-Integrationsleitfaden

Easton editorial illustration: deployment checkpoint lane

Am 10. Dezember 2021 schoss die Alarmkurve auf dem Monitoring-Dashboard plötzlich nach oben. In der Ops-Gruppe flog eine CVE-Nummer: CVE-2021-44228 – die später die gesamte Tech-Szene erschütternde Log4Shell-Schwachstelle. Dutzende Microservices nutzten Basis-Images mit dieser Lücke; das Team arbeitete die Nacht durch, Images zu aktualisieren und neu zu deployen.

Bei der Nachbesprechung fragte der Chef: „Wie konnten wir nicht einmal wissen, welche Schwachstellen in unseren Images stecken?“

Eine NSFOCUS-Studie zeigt: 76 % der Images auf Docker Hub enthalten bekannte Sicherheitslücken. Ihr python:3.9-Image? nginx:latest? Wahrscheinlich stecken Dutzende CVEs darin.

Sie fragen sich vermutlich: Wie finde ich Schwachstellen in Images? Wie behebe ich sie? Wie erkenne ich sie automatisch in CI/CD, bevor ein unsicheres Image in Produktion landet?

Diese Fragen habe ich in zwei Jahren Produktionsbetrieb durch Trial and Error beantwortet. In diesem Artikel zeige ich Ihnen Schritt für Schritt:

  • Schnelle Docker-Image-Scans mit Trivy und ähnlichen Tools
  • Systematische Behebung (mehr als nur „Image-Version aktualisieren“)
  • Automatisierte Scans in GitHub Actions, GitLab CI und anderen CI/CD-Plattformen

Alle Befehle und Konfigurationen sind direkt kopierbar. Nach dem Lesen sparen Sie sich viele Umwege.

"Laut NSFOCUS-Bericht vom März 2018 wiesen bei zufällig geprüften Docker-Hub-Images mehr als drei Viertel (76 %) bekannte Sicherheitslücken auf."

- NSFOCUS-Forschungsbericht

Docker-Image-Sicherheitsbedrohungen im Überblick

Welche Sicherheitsprobleme können Docker-Images haben?

Ehrlich gesagt dachte ich anfangs, ein Docker-Image sei einfach ein „verpacktes Programm“ – Hauptsache, es läuft. Erst als wir online drei Tage lang gescannt wurden, wurde klar: Schwachstellen in Images fallen in mehrere Kategorien – jede kann schmerzhaft werden.

OS-Paket-Schwachstellen – am häufigsten. In Alpine-, Ubuntu-Basis-Images stecken OpenSSL, glibc, curl und andere Systembibliotheken, die regelmäßig neue Lücken bekommen. Die OpenSSL-3.0.x-Hochrisiko-Schwachstelle 2022 betraf eine große Anzahl Images.

Anwendungsabhängigkeiten – subtiler. Ihr Python-Projekt hängt von Flask ab, Flask von Werkzeug – und eine Werkzeug-Version hat eine Code-Execution-Lücke. Python aktualisiert? Nicht sicher: Schwachstellen tief in der Abhängigkeitskette bleiben unbemerkt. Log4j ist das klassische Beispiel – wie viele Java-Projekte wussten nicht, dass sie Log4j nutzen.

Fehlkonfiguration und Secret-Leaks – manche Entwickler schreiben DB-Passwörter ins Dockerfile, vergessen .git beim Packen oder lassen Container als root laufen – mit mehr Rechten als nötig.

Supply-Chain-Risiken – am schwersten abzuwehren. Ein scheinbar normales Image von Docker Hub kann Mining-Software oder Backdoors enthalten. Eine Studie 2018 fand gezielt täuschende bösartige Images für unvorsichtige Pull-Nutzer.

Warum Docker-Hub-Images nicht blind vertrauen?

Die 76-%-Zahl hat mich beim ersten Lesen schockiert.

„Die Daten sind alt“, denken Sie vielleicht – stimmt, aber alte Images werden noch genutzt. Viele „offiziellen“ Images werden nicht live aktualisiert. python:3.9 kann vor sechs Monaten gebaut sein, Systempakete veraltet.

Schlimmer: Qualität auf Docker Hub ist uneinheitlich. Privat gepflegte Images monatelang ohne Update; „offiziell“ nur im Namen. Kein einheitlicher Audit-Standard – Vertrauen ist Glückssache.

Ein Kollege zog ein Node.js-Image von Docker Hub – später 30+ HIGH-Schwachstellen. Antwort des Maintainers: „Zwei Jahre keine Wartung, fixen Sie es selbst.“

Mein Prinzip heute: Jedes Image von Docker Hub vor Nutzung scannen – auch mit „offiziellem“ Tag.

Vergleich und Auswahl gängiger Scan-Tools

Trivy: meine Open-Source-Empfehlung

Es gibt viele Scanner – ich nutze fast nur noch Trivy. Nicht weil andere schlecht sind, sondern weil Trivy Usability und Funktionsumfang bestens balanciert.

Beim ersten Scan war ich von der Geschwindigkeit überrascht: ein mehrhundert-MB-Image in ca. 10 Sekunden beim ersten Mal, danach nur Sekunden. Keine lokale DB-Pflege, kein Extra-Service – installieren und loslegen.

Was Trivy erkennt – mehr als erwartet:

  • Schwachstellenscan: OS-Pakete (Alpine, Ubuntu, Debian, CentOS usw.) und Abhängigkeiten (npm, pip, Maven, Go Modules usw.)
  • Fehlkonfiguration: Dockerfile, Kubernetes-Manifeste
  • Secret-Leaks: versehentlich gepackte Keys und Passwörter
  • Lizenz-Compliance: Open-Source-Lizenzen der Abhängigkeiten

Trivy ist in GitHub Actions, Harbor und anderen Plattformen integiert – weniger Eigenbau nötig.

Andere Tools kurz vorgestellt

Snyk – kommerziell, umfassend. IDE-Integration mit Echtzeit-Hinweisen, automatische Fix-PRs. Kostenlose Version limitiert; für Unternehmen mit Budget.

Clair – Scan-Engine von Quay, Open Source, stark anpassbar. Konfiguration aufwendig; CVE-Daten von Linux-Distributionen. Für Teams mit Security Engineers – für normale Dev-Teams hoher Lernaufwand.

Anchore – Enterprise mit Policy-Management, z. B. „CRITICAL blockiert Deployment“. Für Finanz, Gesundheitswesen, strenge Compliance – aber schwer in Wartung.

Docker Scout / Hardened Images (DHI) – Docker-Offensive Mai 2025, nahezu null CVEs, 95 % kleinere Images. Distroless-Runtime, vielversprechend – Ökosystem noch im Aufbau.

Meine Empfehlung

Kleine Teams / Einzelentwickler → Trivy: kostenlos, einfach, ausreichend. Eine Install-Zeile, ein Scan-Befehl, 10 Minuten Einstieg.

Große Unternehmen, hohe Compliance, Budget → Snyk: aktuelle DB, professioneller Support, tiefe Tool-Integration.

Dedizierte Security Engineers, anpassbare Open-Source-Lösung → Clair – mit Zeit für Konfiguration einplanen.

Maximale Sicherheit, minimale Images → Docker Hardened Images im Blick behalten – möglicher Standard der Zukunft.

Meine Praxis: Trivy für Dev und CI/CD (schnelles Feedback); vor Produktion zusätzlich Harbor/Clair als zweite Prüfung.

Trivy-Praxis-Tutorial

Installation und Grundlagen

Trivy installieren ist erstaunlich einfach. Unter macOS:

brew install trivy

Unter Linux: Binärdatei oder Paketmanager – Details auf https://github.com/aquasecurity/trivy/releases

Direkt ein Image scannen:

# Docker-Hub-Image
trivy image python:3.9

# Lokal gebautes Image
trivy image myapp:latest

# Als tar gespeichertes Image
trivy image --input ruby-3.1.tar

Beim ersten Lauf lädt Trivy die Schwachstellendatenbank (trivy-db, ca. einige Dutzend MB). Danach geht es deutlich schneller.

Ergebnisse nach Schweregrad:

  • CRITICAL: sofort beheben, vollständige Übernahme möglich
  • HIGH: schnell beheben, ausnutzbar für Angriffe
  • MEDIUM: Behebung empfohlen
  • LOW: niedrigere Priorität, einplanen

Pro Schwachstelle: CVE-ID, betroffenes Paket, aktuelle und Fix-Version (falls vorhanden).

Erweiterte Scan-Optionen

In der Praxis will man nicht jede LOW-Schwachstelle sehen – besonders ungepatchte. Dafür gibt es Optionen:

Nur HIGH und CRITICAL:

trivy image --severity HIGH,CRITICAL nginx:latest

In CI/CD Standard – nicht alles muss sofort weg, HIGH/CRITICAL zuerst.

Ungepatchte ignorieren:

trivy image --ignore-unfixed redis:latest

Kein Patch verfügbar? Nur behebbare Schwachstellen anzeigen.

Exit-Code bei CRITICAL:

trivy image --exit-code 1 --severity CRITICAL myapp:latest

In CI/CD: CRITICAL → Build schlägt fehl, unsicheres Image kommt nicht in Produktion.

JSON für weitere Tools:

trivy image -f json -o results.json myapp:latest

Für Security-Plattformen oder Automatisierung.

Offline-Scan:

trivy image --skip-db-update myapp:latest

In isolierten Netzen: DB extern laden, kopieren, mit --skip-db-update scannen.

Scan-Ergebnisse richtig lesen

Beim ersten Produktions-Scan: 100+ Schwachstellen – Panik. Mit Erfahrung wird die Priorisierung klarer:

Zuerst Schwachstellen mit Fix-Version. Fixed Version = none/leer → noch kein Patch, wenig handelbar.

CRITICAL und HIGH priorisieren. LOW/MEDIUM bei internen Diensten können warten; CRITICAL oft mit öffentlichem Exploit.

CVE-Details prüfen unter https://cve.mitre.org – manche „schlimme“ CVEs brauchen extreme Bedingungen.

Trivy-Prinzip: JSON-Schwachstellendatenbank + Paketliste aus dem Image abgleichen. Paket + Version match → Alarm. Fehlalarme möglich, wenn betroffene Funktion im Code nie genutzt wird – Risiko im Kontext bewerten.

Systematische Schwachstellenbehebung

Mit dem richtigen Basis-Image starten

Oft heißt es nicht „patchen“, sondern „wechseln“. Dutzende OS-Paket-Lücken? Sichereres Basis-Image statt Einzel-Upgrades.

Früher nutzten wir Alpine (5,87 MB, klein). Aber musl statt glibc – Kompatibilitätsprobleme; klein heißt nicht sicher.

Heute bevorzuge ich Distroless: 3,06 MB, kleiner als Alpine, extrem reduziert – keine Shell, kein Paketmanager, keine unnötigen Tools.

Warum sicherer? Selbst bei App-Schwachstelle: kein Shell-Zugriff im Container – minimaler Angriffsvektor.

Google Distroless für verschiedene Sprachen:

# Python
FROM gcr.io/distroless/python3

# Node.js
FROM gcr.io/distroless/nodejs

# Go (statisch kompiliert)
FROM gcr.io/distroless/static

Nachteil: Debugging schwierig ohne ls/cat. Dev mit normalem Image, Produktion mit Distroless.

Docker Hardened Images (DHI) 2025: nahezu null CVEs, 95 % kleiner – Ökosystem noch jung, aber beobachtenswert.

Abhängigkeiten upgraden – Praxis

Basis-Image allein reicht nicht – Anwendungsschicht mitdenken:

Methode 1: Basis-Image-Version

# Nicht latest – zu ungenau
FROM python:3.9

# Konkrete Version, regelmäßig aktualisieren
FROM python:3.11.7

latest kann monatelang ohne System-Updates stehen. Konkrete Tags, monatlich Minor-Updates prüfen.

Methode 2: Systempakete im Dockerfile

FROM ubuntu:22.04

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

update/upgrade/clean in einem RUN – weniger Layer; apt-Cache löschen spart Speicher.

Methode 3: Anwendungsabhängigkeiten

Trivy meldet Flask-Schwachstelle → requirements.txt anpassen:

# Vorher
Flask==2.0.1

# Nachher (2.3.0 behebt die Lücke)
Flask==2.3.0

Vorsicht: Major-Sprünge können Breaking Changes bringen – erst in Test, dann Produktion. Sicherer: Patch-Level innerhalb 2.0.x statt Sprung auf 2.3.0.

Best Practices nicht vergessen

Multi-Stage-Build:

FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM gcr.io/distroless/static
COPY --from=builder /app/myapp /
CMD ["/myapp"]

Finales Image ohne Compiler, Quellcode, Zwischendateien – kleinerer Angriffsvektor.

Nicht als root:

RUN useradd -m myuser
USER myuser

Root im Container = volle Rechte nach Kompromittierung. Normaler User reduziert Schaden.

Regelmäßig neu bauen:

Code unverändert, aber OS-Patches kommen laufend. Mindestens monatlich rebuild – wir automatisieren sonntags wöchentlich, Montag Review.

.dockerignore:

.git
.env
*.log
secrets/

.env im Image = Passwort-Leak. Wie .gitignore für den Build-Kontext.

Nie latest:

FROM python:latest ist eine Zeitbombe – unbekannte Version, unbekannte Lücken. FROM python:3.11.7-slim ist nachvollziehbar.

Automatisierter Security-Scan in CI/CD

GitHub Actions – in wenigen Minuten

Manuelles Scannen vergisst man. CI/CD bei jedem Commit/Build ist zuverlässiger.

.github/workflows/docker-scan.yml:

name: Docker Security Scan

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Build Docker image
        run: docker build -t myapp:${{ github.sha }} .

      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'myapp:${{ github.sha }}'
          format: 'table'
          severity: 'CRITICAL,HIGH'
          exit-code: '1'  # Build schlägt bei schweren Schwachstellen fehl

      - name: Upload scan results
        if: always()
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'

Was passiert?

  • Trigger bei push/PR auf main/develop
  • Image-Build mit Commit-SHA als Tag
  • Trivy prüft CRITICAL/HIGH
  • exit-code: '1' blockiert Merge bei Fund
  • Ergebnisse unter GitHub Security

Nach erstem Push: roter Build bei Schwachstellen – automatisches Sicherheitsgate.

GitLab CI/CD – ebenso einfach

.gitlab-ci.yml:

stages:
  - build
  - test
  - security

build_image:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

security_scan:
  stage: security
  image: aquasec/trivy:latest
  script:
    - trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  allow_failure: false
  dependencies:
    - build_image

allow_failure: false – fehlgeschlagener Scan stoppt die Pipeline. Dev kann lockerer sein; Produktion: false.

Harbor als zweite Absicherung

Harbor (ab v1.2 mit Trivy/Clair) scannt gepushte Images automatisch:

  • Scan beim Push
  • Täglicher Vollscan (neue CVEs)
  • Schwellenwerte: CRITICAL blockiert Pull

Unser Ablauf:

  1. Dev-Push → Trivy-Scan
  2. HIGH+ → Tag „Schwachstelle vorhanden“
  3. Prod-K8s: admission webhook lehnt solche Images ab

Selbst CI-Umgehung wird am Repository abgefangen.

Empfohlener Gesamt-Workflow

Entwicklung: IDE-Plugin (Snyk/Trivy), nach lokalem Build trivy image

Build: GitHub Actions / GitLab CI, CRITICAL → Fehlschlag, Dashboard für Trends

Repository: Harbor-Nachscan, Pull-Block bei hohem Risiko

Laufzeit: wöchentlicher Prod-Scan, Alarm bei neuen CVEs

Review: monatliche Behebungs-Review, Schwellenwerte anpassen

Einmal eingerichtet läuft es automatisch – bei uns ca. ein Sprint (zwei Wochen) bis stabil. Seitdem schlafe ich ruhiger: kein plötzlicher CVE-Schock aus veralteten Images.

Fazit

Zurück zu Log4Shell: Mit diesem Workflow wäre die Lücke in CI/CD aufgefallen – nicht mitten in der Nacht in Produktion, nicht mit der Frage des Chefs im Nacken.

Docker-Image-Sicherheit ist kein Hexenwerk – drei Säulen:

  • Trivy & Co. zum Scannen (einfach, schnell, ausreichend)
  • Systematische Behebung (sicheres Basis-Image, Upgrades, Best Practices)
  • CI/CD-Automatisierung (GitHub Actions / GitLab CI in Minuten)

76 % unsicherer Docker-Hub-Images klingt erschreckend – bedeutet aber: Die meisten Teams ignorieren es noch. Wer jetzt startet, ist besser als 76 % der anderen.

Nicht alles auf einmal fixen – unrealistisch. Schrittweise:

  1. Heute: Trivy installieren, Projekt-Image scannen
  2. Diese Woche: CRITICAL beheben – oft nur Basis-Image-Update
  3. Nächster Sprint: Trivy in CI/CD, CRITICAL blockiert Deployment
  4. Diesen Monat: Security-Baseline, regelmäßige Reviews

Container-Sicherheit ist ein Prozess, kein Einmalprojekt. Mit etabliertem Workflow: wöchentlicher Auto-Scan, im Weekly 30 Minuten – fertig.

Noch einmal: Produktions-Images scannen. Docker-Hub-Images scannen. Nicht erst nach dem Vorfall.

Teilen Sie gern Erfahrungen und Pitfalls in den Kommentaren – gemeinsam sicherer containerisieren.

Vollständiger Workflow für Docker-Image-Sicherheitsscans und Behebung

Vom Trivy-Setup bis zur CI/CD-Integration – Scans, Behebung und Automatisierung Schritt für Schritt

⏱️ Estimated time: 2 hr

  1. 1

    Step 1: Trivy installieren

    Trivy installieren:
    • macOS: brew install trivy
    • Linux: Binärdatei von GitHub Releases oder Paketmanager
    • Download: https://github.com/aquasecurity/trivy/releases
    • Beim ersten Start wird automatisch die Schwachstellendatenbank (trivy-db, ca. einige Dutzend MB) heruntergeladen
  2. 2

    Step 2: Grundlegende Image-Schwachstellenscans

    Grundlegende Image-Schwachstellenscans:
    • Docker-Hub-Image scannen: trivy image python:3.9
    • Lokales Image scannen: trivy image myapp:latest
    • Tar-Datei scannen: trivy image --input ruby-3.1.tar

    Ergebnisse nach Schweregrad:
    • CRITICAL (sofort beheben)
    • HIGH (schnellstmöglich beheben)
    • MEDIUM (Behebung empfohlen)
    • LOW (eingeplant bearbeiten)
  3. 3

    Step 3: Erweiterte Scan-Optionen konfigurieren

    Erweiterte Scan-Optionen:
    • Nur HIGH und CRITICAL anzeigen: trivy image --severity HIGH,CRITICAL nginx:latest
    • Ungepatchte Schwachstellen ignorieren: trivy image --ignore-unfixed redis:latest
    • Exit-Code ungleich null bei CRITICAL (für CI/CD):
    trivy image --exit-code 1 --severity CRITICAL myapp:latest
    • JSON-Ausgabe: trivy image -f json -o results.json myapp:latest
  4. 4

    Step 4: Schwachstellen systematisch beheben

    Schwachstellen systematisch beheben:

    Sicheres Basis-Image wählen:
    • Distroless-Images (gcr.io/distroless/python3/nodejs/static, nur 3,06 MB, ohne Shell und Paketmanager)
    • Oder Docker Hardened Images 2025 (nahezu null CVEs)

    Basis-Image-Version aktualisieren:
    • Konkrete Versionsnummer (python:3.11.7), nicht latest

    Systempakete im Dockerfile upgraden:
    • RUN apt-get update && apt-get upgrade -y && apt-get clean && rm -rf /var/lib/apt/lists/*

    Anwendungsabhängigkeiten aktualisieren:
    • requirements.txt usw. anpassen, Patch-Versionen bevorzugen
  5. 5

    Step 5: Automatisierte Scans in GitHub Actions

    Datei .github/workflows/docker-scan.yml erstellen:
    • Trigger bei push/pull_request
    • Docker-Image bauen
    • aquasecurity/trivy-action zum Scannen
    • severity: 'CRITICAL,HIGH' und exit-code: '1' (Build schlägt bei schweren Schwachstellen fehl)
    • Scan-Ergebnisse auf GitHub Security hochladen
  6. 6

    Step 6: GitLab CI/CD-Integration

    .gitlab-ci.yml erstellen oder anpassen:
    • Stages: build, test, security
    • Security-Stage mit aquasec/trivy:latest
    • trivy image --exit-code 1 --severity HIGH,CRITICAL ausführen
    • allow_failure: false (fehlgeschlagener Security-Scan stoppt die Pipeline)
  7. 7

    Step 7: Vollständigen Sicherheits-Scan-Workflow etablieren

    Entwicklungsphase:
    • Snyk/Trivy-Plugin in der IDE
    • Nach lokalem Build manuell scannen

    Build-Phase:
    • Automatischer CI/CD-Scan
    • CRITICAL führt sofort zum Fehlschlag und blockiert Merge
    • Ergebnisse ins Security Dashboard

    Repository-Phase:
    • Harbor o. Ä. für Nachscan
    • Schwachstellen-Richtlinien blockieren Pulls bei hohem Risiko

    Laufzeit:
    • Produktions-Images wöchentlich scannen
    • Alarm bei neuen Schwachstellen

    Regelmäßige Reviews:
    • Monatliche Überprüfung der Behebungen
    • Scan-Strategie und Schwellenwerte aktualisieren

FAQ

Welche Sicherheitsprobleme können Docker-Images haben?
Vier Kategorien:

1) OS-Paket-Schwachstellen:
• OpenSSL, glibc, curl usw. in Alpine-, Ubuntu-Basis-Images
• z. B. OpenSSL-3.0.x-Hochrisiko-Schwachstelle 2022

2) Anwendungsabhängigkeiten:
• Schwachstellen tief in der Abhängigkeitskette, z. B. Log4j
• Viele Java-Projekte wussten nicht einmal, dass sie Log4j nutzen

3) Fehlkonfiguration und Secret-Leaks:
• DB-Passwort im Dockerfile
• .git-Verzeichnis nicht entfernt
• Container als root ausgeführt

4) Supply-Chain-Risiken:
• Bösartige Images auf Docker Hub
• Studie 2018: gezielt täuschende bösartige Images
Warum Docker-Hub-Images nicht blind vertrauen? Stimmt die 76-%-Zahl?
Laut NSFOCUS-Bericht März 2018 hatten bei zufällig geprüften Docker-Hub-Images mehr als drei Viertel (76 %) bekannte Sicherheitslücken.

Die Daten sind etwas älter, aber alte Images werden noch genutzt. Viele „offizielle“ Images werden nicht in Echtzeit aktualisiert – python:3.9 kann vor sechs Monaten gebaut sein, Systempakete veraltet.

Qualität auf Docker Hub ist uneinheitlich:
• Privat gepflegt, teils monatelang ohne Update
• „Offiziell“ nur im Namen, hochgeladen von einzelnen Unternehmen
• Kein einheitlicher Sicherheitsaudit-Standard

Prinzip: Jedes Image von Docker Hub vor der Nutzung scannen – auch mit „offiziellem“ Tag.
Worin unterscheiden sich Trivy, Snyk, Clair und Anchore? Welches Tool wählen?
Trivy:
• Empfohlenes Open-Source-Tool, kostenlos und ausreichend
• Einfache Installation (brew install trivy)
• Schnelle Scans (ca. 10 s beim ersten Mal, danach Sekunden)
• Schwachstellen, Fehlkonfiguration, Secret-Leaks, Lizenz-Compliance
• Integration in GitHub Actions, Harbor
• In 10 Minuten startklar – ideal für kleine Teams oder Einzelentwickler

Snyk:
• Kommerziell, umfassend
• IDE-Integration mit Echtzeit-Hinweisen
• Automatische Fix-PRs
• Kostenlose Version stark limitiert – für große Unternehmen mit Budget

Clair:
• Scan-Engine von Quay, Open Source, stark anpassbar
• Komplexe Konfiguration, hoher Lernaufwand
• Für Teams mit dedizierten Security Engineers

Anchore:
• Enterprise-Lösung mit Policy-Management
• Für stark regulierte Branchen wie Finanz und Gesundheitswesen

Empfehlung: Kleine Teams → Trivy; große Unternehmen → Snyk; Teams mit Security Engineers → Clair.
Wie liest man Trivy-Scan-Ergebnisse? Worauf achten?
Ergebnisse nach Schweregrad:
• CRITICAL (sofort beheben, vollständige Systemübernahme möglich)
• HIGH (schnell beheben, ausnutzbar für Angriffe)
• MEDIUM (Behebung empfohlen)
• LOW (niedrigere Priorität, einplanen)

Tipps:
1) Zuerst Schwachstellen mit Fix-Version (Fixed Version = none/leer → noch kein Patch)
2) CRITICAL und HIGH priorisieren (CRITICAL oft mit öffentlichem Exploit)
3) CVE-Details unter https://cve.mitre.org prüfen
4) Trivy-Prinzip verstehen (JSON-Schwachstellendatenbank, Abgleich mit Paketliste – Fehlalarme möglich, Risiko im Code bewerten)
Wie behebt man Docker-Image-Schwachstellen systematisch?
Behebungsmethoden:
1) Sicheres Basis-Image:
• Distroless nur 3,06 MB, kleiner als Alpine, ohne Shell/Paketmanager
• Google Distroless: python3/nodejs/static
• Docker Hardened Images 2025: nahezu null CVEs, 95 % kleiner

2) Basis-Image-Version:
• python:3.11.7 statt latest
• latest kann monatelang ohne Systempaket-Updates stehen
• Monatlich auf Minor-Updates prüfen

3) Systempakete im Dockerfile:
• RUN apt-get update && apt-get upgrade -y && apt-get clean && rm -rf /var/lib/apt/lists/*
• update/upgrade/clean in einem RUN – weniger Layer

4) Anwendungsabhängigkeiten:
• requirements.txt usw. anpassen
• Patch-Versionen zuerst (z. B. Flask 2.0.x statt Sprung auf 2.3.0)
• Vor Produktion in Testumgebung prüfen

Best Practices: Multi-Stage-Build, nicht als root, monatlich neu bauen, .dockerignore, nie latest.
Wie integriert man automatisierte Security-Scans in CI/CD?
GitHub Actions:
• .github/workflows/docker-scan.yml
• Trigger bei push/pull_request
• Image bauen, aquasecurity/trivy-action
• severity: 'CRITICAL,HIGH', exit-code: '1'
• Ergebnisse auf GitHub Security

GitLab CI:
• .gitlab-ci.yml mit build/test/security
• aquasec/trivy:latest in security-Stage
• trivy image --exit-code 1 --severity HIGH,CRITICAL
• allow_failure: false (Produktion zwingend false)

Harbor:
• Ab v1.2 Trivy und Clair integriert
• Auto-Scan beim Push, täglicher Vollscan
• Schwellenwerte (CRITICAL blockiert Pull)
• Dev: Push triggert Scan, HIGH+ → Tag „Schwachstelle vorhanden“
• Prod: K8s admission webhook lehnt solche Images ab
Wie sollte ein vollständiger Docker-Image-Sicherheits-Scan-Workflow aussehen?
Vollständiger Workflow:

Entwicklung:
• Snyk/Trivy in der IDE
• Nach lokalem Build: trivy image

Build:
• GitHub Actions/GitLab CI
• CRITICAL → sofortiger Fehlschlag, Merge blockiert
• Ergebnisse ins Security Dashboard

Repository:
• Harbor-Nachscan (CI-Lücken, neue CVEs)
• Richtlinien gegen Pulls bei hohem Risiko

Laufzeit:
• Produktions-Images wöchentlich
• Alarm und geplante Behebung

Review:
• Monatliche Schwachstellen-Review
• Strategie und Schwellenwerte aktualisieren

Einmal konfiguriert läuft alles automatisch – von Setup bis stabil ca. ein Sprint (zwei Wochen) für langfristige Sicherheit.

9 Min. Lesezeit · Veröffentlicht am: 18. Dez. 2025 · Aktualisiert am: 14. Juli 2026

Ähnliche Beiträge

Kommentare

Melde dich mit GitHub an, um einen Kommentar zu hinterlassen

Easton BlogEaston Blog