OWASP Docker Security Sheet: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| (21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
= | == REGEL 0 – Host und Docker auf dem neuesten Stand halten == | ||
* | * Erklärung: Container teilen sich den Kernel mit dem Host. Kernel-Exploits im Container wirken direkt auf den Host. | ||
* Risiko: Ein Angreifer kann über Schwachstellen wie „Dirty COW“ Root-Rechte auf dem Host erlangen. | |||
* Best Practice: Regelmäßige Updates von Docker Engine, Docker Machine und Linux-Kernel einspielen, Security Advisories abonnieren. | |||
= | == REGEL 1 – Docker-Daemon-Socket nicht freigeben == | ||
Docker | * Erklärung: /var/run/docker.sock ist der Einstiegspunkt zur Docker-API – Besitzer = root. | ||
* Risiko: Jeder mit Zugriff auf diesen Socket hat vollen Root-Zugriff auf den Host. | |||
* Beispiel: Viele Images binden den Socket per „-v /var/run/docker.sock:/var/run/docker.sock“ ein → Privilege Escalation. | |||
* Best Practice: Socket niemals in Container mounten. Falls Remote-Zugriff nötig: TLS-gesicherter TCP-Socket mit Authentifizierung. | |||
== REGEL 2 – Benutzer festlegen == | |||
* Erklärung: Standardmäßig läuft der Container-Prozess als root. | |||
* Risiko: Kompromittierte Container-Prozesse können mit Root-Rechten auf Host-Ressourcen zugreifen. | |||
* Best Practice: | |||
** Im Dockerfile mit „USER“ setzen. | |||
** User Namespaces aktivieren (–userns-remap). | |||
** In Kubernetes runAsNonRoot verwenden. | |||
== REGEL 3 – Fähigkeiten beschränken == | |||
==REGEL | * Erklärung: Linux Capabilities sind granulare Root-Rechte (z. B. CHOWN, NET_ADMIN). | ||
* Risiko: Container mit „--privileged“ oder unnötigen Capabilities können Kernel-Operationen durchführen. | |||
* Best Practice: | |||
** Standardmäßig „--cap-drop all“ setzen, nur benötigte hinzufügen. | |||
** Niemals „--privileged“ nutzen. | |||
** In Kubernetes: capabilities im SecurityContext definieren. | |||
== REGEL 4 – no-new-privileges setzen == | |||
* Erklärung: Verhindert, dass Prozesse durch setuid/setgid zusätzliche Rechte erlangen. | |||
* Risiko: Ohne dieses Flag können Programme Rechte-Eskalation durchführen. | |||
* Best Practice: Container mit „--security-opt=no-new-privileges“ starten, in Kubernetes allowPrivilegeEscalation=false. | |||
==REGEL | == REGEL 5 – Inter-Container-Kommunikation deaktivieren == | ||
* Erklärung: Standardmäßig können Container über das docker0-Bridge-Netzwerk miteinander kommunizieren. | |||
* Risiko: Kompromittierter Container kann andere Container angreifen oder scannen. | |||
* Best Practice: Docker mit „--icc=false“ starten, Kommunikation nur explizit erlauben. In Kubernetes: NetworkPolicies nutzen. | |||
== REGEL 6 – Linux-Sicherheitsmodule nutzen == | |||
* Erklärung: Seccomp, AppArmor, SELinux beschränken Systemaufrufe und Zugriffe von Prozessen. | |||
* Risiko: Ohne Profile können Container auf kritische Kernel-Funktionen zugreifen. | |||
* Best Practice: Standardprofile nicht deaktivieren, eigene Policies erstellen und strikt einsetzen. | |||
== REGEL 7 – Ressourcen begrenzen == | |||
* Erklärung: Container können sonst unbeschränkt CPU, RAM, File-Deskriptoren nutzen. | |||
* Risiko: DoS-Angriffe möglich, Host wird überlastet. | |||
* Best Practice: Ressourcenlimits per „--memory“, „--cpu-shares“, „--ulimit“ setzen. In Kubernetes: Resource Limits definieren. | |||
== REGEL 8 – Dateisysteme schreibgeschützt mounten == | |||
* Erklärung: Container-Filesystem standardmäßig beschreibbar. | |||
- | * Risiko: Malware kann Dateien manipulieren, Persistenz aufbauen. | ||
* Best Practice: | |||
** „--read-only“ nutzen. | |||
** Schreibrechte nur für explizite tmpfs-Mounts. | |||
** Volumes mit „:ro“ oder „readonly“ einbinden. | |||
==REGEL | == REGEL 9 – Statische Analysetools einsetzen == | ||
* Erklärung: Container-Images können bekannte CVEs enthalten. | |||
* Risiko: Deployment von Images mit kritischen Sicherheitslücken. | |||
* Best Practice: | |||
** Tools wie Trivy, Clair, Anchore, Snyk oder Grype nutzen. | |||
** In CI/CD-Pipeline integrieren. | |||
== REGEL 10 – Logging konfigurieren == | |||
* Erklärung: Docker loggt standardmäßig auf „info“-Level. | |||
* Risiko: Wichtige Ereignisse fehlen oder Debug-Level erzeugt unnötige Datenmengen. | |||
* Best Practice: | |||
** Mindestens „info“-Level aktivieren. | |||
** Zentrale Log-Sammlung über ELK, Loki oder SIEM. | |||
== REGEL 11 – Dockerfile absichern == | |||
* Erklärung: Schlechte Praktiken im Dockerfile führen zu unsicheren Images. | |||
* Risiko: Root-User, ungepatchte Basis-Images, Curl-Bashing, unfixierte Versionen. | |||
* Best Practice: | |||
** Immer „USER“ definieren. | |||
** Basis-Images versionieren. | |||
** COPY statt ADD verwenden. | |||
** Dockerfile mit Lintern prüfen (z. B. hadolint). | |||
==REGEL | |||
Aktuelle Version vom 14. September 2025, 08:32 Uhr
REGEL 0 – Host und Docker auf dem neuesten Stand halten
- Erklärung: Container teilen sich den Kernel mit dem Host. Kernel-Exploits im Container wirken direkt auf den Host.
- Risiko: Ein Angreifer kann über Schwachstellen wie „Dirty COW“ Root-Rechte auf dem Host erlangen.
- Best Practice: Regelmäßige Updates von Docker Engine, Docker Machine und Linux-Kernel einspielen, Security Advisories abonnieren.
REGEL 1 – Docker-Daemon-Socket nicht freigeben
- Erklärung: /var/run/docker.sock ist der Einstiegspunkt zur Docker-API – Besitzer = root.
- Risiko: Jeder mit Zugriff auf diesen Socket hat vollen Root-Zugriff auf den Host.
- Beispiel: Viele Images binden den Socket per „-v /var/run/docker.sock:/var/run/docker.sock“ ein → Privilege Escalation.
- Best Practice: Socket niemals in Container mounten. Falls Remote-Zugriff nötig: TLS-gesicherter TCP-Socket mit Authentifizierung.
REGEL 2 – Benutzer festlegen
- Erklärung: Standardmäßig läuft der Container-Prozess als root.
- Risiko: Kompromittierte Container-Prozesse können mit Root-Rechten auf Host-Ressourcen zugreifen.
- Best Practice:
- Im Dockerfile mit „USER“ setzen.
- User Namespaces aktivieren (–userns-remap).
- In Kubernetes runAsNonRoot verwenden.
REGEL 3 – Fähigkeiten beschränken
- Erklärung: Linux Capabilities sind granulare Root-Rechte (z. B. CHOWN, NET_ADMIN).
- Risiko: Container mit „--privileged“ oder unnötigen Capabilities können Kernel-Operationen durchführen.
- Best Practice:
- Standardmäßig „--cap-drop all“ setzen, nur benötigte hinzufügen.
- Niemals „--privileged“ nutzen.
- In Kubernetes: capabilities im SecurityContext definieren.
REGEL 4 – no-new-privileges setzen
- Erklärung: Verhindert, dass Prozesse durch setuid/setgid zusätzliche Rechte erlangen.
- Risiko: Ohne dieses Flag können Programme Rechte-Eskalation durchführen.
- Best Practice: Container mit „--security-opt=no-new-privileges“ starten, in Kubernetes allowPrivilegeEscalation=false.
REGEL 5 – Inter-Container-Kommunikation deaktivieren
- Erklärung: Standardmäßig können Container über das docker0-Bridge-Netzwerk miteinander kommunizieren.
- Risiko: Kompromittierter Container kann andere Container angreifen oder scannen.
- Best Practice: Docker mit „--icc=false“ starten, Kommunikation nur explizit erlauben. In Kubernetes: NetworkPolicies nutzen.
REGEL 6 – Linux-Sicherheitsmodule nutzen
- Erklärung: Seccomp, AppArmor, SELinux beschränken Systemaufrufe und Zugriffe von Prozessen.
- Risiko: Ohne Profile können Container auf kritische Kernel-Funktionen zugreifen.
- Best Practice: Standardprofile nicht deaktivieren, eigene Policies erstellen und strikt einsetzen.
REGEL 7 – Ressourcen begrenzen
- Erklärung: Container können sonst unbeschränkt CPU, RAM, File-Deskriptoren nutzen.
- Risiko: DoS-Angriffe möglich, Host wird überlastet.
- Best Practice: Ressourcenlimits per „--memory“, „--cpu-shares“, „--ulimit“ setzen. In Kubernetes: Resource Limits definieren.
REGEL 8 – Dateisysteme schreibgeschützt mounten
- Erklärung: Container-Filesystem standardmäßig beschreibbar.
- Risiko: Malware kann Dateien manipulieren, Persistenz aufbauen.
- Best Practice:
- „--read-only“ nutzen.
- Schreibrechte nur für explizite tmpfs-Mounts.
- Volumes mit „:ro“ oder „readonly“ einbinden.
REGEL 9 – Statische Analysetools einsetzen
- Erklärung: Container-Images können bekannte CVEs enthalten.
- Risiko: Deployment von Images mit kritischen Sicherheitslücken.
- Best Practice:
- Tools wie Trivy, Clair, Anchore, Snyk oder Grype nutzen.
- In CI/CD-Pipeline integrieren.
REGEL 10 – Logging konfigurieren
- Erklärung: Docker loggt standardmäßig auf „info“-Level.
- Risiko: Wichtige Ereignisse fehlen oder Debug-Level erzeugt unnötige Datenmengen.
- Best Practice:
- Mindestens „info“-Level aktivieren.
- Zentrale Log-Sammlung über ELK, Loki oder SIEM.
REGEL 11 – Dockerfile absichern
- Erklärung: Schlechte Praktiken im Dockerfile führen zu unsicheren Images.
- Risiko: Root-User, ungepatchte Basis-Images, Curl-Bashing, unfixierte Versionen.
- Best Practice:
- Immer „USER“ definieren.
- Basis-Images versionieren.
- COPY statt ADD verwenden.
- Dockerfile mit Lintern prüfen (z. B. hadolint).