Das Image ist die größte Angriffsfläche
Die meisten Schwachstellen in einem Container stecken nicht in deiner Anwendung, sondern in den Paketen des Basis-Images. Ein schlankes Image reduziert die Zahl der Befunde oft um eine Größenordnung.
# Stufe 1: bauen
FROM golang:1.23 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /app ./cmd/server
# Stufe 2: nur das Ergebnis, kein Compiler, keine Shell
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /app /app
USER nonroot:nonroot
EXPOSE 8080
ENTRYPOINT ["/app"]Ein Distroless- oder Alpine-Image ohne Shell nimmt einem Angreifer nach dem Einbruch die Werkzeuge. Ohne bash, curl und Paketmanager wird das Nachladen deutlich schwerer.
# Schwachstellen im Image
trivy image --severity HIGH,CRITICAL meinimage:1.4.2
grype meinimage:1.4.2
# Stückliste erzeugen (für CRA und Lieferkettennachweise)
syft meinimage:1.4.2 -o cyclonedx-json > sbom.json
# Dockerfile auf typische Fehler prüfen
hadolint Dockerfile
# In der CI: Build abbrechen bei kritischen Befunden
trivy image --exit-code 1 --severity CRITICAL meinimage:1.4.2Die Stückliste ist keine Formalie mehr: Der Cyber Resilience Act verlangt für Produkte mit digitalen Elementen den Nachweis der verwendeten Komponenten.