Docker tem diversas features para garantir a segurança dos seus containers. Vamos discutir como adicionar estas camadas de segurança como SELinux, Capabilities, AppArmor, Seccomp e outras abordagens para garantir o isolamento das suas aplicações.
8. Globalcode – Open4education
Capabilities
• Capabilities foram adicionadas no kernel há 15 anos atrás.
• Tenta dividir o poder de root
• Lista atuais capabilities no Docker
• getpcaps 1
• Algumas capabilities
• chow
• kill
• setuid
• dac_override
• Enabled by default
"nothing should need this. If your container need this, it's probably doing something
horrible."
Steve Grubb, security expert at Red Hat
9. Globalcode – Open4education
Quais capabilities eu realmente preciso no meu container?
• Entre em modo permissivo
• setsebool virt_sandbox_use_all_caps=0
• setenforce 0
• Execute seu container com todas as caps.
• docker run --cap-add all IMAGE ...
• Isto irá gerar uma mensagem sobre as capabilities usadas
• grep capability /var/log/audit/audit.log
"type=AVC msg=audit(1495655327.756:44343): avc: denied { syslog } for pid=5246
comm="rsyslogd" capability=34 scontext=system_u:system_r:container_t:s0:c795,c887
tcontext=system_u:system_r:container_t:s0:c795,c887 tclass=capability2 "
• cap_name[31]="cap_setfcap"
• cap_name[32]="cap_mac_override"
• cap_name[33]="cap_mac_admin"
• cap_name[34]="cap_syslog"
10. Globalcode – Open4education
Limite o recurso disponível
• Recurso do cgroups
• Memory
• --memory
• Swap
• --memory-swap
• CPU
• --cpu-shares
• DISK I/O
• --device-read-iops
• --device-write-iops
13. Globalcode – Open4education
SELinux
• Type Enforcement e Multi Category Security ( MCS )
• sandbox_lxc_process = "system_u:system_r:container_t:s0"
• cada container s0:c1, s0:c2, …
• Adicione este parâmetro no docker daemon para habilitar o SELinux
• --selinux-enabled
14. Globalcode – Open4education
AppArmor
• Profile padrão é o docker-default
• Para carregar o profile padrão
• --security-opt apparmor=docker-default
• Você pode gerenciar syscalls, capabilities e paths
• Você pode utilizar um gerador de profiles
• https://github.com/jessfraz/bane
22. Globalcode – Open4education
Futuro - Rootless containers
• Runc executando como usuário não-privilegiado
• Alguns problemas com cgroups
• Alguns problemas com host network
23. Globalcode – Open4education
Futuro - Intel Clear Containers
• Pula diretamente para o Kernel Linux usando kvmtool
• In-place Kernel Load
• Suporte para Docker Containers
• Boot em 0.2 seconds
• Slim Kernel