SlideShare a Scribd company logo
1 of 20
Download to read offline
Docker Security
Architektur und Sicherheitsfunktionen von
Containervirtualisierungen
Nils Magnus
GUUG-Frühjahrsfachgespräch 2015,
Stuttgart, 26. März 2015
Jump on the Bandwagon
Docker ist Hype! Doch worum geht es da eigentlich genau?
●
In erster Linie keine neue Virtualisierungstechnik
●
Nicht wichtig, wie performant Docker ist.
Standardisierung:
●
einfache Schnittstelle zwischen Development und Operations
●
vielleicht Katalysator für echte DevOps-Prozesse
Gretchenfrage: Wie sicher ist die Technik in der Produktion?
Vorwissen, Zielgruppe:
Systemarchitekten mit Grundlagenwissen über Docker
oder anderen Containervirtualisierungen
Docker und seine Grundlagen
Leichtgewichtige
Containervirtualisierung
Greift auf Kernelfunktionen
zurück, die teilweise schon
ziemlich alt sind:
●
LXC,
●
Namespaces,
●
Cgroups und
●
Layered Filesystems.
Fast alle Komponenten lassen
sich austauschen.
Fühlt sich wie eine Virtualisierung
an, steht aber nicht im
Wettbewerb zu KVM, Xen & Co.
●
Vorstellbar wie eine aufgebohrte
Chroot-Umgebung
●
Isolation von Ressourcen
●
Gemeinsame Kernelnutzung
„Container 01 KM
J“ von KM
J aus der deutschsprachigen W
ikipedia.
Lizenziert unter CC BY-SA 3.0 über W
ikimediaCommons
Docker ist beliebt …

… zu beliebt?

Features beeindruckend.

Sicherheit bleibt schnell außen vor:

Security außerhalb der Spielkiste vergessen

Ansatz der Docker-Entwickler:
"Protect against mistake, not abuse!"
Angriffsszenarien auf Docker

Chroot-Escape

Sniffer

Zugriff mit allen Capabilitys

Direkter Zugriff auf Block-Devices

Potentially Hostile Tenants

Secure Administration and Management
Beispiel für Chroot-Outbreak
Ausbrüche sind nicht immer offensichtlich.
Den Syscall chroot() und das gleichnamige Kommando
existieren seit 1979.
Sie sind zwar nicht als Sicherheitsfunktion gedacht,
erlauben aber einen Ausbruch aus dem Chroot-Jail:
#include <unistd.h>
#define DIR "xxx"
int main() {
int i;
mkdir(DIR, 0755);
chroot(DIR);
for (i = 0; i < 1024; i++) chdir("..");
chroot(".");
execl("/bin/sh", "-i", NULL);
}
Virtualisierung im Vergleich
Physikalischer Host Virtuelle Maschine Container
Gemeinsame
Ressourcen
Teilen sich das Netz Teilen sich die
Host-Hardware
Teilen sich den
Kernel
Angriffsszenario Angriff per Netz auf
offene Ports etc.
Angriff auf
Hypervisor
Angriff per Syscall auf
Kernel-Isolation
(Namespaces,
Cgroups, ...)
Schutzmaß-nahmen Portfilter, Firewalls,
Segmentierung der
Netze
Guter Hypervisor Absicherung im
Containermanager,
SE-Linux, Capabilitys
Aufwand der
Maßnahmen
Einfach,
Best Practices
Komplex,
aber zentral zu
managen
Vielschichtig durch
relativ große
Angriffsfläche
Isolation durch Namespaces

Sichtbarkeit nur von eigenen Prozessen, Usern,
Partitionen:
$ sudo docker run -it ubuntu /bin/bash
root@257b138209be:/# ps aux
USER PID %CPU %MEM VSZ RSS STAT START TIME COMMAND
root 1 0.4 0.0 18176 1992 Ss 15:17 0:00 /bin/bash
root 15 0.0 0.0 15568 1132 R+ 15:17 0:00 ps aux
root@257b138209be:/# ip a
[…]
33: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
state UP group default
link/ether 02:42:ac:11:00:08 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.8/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:8/64 scope link
valid_lft forever preferred_lft forever
Capabilitys

