Segurança para contêineres do Docker

Nota perev. : O tema de segurança do Docker é talvez um dos eternos no mundo de TI de hoje. Portanto, sem maiores explicações, apresentamos a tradução da próxima seleção de recomendações relevantes. Se você já se interessou por esse problema, muitos deles lhe serão familiares. E complementamos a seleção em si com uma lista de utilitários úteis e vários recursos para um estudo mais aprofundado da questão.



Aqui está um guia de segurança do Docker. O feedback é bem-vindo, pois é uma coleção de trechos de vários recursos, e nem todos foram cuidadosamente verificados. As recomendações estão divididas em três categorias:

  1. Medidas necessárias dentro do sistema operacional host ao trabalhar com o Docker;
  2. Instruções relacionadas ao arquivo de configuração da montagem e criação de contêineres;
  3. Ferramentas de segurança que podem ser integradas a recursos específicos do Docker Enterprise.

Uma variedade de recursos se tornou a base da liderança, muitos dos quais estão listados abaixo. Não pode ser chamado de exaustivo, mas abrange todos os princípios. Informações adicionais podem ser encontradas na descrição dos testes CIS (o link é fornecido no final deste manual), bem como na documentação do Docker.

Referência de segurança do Docker


O Docker Bench for Security verifica automaticamente o Docker quanto à conformidade com as práticas recomendadas mais comuns. O script é um bom teste de segurança heurística, mas não deve ser considerado como uma ferramenta de análise abrangente.

SO Host


Obviamente, o contêiner do Docker não poderá ser protegido se o próprio sistema host não estiver protegido. Portanto, você deve seguir as melhores práticas no campo da segurança do sistema operacional. Além disso, seria prudente conduzir uma análise de vulnerabilidade além das recomendações a seguir.

Regras de auditoria


Crie e use regras de auditoria para arquivos associados ao Docker usando auditctl . Por exemplo, você pode adicionar -w /usr/bin/dockerd -k docker ao /etc/audit.rules e reiniciar o serviço de auditoria.

Modo FIPS


A ativação do modo FIPS força as ferramentas criptográficas a mudarem para os algoritmos introduzidos no FIPS (American Federal Information Processing Standards - aprox. Transl.) , Cumprindo assim os padrões e requisitos federais e do setor. Se o sistema operacional host suportar o modo FIPS, você poderá ativá-lo executando os seguintes comandos:

 sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg && reboot 

Você também deve ativar o FIPS no Docker Engine:

 mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]\n Environment=\"DOCKER_FIPS=1\"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart docker 

Consulte a documentação do Docker e da Red Hat para obter mais informações.

Segredos do Docker


Dados confidenciais devem ser mantidos em segredo. Você pode iniciar o serviço correspondente usando o comando docker service create:

 docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx 

Veja a documentação para detalhes.

Arquivo de configuração do Docker


As seguintes configurações podem ser adicionadas ao /etc/docker/daemon.json configuração /etc/docker/daemon.json :

  • "icc":false - desativa a troca de dados entre contêineres para evitar vazamento desnecessário de informações.
  • log-level: "info" - captura todos os logs, exceto a depuração.
  •  { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } } 

    - conecta o log remoto, os encaminha para o endereço especificado. Funciona apenas se o daemon syslog estiver em execução. TCP e UDP são aceitos como opções. A conexão para cada contêiner específico também é possível. Para fazer isso, um sinalizador especial é definido ao iniciar o Docker ( --log-opt syslog-address=ADDRESS ).
  • "userns-remap": "Your_User" - evita a escalação de privilégios, isolando o espaço para nome de um usuário específico.

Segurança de transporte


Somente usuários com acesso às credenciais do cliente TLS devem poder se conectar ao daemon do Docker (se o acesso remoto for necessário).

Plug-ins de autorização


Decida quais usuários têm permissão para executar quais comandos e crie o plug-in de autorização apropriado para o Docker. Em seguida, execute o daemon do Docker e adicione o plugin a ele:

 dockerd --authorization-plugin=PLUGIN_ID 

Para saber mais sobre como criar plug-ins de autorização, consulte a documentação .

Opções de daemon


