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:

FROM gcr.io/distroless/base
COPY myapp /myapp
CMD ["/myapp"]
  • 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.

Docker Scout

4. Trivy

O Trivy é uma ferramenta amplamente utilizada para escanear vulnerabilidades de segurança em containers, código-fonte e outras infraestruturas. Ele verifica vulnerabilidades em sistemas operacionais, bibliotecas de aplicações e configurações inseguras em containers.

  • 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.

Trivy

5. Cosign

O Cosign é uma ferramenta usada para assinar e verificar a assinatura de imagens de containers, garantindo que a imagem foi criada por uma fonte confiável e não foi modificada durante o transporte.

  • 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 o pull 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