Entzug einiger Capabilitys verhindert trotz (scheinbarer)
Rootrechte das Wiederherstellen des Status quo ante
# getpcaps $$
Capabilities for `22424': = cap_chown,cap_dac_override,
cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_
setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_ne
t_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,c
ap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_
pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap
_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,c
ap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_sy
slog,cap_wake_alarm,cap_block_suspend+ep
# docker run -it ubuntu /bin/bash
root@39ed301e0731:/# getpcaps $$
Capabilities for `1': = cap_chown,cap_dac_override,cap_fowner,
cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind
_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_
setfcap+eip
Gefährliches Einfallstor

Syscall-Schnittstelle ist der Eintrittspunkt in den
gemeinsam genutzten Kernel

Capabilitys sind die Torwächter zu den Ressourcen der
anderen Container

Innerhalb des Kernels ist das Thema komplex: Ein
winziger Bug exploitet die komplette Isolation

Beispiel Shocker vom Juni 2014: Docker 0.11 (Vor-
Vorgänger von 1.0) ermöglicht den Ausbruch aus dem
Container
Shocker

Von Sebastian Kramer aus dem Openwall im Juni 2014
veröffentlicherter Proof-of-Concept

Docker erzeugt beim Start einen neuen Filesystem-
Context und setzt per Bind-Mount neues „/“.

Container und Host nutzen innerhalb des Kernels die
gleiche struct fs, um Bind-Mounts zu verwalten.

Wer kennt den Syscall open_by_handle_at()? Dazu braucht
man die CAP_DAC_OVERRIDE, die Docker damals hatte.

Mit diesen Berechtigungen konnte man in den Inodes des
Hosts suchen und dort z. B. dessen /etc/shadow lesen.
Lokale Ressourcen
Was lässt sich schützen?

Bei Zugriff auf Kernel: nichts

Bei Zugriff auf Hardware: wenig

Nicht vergessen:
Zugriff vom Host ist zwangsläufig immer möglich!

In Multi-Tenant-Umgebungen ist das durchaus eine
wichtige Überlegung!
Docker im Einsatz
Sehr praktisch und ein Erfolgsfaktor für Docker:
Der Docker-Hub/Registry. Doch:

Woher kommen die Images?

Malicious Images erhalten Zugriff auf
Host-System (vor Docker 1.3.3)

Wer paketiert nach welchen Kriterien?
Diese Überlegung gilt für sämtliche
Fremd-Software (Open Source + proprietär)!
Keine Passwörter, Zertifikate, Credentials oder Unter-
nehmensgeheimnisse in Container coden und uploaden!
Netzwerk-Sicherheit

Üblicherweise hängen alle Container an einer Bridge

alle Container sind in einem Segment: keine besondere
netztechnische Trennung zwischen Containern

Host-Firewall reicht nicht aus:

Clustermanagement: (Etcd etc.) Kommunikation zwischen
Nodes muss vertraulich und authentisch sein (kein Default)
HostInternet Cont. 1 Cont. 4Cont. 2 Cont. 3
Architektonische Kritik am Daemon

Docker verwaltet alle Container-Operationen über
einen dauerhaften Daemon mit REST-Schnittstelle

Nutzt normalerweise einen Unix-Domain-Socket

Mit Option -H lässt sich der Daemon an einen TCP-
Port binden. Das braucht man für die Orchestrierung.

Gefährlich, wenn dieser Port extern erreichbar ist.

Nicht alle Verbindungen per Default verschlüsselt

Kritiker entwerfen neues Projekt Rocket,
steckt aber noch in den Kinderschuhen.
Empfehlungen extern (für den Host)
Nicht nur auf ein Pferd setzen: Mehrere Layer Security

AppArmor sichert Zugriff auf Dateien und Pfade.

Profil für SE-Linux trennt Host von Container

Labels und Profiles gibt’s schon fertig, sind aber trickreich
im Detail