O daemon do Docker trabalha com um conjunto de parâmetros padrão.

  • --live-restore - essa opção ajuda a reduzir o tempo de inatividade do contêiner durante o encerramento ou reinicialização do sistema. Torna-se mais fácil corrigir ou atualizá-los com tempo de inatividade mínimo;
  • --userland-proxy=false - quando NATs hairpin estão disponíveis ou usados, o proxy no espaço do usuário se torna um serviço redundante, o que aumenta apenas o número de possíveis vetores de ataque;
  • --no-new-privileges - impede que contêineres obtenham privilégios adicionais usando suid ou sguid;
  • --seccomp-profile /path/to/profile - se você tiver seu próprio perfil seccomp, poderá usá-lo com esse sinalizador. Saiba mais sobre o Seccomp e o Docker aqui .

Configurando contêineres e arquivos de montagem


Criação de Usuário


Certifique-se de que um usuário seja criado para o contêiner e execute-o nesse usuário (NÃO execute o contêiner na raiz).

Acesso remoto


Negar acesso remoto ao daemon. Se ainda for necessário, proteja-o com certificados.

Isolar o espaço do nome de usuário


É especialmente importante garantir que o espaço de nome de usuário no Docker esteja isolado, porque, por padrão, ele é compartilhado com o espaço de nome do host. Em alguns casos, isso pode ser usado para elevar privilégios ou mesmo sair do contêiner. Você pode isolar um espaço para nome do usuário editando o arquivo de configuração (conforme descrito acima na seção Arquivo de Configuração do Docker). Uma menção adicional deste problema é devido à sua importância.

Healthcheck


O Healthcheck (Health Check) é uma ferramenta poderosa para verificar a integridade do contêiner. Ele é configurado no Dockerfile usando a HEALTHCHECK . A verificação de integridade permite verificar se o contêiner está funcionando corretamente. No exemplo abaixo, a verificação de saúde termina com 0 se o servidor estiver em execução e 1 se "travou":

 HEALTHCHECK CMD curl --fail http://localhost || exit 1 

SELinux


Se o SELinux for suportado pelo sistema operacional host, crie ou importe uma política do SELinux e execute o Docker no modo daemon com o SELinux ativado:

 docker daemon --selinux-enable 

Nesse caso, os contêineres do Docker podem ser iniciados com configurações de segurança, por exemplo:

 docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash 

Interfaces de rede


Por padrão, o Docker escuta em todas as interfaces de rede. Como na maioria dos casos, o tráfego é esperado apenas em um deles, essa abordagem aumenta excessivamente o risco de um ataque. Portanto, ao iniciar um contêiner, você pode vincular suas portas a interfaces específicas no host:

 docker run --detach --publish 10.2.3.4:49153:80 nginx 

Versões de imagem em cache


Ao baixar imagens, verifique se o cache local corresponde ao conteúdo do repositório. Caso contrário, você poderá receber uma versão desatualizada da imagem ou uma imagem contendo vulnerabilidades.

Ponte de rede


O modelo de rede padrão, docker0 , é vulnerável a ataques como ARP-spoofing e MAC-flooding. Para resolver esse problema, crie uma ponte de rede de acordo com suas especificações, conforme descrito aqui .

Aviso de soquete do Docker


Nunca jogue um soquete do Docker dentro de um recipiente. Caso contrário, o contêiner poderá executar comandos do Docker e, portanto, se comunicar com o sistema operacional host e controlá-lo. Não faça isso.

Configurando o Docker Enterprise


Confiança no Docker


O Docker Trust permite gerar chaves que podem ser usadas para verificar a integridade criptográfica das imagens. As chaves Docker Trust podem ser usadas para assinar imagens do Docker com chaves privadas, verificadas por chaves públicas no Notary Server. Mais informações aqui . A habilitação do Docker Trust no Enterprise Engine é descrita em detalhes nesta seção da documentação .

Verificação de vulnerabilidade


O Docker Enterprise possui um scanner de vulnerabilidades embutido, que possibilita o download do banco de dados do CVE para verificar vulnerabilidades de varredura offline nas imagens. A verificação regular de imagens ajuda a torná-las mais seguras: o usuário recebe imediatamente avisos sobre vulnerabilidades encontradas. Para mais informações sobre como fazer isso, clique aqui .

Nota perev. : Também existem scanners de vulnerabilidade de código aberto nas imagens do Docker; consulte exemplos no final do artigo.

Integração LDAP e UCP


O plano de controle universal pode ser integrado ao LDAP. O resultado será um sistema de autenticação simplificado para evitar duplicação desnecessária. Leia mais sobre isso no artigo Integrar com um diretório LDAP .

Outros materiais


