0Pricing
Security+ Academy · Lektion

Containersicherheit: Härtung von Images und Laufzeitschutz

Härten Sie Docker-Images, indem Sie unnötige Pakete entfernen, sie als Nicht-Root-Benutzer ausführen und Laufzeitsicherheitstools (Falco, Sysdig) einsetzen, um anomales Containerverhalten zu erkennen.

Containersicherheit: Härtung von Images und Laufzeitschutz ist eine kostenlose Security+ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Security+ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Security+ Academy-Kurs umfasst insgesamt 4 Lektionen.

Grundlagen der Containersicherheit

Container bündeln Anwendungscode und seine Abhängigkeiten in isolierten Einheiten, die sich den Kernel des Hostbetriebssystems teilen – anders als VMs, die ein vollständiges Gastbetriebssystem enthalten. Diese gemeinsame Nutzung macht Container schlank und schnell, führt aber zu einem anderen Sicherheitsmodell: Eine Schwachstelle zum Ausbruch aus einem Container könnte einem Angreifer ermöglichen, den Container zu verlassen und direkt auf den Hostkernel zuzugreifen, wodurch alle anderen Container betroffen wären. Containersicherheit konzentriert sich auf drei Ebenen: das Image (was darin enthalten ist), die Laufzeit (was der Container während des Betriebs tun kann) und die Orchestrierungsplattform (wie Container verwaltet werden).

Minimale Basis-Images: Angriffsfläche reduzieren

Jedes in einem Container-Image installierte Paket stellt eine potenzielle Angriffsfläche dar. Das Prinzip der minimalen Basis-Images besteht darin, mit einer möglichst kleinen Grundlage zu beginnen: Alpine Linux (5 MB, minimale Anzahl an Paketen), Distroless-Images (Images von Google, die nur die Laufzeitumgebung und die Anwendung enthalten, aber keine Shell und keinen Paketmanager) oder scratch (vollständig leer, für statisch kompilierte Binärdateien). Bei einem Container ohne Shell kann ein Angreifer, der Codeausführung erreicht, nicht ohne Weiteres wget, curl oder andere Tools ausführen, um seinen Angriff auszuweiten – ein Prinzip, das als Abwehr durch minimale Angriffsfläche bezeichnet wird.

# Bad: starts from a full OS image
FROM ubuntu:22.04

# Better: minimal Alpine base
FROM alpine:3.18

# Best: distroless for Java apps
FROM gcr.io/distroless/java17-debian11

Als Nicht-Root ausführen: Die erste Regel

Standardmäßig werden Docker-Container als root (UID 0) ausgeführt. Wenn ein Angreifer eine Schwachstelle in der containerisierten Anwendung ausnutzt, erhält er Root-Rechte innerhalb des Containers. Wenn der Container ein Volume gemeinsam nutzt oder Einbindungen des Hosts besitzt, kann root innerhalb des Containers root auf dem Host entsprechen. Die Lösung ist einfach: Erstellen Sie einen dedizierten Benutzer im Dockerfile und wechseln Sie mit der Direktive USER vor dem abschließenden CMD/ENTRYPOINT zu diesem Benutzer. Viele Tools zur Überprüfung der Containersicherheit melden jedes Image ohne Nicht-Root-Benutzer als Befund.

FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY --chown=appuser:appgroup app /app/app
USER appuser
CMD ["/app/app"]

Unveränderliche Container und schreibgeschützte Dateisysteme

Unveränderliche Container sind Container, deren Dateisystem zur Laufzeit nicht verändert werden kann. Die Aktivierung von --read-only in Docker (oder readOnlyRootFilesystem: true in Kubernetes) verhindert, dass Angreifer Schadsoftware auf die Festplatte schreiben, Konfigurationsdateien ändern oder Tools in einem laufenden Container installieren. Anwendungen, die tatsächlich Daten schreiben müssen (Protokolle, temporäre Dateien), können bestimmte tmpfs-Volumes für flüchtige Schreibvorgänge einbinden. Unveränderliche Container setzen das Prinzip durch, dass der Laufzeitstatus ausschließlich aus dem Image und der Konfiguration stammen sollte und nicht aus Änderungen innerhalb des Containers, die Ihre CI/CD-Sicherheitspipeline umgehen.

# Run container with read-only root filesystem
docker run --read-only \
  --tmpfs /tmp \
  --tmpfs /var/run \
  myapp:latest

Image-Scanning: CVEs vor dem Deployment finden

Tools zum Scannen von Container-Images analysieren die in einem Docker-Image installierten Pakete anhand von Schwachstellendatenbanken (NVD, CVE) und melden bekannte CVEs. Zu den führenden Scannern gehören Trivy (Aqua Security, schnell und kostenlos), Grype (Anchore), Snyk Container und das AWS ECR image scanning. Das Scannen sollte in die CI/CD-Pipeline integriert werden, damit jedes Image mit kritischen oder hohen CVEs die Pipeline nicht erfolgreich durchläuft, bevor es in eine Registry übertragen wird. Die Scanner sollten außerdem nach Geheimnissen (API-Schlüsseln, Passwörtern) suchen, die versehentlich in Image-Layern eingebettet wurden.

