Nota do tradutor.: O tema da segurança do Docker é, sem dúvida, uma questão eterna no mundo da TI moderna. Portanto, sem mais explicações, apresentamos a tradução de mais uma seleção de recomendações pertinentes. Se você já se interessou por esse assunto, muitos delas serão familiares. Também adicionamos à seleção uma lista de utilitários úteis e alguns recursos para estudo adicional.

Apresento à sua atenção um guia sobre a segurança do Docker. Feedback é bem-vindo, pois este é mais um apanhado de trechos de diferentes recursos, e nem todos foram submetidos a uma verificação rigorosa. As recomendações são divididas em três categorias:
- Medidas necessárias dentro do sistema operacional do host ao trabalhar com Docker;
- Instruções relativas ao arquivo de configuração de construção e criação de containers;
- Ferramentas de segurança que podem se integrar a recursos específicos do Docker Enterprise.
A base para o guia foram diversos recursos, muitos dos quais estão listados abaixo. Não pode ser considerado exaustivo, no entanto, cobre todos os fundamentos. Informações adicionais podem ser encontradas na descrição dos testes CIS (link fornecido ao final deste guia), bem como na documentação do Docker.
Docker Security Benchmark
verifica automaticamente seu Docker quanto à conformidade com as melhores práticas mais comuns. O script serve como um bom teste heurístico de segurança, porém não deve ser considerado uma ferramenta de análise abrangente.
Sistema operacional do host
É evidente que um container Docker não pode ser seguro se o próprio sistema host não estiver protegido. Portanto, é necessário seguir as melhores práticas em segurança de sistemas operacionais. Além disso, seria prudente realizar uma análise de vulnerabilidades além das recomendações a seguir.
Regras de auditoria
Crie e utilize regras de auditoria para arquivos relacionados ao Docker usando auditctl. Por exemplo, você pode adicionar -w /usr/bin/dockerd -k docker para /etc/audit.rules e reiniciar o serviço de auditoria.
Modo FIPS
Ativar o modo FIPS faz com que as ferramentas criptográficas mudem para algoritmos incluídos no FIPS (padrões de — nota do tradutor.), correspondendo, assim, às normas e requisitos federais e setoriais. Se o sistema operacional do host suportar o modo FIPS, ele pode ser ativado 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 && rebootTambém é necessário habilitar 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 dockerPara mais informações, consulte a documentação e .
Docker Secrets
Os dados confidenciais devem ser armazenados como segredos. O serviço correspondente pode ser iniciado com 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 nginxMais detalhes podem ser encontrados em .
Arquivo de configuração do Docker
As seguintes configurações podem ser adicionadas ao arquivo de configuração /etc/docker/daemon.json:
-
"icc":false— desativa a troca de dados entre contêineres, para evitar vazamentos de informações desnecessários. -
log-level: "info"— captura todos os logs, exceto os de depuração. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }— ativa a coleta remota de logs, enviando-os para o endereço especificado. Funciona somente se o daemon syslog estiver em execução. Aceita opções TCP e UDP. Conexão específica para cada contêiner também é possível. Para isso, um sinalizador especial deve ser definido ao iniciar o Docker (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— previne a elevação de privilégios (privilege escalation), isolando o espaço de nomes para um usuário específico.
Segurança do nível de transporte
O acesso ao daemon Docker (se o acesso remoto for necessário) deve ser restrito apenas a usuários com credenciais de cliente TLS.
Plugins de autorização
Defina quais usuários têm permissão para executar quais comandos e crie um plugin de autorização correspondente para o Docker. Em seguida, inicie o daemon Docker e adicione o plugin:
dockerd --authorization-plugin=PLUGIN_IDPara mais informações sobre a criação de plugins de autorização, consulte .
Opções do daemon
O daemon Docker opera com um conjunto de opções padrão.
-
--live-restore— esta opção ajuda a reduzir o tempo de inatividade dos contêineres durante o desligamento ou reinício do sistema. Facilita a aplicação de patches ou atualizações com parada mínima; -
--userland-proxy=false— quando hairpin NATs estão disponíveis ou em uso, o proxy no espaço do usuário torna-se um serviço redundante, que apenas aumenta o número de vetores de ataque possíveis; -
--no-new-privileges— impede que os contêineres adquiram privilégios adicionais através de suid ou sguid; -
--seccomp-profile /path/to/profile— se você possui seu próprio perfil seccomp, pode aplicá-lo usando esta flag. Saiba mais sobre Seccomp e Docker .
Configuração de contêineres e arquivos de build
Criando usuário
Certifique-se de que um usuário foi criado para o contêiner e execute-o sob esse usuário (NÃO execute o contêiner como root).
Acesso remoto
Proíba o acesso remoto ao daemon. Se isso for necessário, proteja-o com certificados.
Isolar o namespace de usuário
É especialmente importante garantir que o namespace de usuário no Docker esteja isolado, uma vez que, por padrão, ele é compartilhado com o namespace do host. Em alguns casos, isso pode ser explorado para aumentar privilégios ou até mesmo para sair do contêiner. O espaço de nome do usuário pode ser isolado editando o arquivo de configuração (como descrito acima na seção 'Arquivo de configuração do Docker'). A menção adicional desse problema aqui se deve à sua importância.
Healthchecks
O healthcheck (verificação de saúde) é uma ferramenta poderosa que permite monitorar a integridade do contêiner. Ele é configurado no Dockerfile usando a instrução HEALTHCHECK. Os healthchecks garantem que o contêiner esteja funcionando corretamente. No exemplo abaixo, a verificação de saúde retorna 0 se o servidor estiver funcionando e 1 se ele 'falhar':
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Se o SELinux for suportado pelo sistema operacional do host, crie ou importe uma política SELinux e execute o Docker no modo daemon com o SELinux ativado:
docker daemon --selinux-enableNesse caso, os contêineres Docker podem ser executados com opções de segurança, por exemplo:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashInterfaces de rede
Por padrão, o Docker escuta todas as interfaces de rede. Como na maioria dos casos o tráfego é esperado apenas em uma delas, essa abordagem aumenta injustificadamente o risco de ataques. 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 nginxVersões em cache das imagens
Ao baixar imagens, certifique-se de que o cache local corresponde ao conteúdo do repositório. Caso contrário, você pode obter uma versão desatualizada da imagem ou uma imagem contendo vulnerabilidades.
Ponte de rede
Modelo de rede padrão, docker0, vulnerável a ataques de ARP-spoofing e MAC-flooding. Para resolver esse problema, crie uma ponte de rede de acordo com suas especificações, como descrito .
Aviso sobre o socket do Docker
Nunca exponha o socket do Docker dentro do contêiner. Caso contrário, o contêiner terá a capacidade de executar comandos do Docker e, consequentemente, interagir com o sistema operacional do host e controlá-lo. Não faça isso.
Configuração do Docker Enterprise
Docker Trust
O Docker Trust permite gerar chaves com as quais é possível verificar a integridade criptográfica das imagens. As chaves do Docker Trust podem ser usadas para assinar imagens com chaves privadas, que são verificadas por chaves públicas no Notary Server. Mais informações — . A ativação do Docker Trust no Enterprise Engine é descrita detalhadamente na .
Escaneamento de vulnerabilidades
O Docker Enterprise possui um scanner de vulnerabilidades integrado que permite baixar uma base de CVEs para escaneamento offline de vulnerabilidades nas imagens. A escaneamento regular das imagens ajuda a torná-las mais seguras: o usuário recebe imediatamente avisos sobre vulnerabilidades detectadas. Para saber mais sobre como fazer isso, consulte .
Nota do tradutor.: Existem também scanners de vulnerabilidades Open Source nas imagens do Docker, cujos exemplos podem ser encontrados no final do material.
Integração LDAP e UCP
O Universal Control Plane pode ser integrado ao LDAP. O resultado será um sistema de autenticação simplificado, evitando a duplicação desnecessária. Para saber mais sobre isso, leia o artigo .
Outros materiais
Mais informações sobre as melhores práticas de segurança do Docker podem ser encontradas em . Também recomendamos baixar .
Bônus do tradutor
Como um complemento lógico a este artigo, publicamos uma lista de 10 utilitários Open Source populares para segurança no Docker. Foi emprestado de (escrito por Bill Doerrfeld do Doerrfeld.io).
NB: Saiba mais sobre muitos dos projetos mencionados aqui no artigo “».
- — o script já mencionado no início do artigo que verifica se os contêineres Docker estão em conformidade com as práticas recomendadas de segurança.

- — provavelmente a ferramenta mais popular para análise estática de vulnerabilidades em contêineres. Utiliza inúmeras bases de dados de vulnerabilidades CVE (incluindo rastreadores de principais distribuições Linux, como Red Hat, Debian, Ubuntu). Oferece API para desenvolvedores e uma maneira simples de estender funcionalidades (por meio da adição de “drivers”). É utilizada no popular registro público de imagens de contêiner, Quay.io.
- — uma solução para garantir segurança de rede a nível do kernel, baseada na tecnologia de filtragem de pacotes de rede BPF.
- — uma ferramenta para analisar o conteúdo de imagens em busca de vulnerabilidades de segurança com base na CVE. Além disso, permite aplicar políticas personalizadas (com base em diferentes dados, incluindo listas brancas/negras, conteúdo de arquivos, etc.) para avaliação da segurança dos contêineres.
- — todo um ecossistema para criar e manter políticas de segurança em diferentes plataformas. Para verificação de contêineres, oferece a ferramenta
oscap-docker. - — uma ferramenta para escanear contêineres Docker em busca de vulnerabilidades, trojans, vírus e malware. Os bancos de dados CVE incluem verificações de dependências da OWASP, a base Red Hat Oval, e o repositório de exploits Exploit Database.
- — um framework para assinatura de imagens Docker, originalmente criado na Docker Inc (e depois transferido para desenvolvimento na CNCF). Seu uso permite delegar funções e distribuir responsabilidades nos contêineres, bem como verificar a integridade criptográfica das imagens.
- — API para metadados, projetada para gerenciar políticas de segurança internas. Por exemplo, permite melhorar o funcionamento dos scanners de segurança de contêineres. O Shopify utiliza essa API para gerenciar os metadados de suas 500 mil imagens.
- — uma ferramenta para Kubernetes que monitora o comportamento do sistema: atividade em contêineres, em hosts, na rede. Permite configurar verificações contínuas na infraestrutura, detecção de anomalias e envio de alertas para quaisquer chamadas de sistema Linux.
- — mais uma ferramenta para análise estática de imagens de contêineres Docker. Permite 'espiar' os arquivos da imagem, coletando os dados necessários, aplicando as políticas apropriadas, etc.
Outra boa seleção de recomendações práticas sobre como tornar o Docker mais seguro pode ser encontrada em a empresa Aqua Security. Muitos de seus conselhos se sobrepõem aos já mencionados acima, mas há outros. Por exemplo, os autores sugerem organizar a monitorização da atividade nos contêineres e indicam o que prestar atenção ao usar o Docker Swarm.
Para aqueles que desejam mergulhar ainda mais profundamente neste assunto, no ano passado foi publicada uma livro "»", cujos trechos estão disponíveis gratuitamente .
Finalmente, para uma experiência prática com alguns aspectos de segurança do Docker: perfis Seccomp e uso de capabilities do kernel Linux em contêineres — é possível realizar os correspondentes trabalhos laboratoriais no * — veja a seção 'Segurança'.

* Sobre este recurso, nós falamos há dois anos, e em novembro de 2018, ocorreu uma história bastante interessante (do ponto de vista de segurança) com ele. Em resumo, especialistas da CyberArk Software Ltd. conseguiram hackeá-lo: conseguiram executar comandos fora dos contêineres, ou seja, no sistema host. Uma bela ilustração do problema de segurança no Docker, não é? Para todos os detalhes do ocorrido, leia .
P.S. do tradutor
Confira também em nosso blog:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Fonte: habr.com

