Pesquisa de site

Práticas recomendadas de segurança de contêineres: protegendo o Docker


Quando se trata de conteinerização, o Docker se tornou facilmente a tecnologia mais amplamente adotada. À medida que as empresas e os usuários do setor buscam usar contêineres para cortar custos, dimensionar serviços e simplificar a implementação de vários aplicativos, um aspecto importante que não deve ser esquecido é a segurança do Docker. O Docker é comumente elogiado por ser mais seguro do que as implantações tradicionais e, embora seja verdade, ainda devemos estar cientes das possíveis falhas de segurança para evitar a exploração de uma ferramenta tão poderosa.

Neste tutorial, abordaremos algumas das medidas de segurança mais importantes para Docker em um sistema Linux. Estas são práticas recomendadas que devem ser seguidas pelos administradores de sistema para garantir que seus aplicativos em contêineres no Docker sejam mantidos seguros contra possíveis explorações e usuários mal-intencionados.

Neste tutorial você aprenderá:

  • As 5 melhores práticas para proteger o Docker no Linux

Práticas recomendadas de segurança do Docker

A seguir, contaremos cinco das recomendações mais importantes para manter seguro seu ambiente Docker e seus aplicativos em contêineres.

Para que é usado o Docker?
Docker é o maior nome em conteinerização, embora haja uma série de outras ferramentas que também podem fazer esse trabalho. Muitos administradores Linux começam a usar o Docker para criar aplicativos que podem ser empacotados em um contêiner e facilmente implantados em qualquer sistema. Essa também é uma ótima maneira para os desenvolvedores compartilharem seu trabalho, já que qualquer pessoa com Docker pode executar o aplicativo.

1. Evite usar permissões de root

Os usuários do Linux já deveriam estar tentando minimizar o uso de privilégios administrativos sempre que possível. Esta já é uma regra de ouro dos sistemas Linux, onde a conta root deve ser usada exclusivamente para realizar tarefas e comandos importantes que não podem ser realizados por contas de usuários comuns.

A mesma regra se aplica aos contêineres Docker. Às vezes, os desenvolvedores atribuem preguiçosamente ou ao acaso mais permissões do que o necessário a um aplicativo Dockerizado, em vez de dedicar um tempo para decidir exatamente quais privilégios são necessários e delegá-los adequadamente. Tal descuido pode ter consequências terríveis se um usuário conseguir obter o controle de um aplicativo, dando-lhe efetivamente rédea solta sobre o ambiente.

Podemos contornar essa armadilha certificando-nos de não executar contêineres como root (verifique USER dentro do Dockerfile para garantir isso) e evitando executar contêineres com opções como --id 0 ou --privilegiado. Também podemos evitar executar o próprio Docker como root na maioria das situações, embora isso não seja uma precaução tão importante quanto os pontos mencionados acima.

2. Atualize regularmente – com cuidado

Atualizações para imagens Docker geralmente são boas. Eles introduzem novos recursos, patches de segurança, etc. Portanto, geralmente é recomendado buscar atualizações regularmente e manter todas as suas imagens Docker atualizadas. No entanto, em ambientes sensíveis onde o tempo de atividade é extremamente importante, podem ser tomadas medidas adicionais para pré-preparar estas alterações antes de as implementar em produção.

Embora as atualizações geralmente sejam uma coisa boa, elas também podem introduzir alterações significativas ou recursos instáveis que ainda não foram resolvidos. Em um ambiente que utiliza muitos contêineres Docker e requer atenção extra para garantir o tempo de atividade, podemos aproveitar tecnologias como Kubernetes, que nos permitirá implementar atualizações gradualmente e monitorar aplicativos em busca de erros, caso precisemos abortar as atualizações e reverter .

Veja também: Kubernetes vs Docker, qual a diferença?

3. Use imagens oficiais

Sempre que possível, opte por utilizar imagens oficiais que são disponibilizadas para download no Docker Hub. Essas imagens recebem atualizações regulares e são executadas por desenvolvedores da comunidade Docker, portanto, geralmente são mais confiáveis e têm melhor longevidade do que imagens mantidas por diversos usuários em outros sites.

Por exemplo, aplicativos comuns como NGINX ou Ubuntu possuem imagens oficiais disponíveis no Docker Hub. Usá-los é muito fácil, pois esse recurso já está incorporado ao Docker por padrão:


# Pull an official nginx image from Docker Hub:
$ docker pull nginx:latest

O mesmo comando mostrado acima também pode ser usado para atualizar a imagem.

4. Limitar as capacidades do contêiner

Esta recomendação anda de mãos dadas com a nossa primeira, que é evitar o uso de permissões de root. Da mesma forma, devemos também limitar as capacidades dos nossos contêineres Docker de todas as maneiras possíveis. Os contêineres geralmente devem ser executados apenas com as permissões mínimas necessárias para executar seu trabalho corretamente. Como os aplicativos Docker geralmente têm uma função muito específica, podemos ser altamente precisos com os recursos que atribuímos.

Uma forma de limitar capacidades é usar o sinalizador --internal. Isso evita que um contêiner Docker acesse qualquer coisa fora da rede interna, o que muitas vezes não é uma permissão necessária que precisamos delegar. Portanto, os contêineres Docker ainda podem se comunicar entre si (se configurados corretamente), mas não com a rede externa do sistema host. Para aplicações Docker que foram configuradas para serem acessadas via proxy, o sinalizador --internal é algo que pode ser usado o tempo todo.

A opção --cap-drop=ALL reduzirá os recursos do Linux ao mínimo, o que muitos aplicativos não exigem. Podemos combinar esta opção com outras como --cap-add=NET_BIND_SERVICE para vincular um serviço a uma porta específica sem exigir permissões de root.

5. Auditorias de segurança com Docker Bench Security

Os desenvolvedores do Docker sabem que é um aplicativo complexo com muitas facetas a serem protegidas. É demais esperar que cada administrador Linux se familiarize suficientemente com o Docker para verificar cada configuração em busca de possíveis falhas de segurança.

É por isso que existe o Docker Bench Security, que vem do Docker GitHub oficial e realizará uma auditoria de segurança na configuração do seu Docker. Essencialmente, ele executa um conjunto de scripts Bash que realizam uma variedade de verificações na segurança do seu ambiente e, em seguida, informa as ameaças encontradas e as medidas que podem ser tomadas para fortalecer sua configuração.

É tão simples quanto clonar o repositório e executar o script:


$ git clone https://github.com/docker/docker-bench-security.git
$ cd docker-bench-security
$ sudo sh docker-bench-security.sh

Considerações finais

Neste tutorial, examinamos uma lista das cinco principais práticas recomendadas para proteger o Docker em um sistema Linux. Embora o Docker seja uma tecnologia relativamente nova, descobrimos que muitas de suas práticas recomendadas são semelhantes às empregadas em sistemas Linux tradicionais, como limitação de recursos, ferramentas de auditoria de segurança, instalação de atualizações e uso de software confiável. Usar o Docker, por si só, junto com essas recomendações principais, ajudará a manter seus aplicativos seguros, minimizando a superfície de ataque mais do que uma implantação tradicional jamais conseguiria.