Para obter mais informações sobre as melhores práticas de segurança do Docker, visite docs.docker.com . Também recomendamos o download dos testes do Center for Internet Security para Docker .

Bônus do tradutor


Como complemento lógico deste artigo, estamos publicando uma lista das 10 ferramentas populares de segurança de código aberto no Docker . Foi emprestado de outro artigo (de autoria de Bill Doerrfeld, do Doerrfeld.io).

Nota : Leia mais sobre muitos dos projetos mencionados aqui no artigo “ 33+ Ferramentas de Segurança Kubernetes ”.

  1. O Docker Bench for Security é um script já mencionado no início do artigo que verifica os contêineres do Docker quanto à conformidade com práticas comuns de segurança.

  2. Clair é provavelmente o utilitário mais popular para análise estática de vulnerabilidades em um contêiner. Ele usa vários bancos de dados de vulnerabilidade do CVE (incluindo rastreadores das principais distribuições Linux, como Red Hat, Debian, Ubuntu). Ele oferece uma API para desenvolvedores e uma oportunidade simples de expandir funções (através da adição de "drivers"). É usado no popular registro público de imagens de contêiner (semelhante ao Docker Hub) - Quay.io.
  3. O Cilium é uma solução de segurança de rede no nível do kernel baseada na tecnologia de filtragem de pacotes de rede BPF.
  4. O Anchore é um utilitário baseado em CVE para analisar o conteúdo da imagem em busca de vulnerabilidades de segurança. Além disso, permite aplicar políticas personalizadas (com base em vários dados, incluindo listas brancas / negras, conteúdo de arquivos etc.) para avaliar a segurança dos contêineres.
  5. O OpenSCAP Workbench é um ecossistema inteiro para criar e manter políticas de segurança entre plataformas. Para verificar contêineres, oferece o utilitário oscap-docker .
  6. O Dagda é um utilitário para verificar os contêineres do Docker quanto a vulnerabilidades, cavalos de Troia, vírus e malware. Os bancos de dados do CVE incluem verificações de dependência do OWASP, banco de dados Oval Red Hat, repositório de exploração do Exploit Database.
  7. O Notary é uma estrutura para assinar imagens do Docker, originalmente criada pela Docker Inc (e depois entregue ao CNCF para desenvolvimento). Seu uso permite delegar funções e distribuir responsabilidades entre contêineres, além de verificar a integridade criptográfica das imagens.
  8. Grafaes é uma API de metadados projetada para gerenciar políticas de segurança internas. Como exemplo, ele melhora o desempenho dos scanners de segurança de contêineres. O Shopify usa essa API para gerenciar metadados em suas 500.000 imagens.
  9. Sysdig Falco - um utilitário para o Kubernetes que monitora o comportamento do sistema: atividade em contêineres, em hosts, na rede. Permite configurar verificações contínuas na infraestrutura, detectar anomalias e enviar alertas para qualquer chamada do sistema Linux.
  10. O Banyanops Collector é outra ferramenta para análise de imagem estática de contêineres do Docker. Permite "olhar" nos arquivos de imagem, coletando os dados necessários, aplicando as políticas necessárias, etc.

Outra boa seleção de dicas práticas para tornar o Docker mais seguro pode ser encontrada neste artigo do Aqua Security. Muitas de suas dicas se sobrepõem às já mencionadas acima, mas existem outras. Por exemplo, os autores propõem a atividade de monitoramento em contêineres e indicam o que procurar ao usar o Docker Swarm.

Para aqueles que desejam mergulhar neste tópico com mais detalhes no ano passado, foi publicado o livro “ Docker Security: Quick Reference , cujos fragmentos estão disponíveis gratuitamente aqui .

Por fim, para familiarizar-se com alguns aspectos da segurança do Docker: perfis Seccomp e uso dos recursos do kernel Linux em contêineres - você pode realizar o trabalho de laboratório correspondente no recurso Play with Docker * - consulte a seção Segurança.



* Conversamos sobre esse recurso há dois anos e, em novembro de 2018, aconteceu uma história muito interessante (do ponto de vista de segurança). Em resumo, especialistas da CyberArk Software Ltd. conseguiu quebrá-lo: para conseguir a capacidade de executar comandos fora dos contêineres, ou seja, no sistema host. Uma ótima ilustração dos problemas de segurança no Docker, certo? Leia todos os detalhes do que aconteceu aqui .

PS do tradutor


Leia também em nosso blog:

Source: https://habr.com/ru/post/pt474012/


All Articles