# Scan a Docker image with Trivy
trivy image --severity HIGH,CRITICAL myapp:latest

# Fail CI pipeline if vulnerabilities found
trivy image --exit-code 1 --severity CRITICAL myapp:latest

Secrets-Management: Niemals in Image-Layern

Ein häufiger und gefährlicher Fehler besteht darin, Geheimnisse (API-Schlüssel, Datenbankpasswörter, TLS-Zertifikate) in Docker-Images einzubetten – entweder als in das Image übernommene Umgebungsvariablen oder in Dateien, die über COPY hinzugefügt wurden. Diese Geheimnisse sind für alle sichtbar, die Zugriff auf das Image haben, etwa über docker history oder durch das Extrahieren der Image-Layer. Selbst wenn eine nachfolgende Layer die Datei löscht, bleibt sie in der Image-Historie erhalten. Geheimnisse sollten zur Laufzeit über Umgebungsvariablen aus einem Secrets-Manager, über Docker secrets oder über als Volumes eingebundene Kubernetes Secrets injiziert werden.

# Never bake secrets into images
# Bad: ENV DATABASE_PASSWORD='supersecret'

# Good: inject at runtime via environment
docker run -e DATABASE_PASSWORD=$(vault read -field=password secret/db) myapp:latest

# Or use Docker secrets in Swarm/K8s

Laufzeitschutz: Falco und Syscall-Überwachung