Pro Umgebung, Context oder Tenant ein separater Host

Einsatz von Seccomp als eine Art Syscall-Firewall

Allgemeines Kernel-Hardening mittels Grsecurity
Empfehlungen intern (für den Container)

Patchmanagement auch für Images bedenken
(entsprechende Zeilen im Dockerfile)

Nur eine Anwendung pro Container

Trotz Container Least Privilege beachten

kein SSH in den Container erlauben

saubere Datenpfade (Vorsicht bei Volumes, die
gesharte Verzeichnisse vom Host oder anderen
Containern mounten)
Wrap-up

Architektur und Technik von Docker:
Faszinierend, aber gefährlich komplex

Namespaces, Capabilitys, Syscalls isolieren lokal

Networking und Orchestrierung bieten noch
Herausforderungen

Es gibt keine konzeptionell-inhärente Probleme,
die gegen Docker sprechen

Methoden, um Probleme abzusichern, existieren!
Fragen.
Sie.
Jetzt!
Vielen Dank für Ihre Aufmerksamkeit!
Kontakt
Nils Magnus
Senior Systems Engineer
inovex GmbH
Office München
Valentin-Linhof Str. 2
81829 München
Mobil: +49-173-3181-057
E-Mail: nils.magnus@inovex.de
Sprechen Sie uns an auf
unsere Referenzprojekte!

More Related Content

What's hot

Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen B1 Systems GmbH
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumNicholas Dille
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenNicholas Dille
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Dockergedoplan
 
Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Govinda Fichtner
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungTilo Baller
 
Containerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayContainerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayTobias Schneck
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Gitpaultcochrane
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!Tobias Schneck
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Tobias Schneck
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppetinovex GmbH
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker ContainerAndreas Koop
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows ContainerThomas Wilhelm Wiefel
 
Git vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungGit vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungMario Müller
 

What's hot (20)

Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Docker
 
Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?Docker and Raspberry Pi. A dream team?
Docker and Raspberry Pi. A dream team?
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & Verwendung
 
Containerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayContainerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony Day
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Git
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
 
Nginx
NginxNginx
Nginx
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
 
Git vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende EinführungGit vs SVN - Eine vergleichende Einführung
Git vs SVN - Eine vergleichende Einführung
 

Similar to Docker Security - Architektur und Sicherheitsfunktionen von Containervirtualisierungen

Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXC
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXCContainer im Betrieb - Ergebnisse der Validieren Docker vs. LXC
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXCBild GmbH & Co. KG
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfSyahri Ramadhan
 
Die Containerplattform Lego für DevOps
Die Containerplattform Lego für DevOpsDie Containerplattform Lego für DevOps
Die Containerplattform Lego für DevOpsATIX AG
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Trivadis
 
Private Cloud mit Ceph und OpenStack
Private Cloud mit Ceph und OpenStackPrivate Cloud mit Ceph und OpenStack
Private Cloud mit Ceph und OpenStackDaniel Schneller
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisJörn Dinkla
 
Überblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeÜberblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeAndreas Schreiber
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...B1 Systems GmbH
 
Ausfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneAusfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneJens Klein
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerB1 Systems GmbH
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als CodeJan Gehring
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerSteven Grzbielok
 
High Security PHP Applications
High Security PHP ApplicationsHigh Security PHP Applications
High Security PHP Applicationsguest0e6d5e
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Managementinovex GmbH
 
In den sicheren Hafen jax2020
In den sicheren Hafen jax2020In den sicheren Hafen jax2020
In den sicheren Hafen jax2020Stephan Kaps
 
Nagios Conference 2007 | Aufbau eines hochverfügbaren Nagios Clusters by Mart...
Nagios Conference 2007 | Aufbau eines hochverfügbaren Nagios Clusters by Mart...Nagios Conference 2007 | Aufbau eines hochverfügbaren Nagios Clusters by Mart...
Nagios Conference 2007 | Aufbau eines hochverfügbaren Nagios Clusters by Mart...NETWAYS
 

