Einführung
Container teilen den Host-Kernel – Fehlkonfigurationen ermöglichen Angriffe wie Privilege Escalation oder Datenlecks. Dieser Leitfaden strukturiert Docker-Sicherheit in vier Kernbereiche: Image-Integrität, Runtime-Härtung, Netzwerkisolation und Monitoring.
Docker-Sicherheitsrisiken verstehen
Typische Schwachstellen in Containerumgebungen:
Häufige Angriffsvektoren
- Rechteausweitung: Root-Zugriff auf den Host durch fehlkonfigurierte Container
- Veraltete Images: Ungesicherte Abhängigkeiten in Basis-Images
- Offene Ports: Unautorisiert exponierte Dienste
- Geheimnislecks: Hardcodierte Credentials in Images
Analyse-Tools
- Trivy: Vulnerability-Scanner für Images
- Docker Bench: CIS-Benchmark-Checks
- Falco: Echtzeit-Monitoring für Anomalien
# Image-Scan mit Trivy
trivy image mein-app:latest
Sicherheitstipp: Automatisierte Scans in CI/CD-Pipelines integrieren.
Container-Images absichern
Sichere Images sind die Grundlage jeder Container-Security-Strategie.
Best Practices
-
Minimale Basis-Images
- Verwenden Sie schlanke Images wie
Alpine
oderDistroless
:
FROM alpine:3.18
- Verwenden Sie schlanke Images wie
-
Multi-Stage-Builds
- Trennen Sie Build- und Runtime-Umgebungen:
FROM node:20 AS builder COPY . . RUN npm install && npm run build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html
-
Images scannen & signieren
- Integrieren Sie Vulnerability-Scans in CI/CD
- Digitale Signatur mit Cosign:
# Schlüsselpaar generieren cosign generate-key-pair # Image signieren cosign sign --key cosign.key mein-app:v1.2.0 # Signatur verifizieren cosign verify --key cosign.pub mein-app:v1.2.0
Runtime-Konfiguration härten
Sichere Images allein genügen nicht – die Laufzeitumgebung muss geschützt werden.
Schlüsselmaßnahmen
-
Non-Root-Betrieb
USER 1001 # Im Dockerfile
docker run --user 1001 mein-app # Zur Laufzeit
-
Ressourcenlimitierung
docker run --cpus 2 --memory 512m --pids-limit 100 mein-app
-
Read-Only-Dateisystem
docker run --read-only --tmpfs /tmp mein-app
-
Capabilities entfernen
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
Achtung: Entfernen Sie gefährliche Capabilities wie SYS_ADMIN
und NET_RAW
.
Netzwerksicherheit & Isolation
Docker-Netzwerke standardmäßig oft zu permissiv konfiguriert.
Sicherheitsmaßnahmen
-
Custom Bridge Networks
docker network create --driver bridge secure-frontend docker run --network secure-frontend react-app
-
Port-Exposition minimieren
EXPOSE 443/tcp # Nur notwendige Ports freigeben
-
TLS-Verschlüsselung
- Mutual TLS (mTLS) mit Service Meshes wie Istio
-
Lateral Movement blockieren
dockerd --icc=false # Inter-Container-Kommunikation deaktivieren
Host-Sicherheit
Ein kompromittierter Host gefährdet alle Container.
Schutzmaßnahmen
-
SELinux/AppArmor aktivieren
apparmor_parser -r /etc/apparmor.d/docker-restricted
-
Docker Daemon absichern
chmod 660 /var/run/docker.sock && chown root:docker /var/run/docker.sock
-
Rootless Docker (experimentell)
dockerd-rootless-setuptool.sh install
Geheimnisverwaltung
Nie Credentials in Images oder Umgebungsvariablen speichern!
Lösungen
-
Docker Secrets (Swarm Mode)
echo "db_pass" | docker secret create db_pass -
-
HashiCorp Vault Integration
docker run --env VAULT_TOKEN=s.xyz mein-app
Monitoring & Incident Response
Tools
-
Falco für Anomalieerkennung
falco -r /etc/falco/falco_rules.yaml
-
Zentralisiertes Logging
dockerd --log-driver=journald # Systemd-Journal Integration
-
Regelmäßige Audits
./docker-bench-security.sh # CIS-Checks automatisieren
Fortgeschrittene Strategien
1. Sandboxing mit gVisor
docker run --runtime=runsc nginx # Extra Sicherheitsschicht
2. Zero-Trust-Networking
- Service Meshes wie Linkerd für mTLS
3. Immutable Infrastructure
- Container bei Änderungen neu bauen statt live patchen
Fazit
Docker-Sicherheit ist ein kontinuierlicher Prozess. Durch minimalistische Images, Runtime-Härtung und automatisiertes Monitoring reduzieren Sie Angriffsflächen signifikant. Kombinieren Sie diese Maßnahmen mit Tools wie Falco und Vault für Enterprise-Level-Sicherheit.