Tools für die Laufzeitsicherheit überwachen das Verhalten von Containern während ihrer Ausführung und melden oder blockieren anomale Aktivitäten. Falco (ein CNCF-Projekt bindet sich über eBPF oder Kernel-Module in den Linux-Kernel ein, fängt Systemaufrufe ab und vergleicht sie mit Regeln. So kann beispielsweise eine Regel einen Alarm auslösen, wenn ein Container eine Shell startet (execve('/bin/sh')), eine Netzwerkverbindung an einem unerwarteten Port öffnet oder /etc/shadow liest. Solche Verhaltensindikatoren weisen häufig auf einen aktiven Angriff hin, selbst wenn keine bekannte CVE ausgenutzt wurde. Sysdig Secure und Aqua Security bieten kommerzielle Plattformen für den Laufzeitschutz.

# Example Falco rule: alert on shell execution in container
# - rule: Shell Spawned in Container
#   desc: A shell was spawned in a container
#   condition: container and proc.name in (bash, sh, zsh)
#   output: Shell spawned (user=%user.name container=%container.name)
#   priority: WARNING

Linux-Capabilities und Seccomp-Profile

Docker verwirft standardmäßig viele Linux-Capabilities, behält aber weiterhin mehr bei, als die meisten Anwendungen benötigen. Capabilities teilen Root-Berechtigungen in einzelne Einheiten auf (z. B. CAP_NET_ADMIN, CAP_SYS_ADMIN). Als Best Practice gilt, alle Capabilities zu entfernen und nur die benötigten mit --cap-drop=ALL --cap-add=NET_BIND_SERVICE wieder hinzuzufügen. Seccomp (Secure Computing Mode)-Profile legen fest, welche Systemaufrufe ein Container ausführen darf – Docker enthält ein standardmäßiges Seccomp-Profil, das etwa 44 gefährliche Systemaufrufe blockiert. Benutzerdefinierte Seccomp-Profile für bestimmte Anwendungen können dies weiter einschränken, indem sie alle Systemaufrufe blockieren, die die Anwendung nicht auf legitime Weise verwendet.

# Drop all capabilities, add only what's needed
docker run \
  --cap-drop=ALL \
  --cap-add=NET_BIND_SERVICE \
  --security-opt seccomp=/etc/docker/seccomp-custom.json \
  myapp:latest

Container-Registries und Image-Signierung

Container-Registries (Docker Hub, AWS ECR, Google Artifact Registry) speichern und verteilen Images. Zur Absicherung der Registry gehören: das Aktivieren des Schwachstellen-Scannens beim Push, die Beschränkung des Push-Zugriffs auf CI/CD-Servicekonten, das Aktivieren der Image-Signierung mit Sigstore/Cosign oder Docker Content Trust (Notary), damit Laufzeitumgebungen nur kryptografisch signierte Images aus vertrauenswürdigen Quellen abrufen, sowie das Konfigurieren der Unveränderlichkeit von Images, damit Tags nicht überschrieben werden können. Dadurch werden Tag-Manipulationsangriffe verhindert, bei denen ein Angreifer einen vertrauenswürdigen :latest-Tag durch ein schädliches Image ersetzt.

# Sign a container image with Cosign
cosign sign --key cosign.key myregistry.io/myapp:v1.2.3

# Verify signature before deployment
cosign verify --key cosign.pub myregistry.io/myapp:v1.2.3

Techniken zum Container-Escape und Schutzmaßnahmen

Angreifer, denen eine Codeausführung innerhalb eines Containers gelingt, können versuchen, einen Container-Escape durchzuführen, um auf den Host zuzugreifen. Zu den üblichen Techniken gehören das Ausnutzen verwundbarer privilegierter Container (--privileged gewährt nahezu uneingeschränkten Zugriff auf den Host), der Missbrauch offengelegter Docker-Sockets (/var/run/docker.sock gewährt einem in einen Container eingebundenen Container vollständigen Zugriff auf die Docker-API, einschließlich des Erstellens privilegierter Container) sowie das Ausnutzen von Kernel-Schwachstellen über unzureichend abgesicherte Capabilities. Schutzmaßnahmen: Verwenden Sie den privilegierten Modus niemals, sofern er nicht unbedingt erforderlich ist, binden Sie den Docker-Socket niemals in Anwendungscontainer ein, halten Sie den Host-Kernel aktuell und verwenden Sie gVisor oder Kata Containers für Workloads, die eine starke Isolation erfordern.

# DANGEROUS: never do this in production
# docker run --privileged -v /:/host myapp:latest

# Check if a container is running privileged
docker inspect mycontainer | grep -i privileged

CIS-Docker-Benchmark-Compliance

Der Center for Internet Security (CIS) Docker Benchmark enthält detaillierte Richtlinien zur Sicherheitskonfiguration von Docker-Hosts und -Containern. Er deckt die Daemon-Konfiguration, die Image-Hygiene, Einstellungen für die Container-Laufzeit und Netzwerksteuerungen ab. Tools wie Docker Bench for Security automatisieren die Prüfung der Compliance anhand des CIS-Benchmarks und erstellen einen bewerteten Bericht mit bestandenen und nicht bestandenen Prüfpunkten. Wenn Sie diesen Benchmark regelmäßig ausführen und in die CI/CD-Pipeline integrieren, wird eine Abweichung von der Sicherheitskonfiguration schnell erkannt. Kandidaten für Security+ sollten wissen, dass CIS Benchmarks im Prüfungskontext eine zentrale Referenz für die Härtung von Betriebssystemen und Plattformen sind.

# Run Docker Bench for Security
docker run -it --net host --pid host --userns host --cap-add audit_control \
  -v /var/lib:/var/lib -v /var/run/docker.sock:/var/run/docker.sock \
  -v /etc:/etc docker/docker-bench-security

Schnelltest

Testen Sie Ihr Verständnis der CompTIA-Security+-Konzepte (SY0-701) aus dieser Lektion.

Lektionszusammenfassung

In dieser Lektion haben Sie gelernt: minimale Basis-Images und Nicht-Root-Benutzer reduzieren die Angriffsfläche und die Berechtigungsstufe containerisierter Workloads; Laufzeitschutz-Tools wie Falco erkennen anomale Syscall-Muster, die auf aktive Angriffe innerhalb von Containern hinweisen; und verwenden Sie niemals privilegierte Container und binden Sie den Docker-Socket nicht in Anwendungscontainer ein, da diese Konfigurationen einen Container-Escape ermöglichen. Als Nächstes behandeln wir die Kubernetes-Sicherheit einschließlich RBAC, Netzwerkpolicies und Pod-Sicherheitsstandards.

Häufig gestellte Fragen

Ist die Lektion „Containersicherheit: Härtung von Images und Laufzeitschutz“ kostenlos?

Ja — der vollständige Text von „Containersicherheit: Härtung von Images und Laufzeitschutz“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Security+ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Security+ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Containersicherheit: Härtung von Images und Laufzeitschutz“?

Härten Sie Docker-Images, indem Sie unnötige Pakete entfernen, sie als Nicht-Root-Benutzer ausführen und Laufzeitsicherheitstools (Falco, Sysdig) einsetzen, um anomales Containerverhalten zu erkennen. Du übst Security+ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Security+ Academy zu starten?

Keine Vorkenntnisse erforderlich. Security+ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Containersicherheit: Härtung von Images und Laufzeitschutz“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Security+ Academy-Lektion Code schreiben und ausführen?

Ja. Jede Security+ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Containersicherheit: Härtung von Images und Laufzeitschutz
  2. Kubernetes-Sicherheit: RBAC, Netzwerkrichtlinien und Pod-Sicherheit
  3. Sicherheit serverloser Architekturen und Funktionen
  4. Sicherheits-Scanning für Infrastructure as Code
← Zurück zu Security+ Academy