A tecnologia Docker tem sido cada vez mais utilizada. Pela pesquisa de 2022 realizada pelo Stack Overflow que incluiu 70 mil entrevistados, ela ficou no topo da lista das mais desejadas comparado com outras ferramentas. Isso acontece por conta de diversas vantagens que vão desde acessibilidade à custo-benefício, mas como será que fica seu aspecto no quesito segurança?
Segundo a própria plataforma Docker, podemos por padrão considerar a existência de 4 áreas principais quando pensamos na segurança da ferramenta:
- Segurança do Kernel: por padrão namespaces e grupos de controle (cgroups) atuam nos bastidores fazendo a diferenciação dos processos de cada container e impedem o acesso privilegiado a rede do outro.
- Docker daemon: como um programa que secretamente é executado em segundo plano, o daemon do Docker requer privilégios root possibilitando poderosos recursos que podem ficar menos expostos caso você opte pelo modo sem root, tornando seu uso mais limitado.
- Perfil de configuração do container: por padrão a inicialização de um container acontece com muitos de seus recursos de forma restrita. Isso significa que aquilo que seria necessário ser feito com privilégios root, pode simplesmente ser feitos através de capacidades “não-root”. Ex: processos que precisam utilizar portas privilegiadas (< 1024) podem utilizar a capability net_bind_service.
Sendo assim, um root de container não teria tantos poderes quanto um root normal de sistema. O que leva a recomendação de remover todos os recuso e deixar apenas aqueles explicitamente necessários, como uma ótima opção de boas práticas. - Recursos gerais de segurança: de forma geral você pode personalizar as suas camadas de segurança para o docker como quiser, seja utilizando um kernel com GRSEC e PAX que anula muitos exploits devido as suas técnicas de randomização de endereço, quanto a definição de suas próprias políticas.
Cuidando desses 4 pontos será possível evitar muitas explorações de vulnerabilidades, contudo, algumas outras recomendações podem deixar essas camadas ainda mais seguras.
O conceito de distroless containers carrega a ideia de “quanto menos melhor”, isso significa que seu container não precisa vim carregado de pacotes que nem mesmo será usado ou lembrado. Como dito no artigo de João Brito, uma imagem base de JAVA contém mais de 600 vulnerabilidades em sua versão “latest”, número que se reduz em sua versão “slim” e vai para zero em sua versão “distroless”. Ou seja, um container ideal seria aquele que possui apenas aquilo que precisa para processar sua aplicação.
A utilização de imagens de bases confiáveis é tão importante quanto manter suas atualizações em dia, não colocar dados sensíveis como secrets e credenciais impede vazamentos que facilmente poderiam ter sido evitados. Portas abertas no container também representam portas abertas em seu sistema, sendo uma boa prática não as expor desnecessariamente.
Segurança em container é um assunto extenso e complexo conforme você se aprofunda cada vez mais nele. Avalie o contexto de sua aplicação, teste novas configurações e políticas de segurança, e continue estudando para buscar estar sempre passos a frente do invasor.
Fontes:
https://survey.stackoverflow.co/2022/#section-most-loved-dreaded-and-wanted-other-tools
https://juniorjbn.medium.com/o-que-%C3%A9-esse-tal-de-distroless-d1cc5dcd070e
https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html
https://sysdig.com/blog/dockerfile-best-practices
https://docs.docker.com/engine/security
Views: 1788