Similar to Docker Security - Architektur und Sicherheitsfunktionen von Containervirtualisierungen (20)

Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXC
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXCContainer im Betrieb - Ergebnisse der Validieren Docker vs. LXC
Container im Betrieb - Ergebnisse der Validieren Docker vs. LXC
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
 
Die Containerplattform Lego für DevOps
Die Containerplattform Lego für DevOpsDie Containerplattform Lego für DevOps
Die Containerplattform Lego für DevOps
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
 
Private Cloud mit Ceph und OpenStack
Private Cloud mit Ceph und OpenStackPrivate Cloud mit Ceph und OpenStack
Private Cloud mit Ceph und OpenStack
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der Praxis
 
Überblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle VersionsmanagementsystemeÜberblick über aktuelle Versionsmanagementsysteme
Überblick über aktuelle Versionsmanagementsysteme
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
 
Ausfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneAusfallsichere Kultur mit Plone
Ausfallsichere Kultur mit Plone
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
High Security PHP Applications
High Security PHP ApplicationsHigh Security PHP Applications
High Security PHP Applications
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Management
 
Was ist Docker?
Was ist Docker?Was ist Docker?
Was ist Docker?
 
In den sicheren Hafen jax2020
In den sicheren Hafen jax2020In den sicheren Hafen jax2020
In den sicheren Hafen jax2020
 
Nagios Conference 2007 | Aufbau eines hochverfügbaren Nagios Clusters by Mart...
Nagios Conference 2007 | Aufbau eines hochverfügbaren Nagios Clusters by Mart...Nagios Conference 2007 | Aufbau eines hochverfügbaren Nagios Clusters by Mart...
Nagios Conference 2007 | Aufbau eines hochverfügbaren Nagios Clusters by Mart...
 

More from inovex GmbH

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegeninovex GmbH
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIinovex GmbH
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolutioninovex GmbH
 
Network Policies
Network PoliciesNetwork Policies
Network Policiesinovex GmbH
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learninginovex GmbH
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungeninovex GmbH
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeteninovex GmbH
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetesinovex GmbH
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systemsinovex GmbH
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreiheninovex GmbH
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenteninovex GmbH
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?inovex GmbH
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Projectinovex GmbH
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretabilityinovex GmbH
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use caseinovex GmbH
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessinovex GmbH
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumiinovex GmbH
 

More from inovex GmbH (20)

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AI
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolution
 
WWDC 2019 Recap
WWDC 2019 RecapWWDC 2019 Recap
WWDC 2019 Recap
 
Network Policies
Network PoliciesNetwork Policies
Network Policies
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learning
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungen
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeten
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetes
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systems
 
Azure IoT Edge
Azure IoT EdgeAzure IoT Edge
Azure IoT Edge
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreihen
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenten
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?
 
Dev + Ops = Go
Dev + Ops = GoDev + Ops = Go
Dev + Ops = Go
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Project
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretability
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use case
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madness
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
 

