Introdução
Segurança no Docker
A segurança é uma preocupação fundamental em ambientes de containers, uma vez que esses ambientes são dinâmicos e frequentemente compartilhados entre diversas aplicações e serviços. A seguir, abordaremos os principais aspectos e ferramentas que podem ser usadas para garantir um ambiente Docker seguro, incluindo escaneamento de vulnerabilidades, assinatura de imagens, controle de permissões e boas práticas para construção de imagens.
1. Imagens Distroless
As imagens Distroless são uma abordagem minimalista para a criação de containers, onde apenas os binários necessários para a execução da aplicação são incluídos, sem componentes extras do sistema operacional, como gerenciadores de pacotes ou shells. Isso reduz significativamente a superfície de ataque.
Benefícios:
Menor superfície de ataque: Sem ferramentas extras, como
bash
,wget
ou gerenciadores de pacotes, o risco de exploração de vulnerabilidades é reduzido.Tamanho reduzido: Menores que as imagens tradicionais, o que acelera o tempo de download e startup dos containers.
Menos dependências: Menos pacotes e bibliotecas significa menos vetores de vulnerabilidade.
Exemplo de uso com uma imagem Distroless:
Nesse exemplo, apenas o binário da aplicação é copiado para a imagem e nenhuma outra ferramenta ou pacote é incluído, mantendo o container extremamente leve e seguro.
2. Linux Capabilities
No Docker, os containers são isolados, mas ainda compartilham o kernel do sistema operacional host. As Linux Capabilities permitem controlar os privilégios concedidos ao container no host. Por padrão, os containers têm privilégios limitados, mas é possível ajustá-los conforme necessário.
Principais capacidades:
CAP_NET_RAW
: Permite a criação de pacotes de rede personalizados. Remover essa capacidade melhora a segurança do container.CAP_SYS_ADMIN
: Uma das capacidades mais poderosas, que deve ser evitada, pois concede muitos privilégios sobre o sistema.CAP_CHOWN
,CAP_SETUID
,CAP_SETGID
: Permitem manipular permissões de usuários e grupos.
Exemplo de uso para restringir capacidades:
Nesse exemplo, o container não poderá criar pacotes de rede brutos ou acessar privilégios administrativos do sistema, reforçando sua segurança.
3. Docker Scout
O Docker Scout é uma ferramenta de análise de segurança que oferece insights detalhados sobre a segurança das imagens Docker. Ele verifica se as imagens contêm vulnerabilidades conhecidas em seus pacotes e dependências.
Funcionalidades:
Escaneia vulnerabilidades em pacotes de sistema e bibliotecas.
Sugere atualizações de imagens que corrigem vulnerabilidades.
Oferece um relatório detalhado com os riscos identificados e recomendações.
Exemplo de uso com Docker Scout:
Esse comando escaneia a imagem
simulador-caos:v2
em busca de vulnerabilidades conhecidas e fornece um relatório.
4. Trivy
Funcionalidades:
Detecta vulnerabilidades em imagens Docker, incluindo dependências do sistema operacional e bibliotecas.
Verifica configurações inseguras, como permissões de arquivos e exposições de portas.
Escaneia código-fonte e arquivos de configuração para práticas inseguras.
Exemplo de uso com Trivy:
Esse comando escaneia a imagem
simulador-caos:v2
em busca de vulnerabilidades e gera um relatório detalhado sobre possíveis riscos.
5. Cosign
Funcionalidades:
Assinatura de imagens: Gera uma assinatura digital que garante a integridade e autenticidade da imagem.
Verificação de assinaturas: Confirma que a imagem não foi alterada após a assinatura.
Integração com repositórios de containers e ferramentas CI/CD.
Exemplo de uso com Cosign:
No primeiro comando, a imagem é assinada com uma chave privada. No segundo comando, a assinatura da imagem é verificada usando a chave pública correspondente.
Benefícios de usar Cosign:
Autenticidade garantida: A imagem é garantida como sendo proveniente de uma fonte confiável.
Integridade: Garante que a imagem não foi modificada ou corrompida após a criação.
6. Assinatura de Imagens Docker
Assinar imagens Docker é uma prática recomendada para garantir que a imagem não foi alterada desde que foi criada e publicada. A assinatura digital permite que você verifique a autenticidade e a integridade da imagem antes de usá-la.
Docker Content Trust (DCT): O Docker oferece suporte para assinatura de imagens por meio do Docker Content Trust (DCT), que usa chaves criptográficas para assinar e verificar imagens.
Exemplo de assinatura de imagem com Docker Content Trust:
Com
DOCKER_CONTENT_TRUST
habilitado, a imagem será assinada automaticamente ao ser enviada para o repositório. Da mesma forma, ao fazer opull
de uma imagem, sua assinatura será verificada.
7. Privilégios de Execução em Containers
A segurança também está relacionada a como os containers são executados. Evitar executar containers como root é uma prática recomendada, pois reduzir os privilégios no container limita os danos caso haja uma vulnerabilidade explorável.
Exemplo de Dockerfile com usuário não-root:
Neste Dockerfile, um usuário
appuser
é criado e o container é executado com esse usuário, evitando a execução como root.
Conclusão
A segurança no Docker envolve uma combinação de práticas e ferramentas para proteger seu ambiente, desde a construção das imagens até a execução dos containers. Ferramentas como Docker Scout, Trivy, Cosign e o uso de imagens Distroless ajudam a reduzir riscos e garantir a integridade do ambiente. Além disso, o controle de capacidades Linux e a assinatura de imagens são medidas cruciais para mitigar vulnerabilidades e assegurar que seus containers sejam confiáveis e seguros.
Implementar uma abordagem de segurança desde o início, incluindo o escaneamento regular de vulnerabilidades e o controle rigoroso de permissões, é fundamental para proteger qualquer infraestrutura baseada em containers.
Laboratório
Projeto:
Last updated