protegendo docker
TRANSCRIPT
Globalcode – Open4education
Quem sou eu?• SRE na Stone Pagamentos• Apaixonado por open source• Entusiasta da cultura e do desenvolvimento ágil
Globalcode – Open4education
O que é Docker?
"Docker is about running random crap
from the internet as root on your host"
Globalcode – Open4education
O que precisa de proteção?
• Application• Containers <-> Containers• Containers <-> Hosts
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
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"
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
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
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
Globalcode – Open4education
Seccomp• Docker tem um profile padrão para seccomp• Adicione este parâmetro para usar um custom profile
• --security-opt seccomp:custom.json{
"defaultAction": "SCMP_ACT_ALLOW",
"syscalls": [
{
"name": "chown",
"action": "SCMP_ACT_ERRNO"
},
{
"name": "chmod",
"action": "SCMP_ACT_ERRNO"
}
]
}
Globalcode – Open4education
Limpe seus container
• Dockerfile• RUN for i in `find / -not \( -path /proc -prune \) -perm +6000 -type f`; chmod a-s $i;
done
Globalcode – Open4education
Futuro - Rootless containers
• Runc executando como usuário não-privilegiado• Alguns problemas com cgroups• Alguns problemas com host network
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