Docker Security - Architektur und Sicherheitsfunktionen von Containervirtualisierungen

  • 1. Docker Security Architektur und Sicherheitsfunktionen von Containervirtualisierungen Nils Magnus GUUG-Frühjahrsfachgespräch 2015, Stuttgart, 26. März 2015
  • 2. Jump on the Bandwagon Docker ist Hype! Doch worum geht es da eigentlich genau? ● In erster Linie keine neue Virtualisierungstechnik ● Nicht wichtig, wie performant Docker ist. Standardisierung: ● einfache Schnittstelle zwischen Development und Operations ● vielleicht Katalysator für echte DevOps-Prozesse Gretchenfrage: Wie sicher ist die Technik in der Produktion? Vorwissen, Zielgruppe: Systemarchitekten mit Grundlagenwissen über Docker oder anderen Containervirtualisierungen
  • 3. Docker und seine Grundlagen Leichtgewichtige Containervirtualisierung Greift auf Kernelfunktionen zurück, die teilweise schon ziemlich alt sind: ● LXC, ● Namespaces, ● Cgroups und ● Layered Filesystems. Fast alle Komponenten lassen sich austauschen. Fühlt sich wie eine Virtualisierung an, steht aber nicht im Wettbewerb zu KVM, Xen & Co. ● Vorstellbar wie eine aufgebohrte Chroot-Umgebung ● Isolation von Ressourcen ● Gemeinsame Kernelnutzung „Container 01 KM J“ von KM J aus der deutschsprachigen W ikipedia. Lizenziert unter CC BY-SA 3.0 über W ikimediaCommons
  • 4. Docker ist beliebt …  … zu beliebt?  Features beeindruckend.  Sicherheit bleibt schnell außen vor:  Security außerhalb der Spielkiste vergessen  Ansatz der Docker-Entwickler: "Protect against mistake, not abuse!"
  • 5. Angriffsszenarien auf Docker  Chroot-Escape  Sniffer  Zugriff mit allen Capabilitys  Direkter Zugriff auf Block-Devices  Potentially Hostile Tenants  Secure Administration and Management
  • 6. Beispiel für Chroot-Outbreak Ausbrüche sind nicht immer offensichtlich. Den Syscall chroot() und das gleichnamige Kommando existieren seit 1979. Sie sind zwar nicht als Sicherheitsfunktion gedacht, erlauben aber einen Ausbruch aus dem Chroot-Jail: #include <unistd.h> #define DIR "xxx" int main() { int i; mkdir(DIR, 0755); chroot(DIR); for (i = 0; i < 1024; i++) chdir(".."); chroot("."); execl("/bin/sh", "-i", NULL); }
  • 7. Virtualisierung im Vergleich Physikalischer Host Virtuelle Maschine Container Gemeinsame Ressourcen Teilen sich das Netz Teilen sich die Host-Hardware Teilen sich den Kernel Angriffsszenario Angriff per Netz auf offene Ports etc. Angriff auf Hypervisor Angriff per Syscall auf Kernel-Isolation (Namespaces, Cgroups, ...) Schutzmaß-nahmen Portfilter, Firewalls, Segmentierung der Netze Guter Hypervisor Absicherung im Containermanager, SE-Linux, Capabilitys Aufwand der Maßnahmen Einfach, Best Practices Komplex, aber zentral zu managen Vielschichtig durch relativ große Angriffsfläche
  • 8. Isolation durch Namespaces  Sichtbarkeit nur von eigenen Prozessen, Usern, Partitionen: $ sudo docker run -it ubuntu /bin/bash root@257b138209be:/# ps aux USER PID %CPU %MEM VSZ RSS STAT START TIME COMMAND root 1 0.4 0.0 18176 1992 Ss 15:17 0:00 /bin/bash root 15 0.0 0.0 15568 1132 R+ 15:17 0:00 ps aux root@257b138209be:/# ip a […] 33: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:08 brd ff:ff:ff:ff:ff:ff inet 172.17.0.8/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:8/64 scope link valid_lft forever preferred_lft forever
  • 9. Capabilitys  Entzug einiger Capabilitys verhindert trotz (scheinbarer) Rootrechte das Wiederherstellen des Status quo ante # getpcaps $$ Capabilities for `22424': = cap_chown,cap_dac_override, cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_ setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_ne t_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,c ap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_ pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap _sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,c ap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_sy slog,cap_wake_alarm,cap_block_suspend+ep # docker run -it ubuntu /bin/bash root@39ed301e0731:/# getpcaps $$ Capabilities for `1': = cap_chown,cap_dac_override,cap_fowner, cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind _service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_ setfcap+eip
  • 10. Gefährliches Einfallstor  Syscall-Schnittstelle ist der Eintrittspunkt in den gemeinsam genutzten Kernel  Capabilitys sind die Torwächter zu den Ressourcen der anderen Container  Innerhalb des Kernels ist das Thema komplex: Ein winziger Bug exploitet die komplette Isolation  Beispiel Shocker vom Juni 2014: Docker 0.11 (Vor- Vorgänger von 1.0) ermöglicht den Ausbruch aus dem Container
  • 11. Shocker  Von Sebastian Kramer aus dem Openwall im Juni 2014 veröffentlicherter Proof-of-Concept  Docker erzeugt beim Start einen neuen Filesystem- Context und setzt per Bind-Mount neues „/“.  Container und Host nutzen innerhalb des Kernels die gleiche struct fs, um Bind-Mounts zu verwalten.  Wer kennt den Syscall open_by_handle_at()? Dazu braucht man die CAP_DAC_OVERRIDE, die Docker damals hatte.  Mit diesen Berechtigungen konnte man in den Inodes des Hosts suchen und dort z. B. dessen /etc/shadow lesen.
  • 12. Lokale Ressourcen Was lässt sich schützen?  Bei Zugriff auf Kernel: nichts  Bei Zugriff auf Hardware: wenig  Nicht vergessen: Zugriff vom Host ist zwangsläufig immer möglich!  In Multi-Tenant-Umgebungen ist das durchaus eine wichtige Überlegung!
  • 13. Docker im Einsatz Sehr praktisch und ein Erfolgsfaktor für Docker: Der Docker-Hub/Registry. Doch:  Woher kommen die Images?  Malicious Images erhalten Zugriff auf Host-System (vor Docker 1.3.3)  Wer paketiert nach welchen Kriterien? Diese Überlegung gilt für sämtliche Fremd-Software (Open Source + proprietär)! Keine Passwörter, Zertifikate, Credentials oder Unter- nehmensgeheimnisse in Container coden und uploaden!
  • 14. Netzwerk-Sicherheit  Üblicherweise hängen alle Container an einer Bridge  alle Container sind in einem Segment: keine besondere netztechnische Trennung zwischen Containern  Host-Firewall reicht nicht aus:  Clustermanagement: (Etcd etc.) Kommunikation zwischen Nodes muss vertraulich und authentisch sein (kein Default) HostInternet Cont. 1 Cont. 4Cont. 2 Cont. 3
  • 15. Architektonische Kritik am Daemon  Docker verwaltet alle Container-Operationen über einen dauerhaften Daemon mit REST-Schnittstelle  Nutzt normalerweise einen Unix-Domain-Socket  Mit Option -H lässt sich der Daemon an einen TCP- Port binden. Das braucht man für die Orchestrierung.  Gefährlich, wenn dieser Port extern erreichbar ist.  Nicht alle Verbindungen per Default verschlüsselt  Kritiker entwerfen neues Projekt Rocket, steckt aber noch in den Kinderschuhen.
  • 16. Empfehlungen extern (für den Host) Nicht nur auf ein Pferd setzen: Mehrere Layer Security  AppArmor sichert Zugriff auf Dateien und Pfade.  Profil für SE-Linux trennt Host von Container  Labels und Profiles gibt’s schon fertig, sind aber trickreich im Detail  Pro Umgebung, Context oder Tenant ein separater Host  Einsatz von Seccomp als eine Art Syscall-Firewall  Allgemeines Kernel-Hardening mittels Grsecurity
  • 17. Empfehlungen intern (für den Container)  Patchmanagement auch für Images bedenken (entsprechende Zeilen im Dockerfile)  Nur eine Anwendung pro Container  Trotz Container Least Privilege beachten  kein SSH in den Container erlauben  saubere Datenpfade (Vorsicht bei Volumes, die gesharte Verzeichnisse vom Host oder anderen Containern mounten)
  • 18. Wrap-up  Architektur und Technik von Docker: Faszinierend, aber gefährlich komplex  Namespaces, Capabilitys, Syscalls isolieren lokal  Networking und Orchestrierung bieten noch Herausforderungen  Es gibt keine konzeptionell-inhärente Probleme, die gegen Docker sprechen  Methoden, um Probleme abzusichern, existieren!
  • 20. Vielen Dank für Ihre Aufmerksamkeit! Kontakt Nils Magnus Senior Systems Engineer inovex GmbH Office München Valentin-Linhof Str. 2 81829 München Mobil: +49-173-3181-057 E-Mail: nils.magnus@inovex.de Sprechen Sie uns an auf unsere Referenzprojekte!