Explorando a (ausente) segurança de instalações típicas do Docker e Kubernetes

Explorando a (ausente) segurança de instalações típicas do Docker e Kubernetes
Eu trabalho na área de TI há mais de 20 anos, mas, de alguma forma, nunca cheguei a mexer com contêineres. Na teoria, eu entendia como eles funcionam e como estão estruturados. Mas como nunca tinha tido experiência prática com eles — não tinha certeza de como exatamente as engrenagens giram sob o capô.

Além disso, eu não tinha ideia de como funcionava a segurança deles. Mas, novamente, a teoria soa bonita e a velha canção "com o aumento da segurança, a usabilidade cai" ficou na minha cabeça. Então pensei que, já que é tão fácil trabalhar com contêineres, a segurança deve ser muito baixa. Acabei descobrindo que estava certo.

Para um início rápido, me inscrevi em um curso Black Hat em 2020 chamado "Da Lama ao Pódio: Penetração e Proteção de Ambientes Docker Swarm e Kubernetes».

O curso, conduzido por Sheila A. Berta e Sol Ozzan, começou imediatamente com uma descrição de como os contêineres Docker funcionam, bem como do caminho que eles seguem ao serem implementados no Kubernetes. Era uma aula completamente prática — os alunos deveriam instalar o Docker e o microk8s em suas máquinas antes das aulas — uma ótima maneira de ver a interação das ferramentas entre si, identificar vulnerabilidades e, o mais importante, tentar bloqueá-las.

Infelizmente, embora os cursos prometessem que eu viraria 'príncipe' em dois dias, eu sentia que tudo estava apenas começando e ainda tinha muito a aprender.

Explorando a (ausente) segurança de instalações típicas do Docker e Kubernetes

Antes de mergulhar nas minhas observações, é importante explicar o que é um contêiner. No mundo do desenvolvimento, é comum que o código escrito na sua máquina pessoal funcione perfeitamente, mas ao tentar executá-lo em algum servidor, simplesmente não funcione. Os contêineres tentam superar esse problema fornecendo máquinas autônomas que você pode facilmente transportar de um servidor para outro, sabendo que sempre funcionarão. Como o nome sugere, eles contêm o código, bibliotecas e outros softwares necessários para a operação. O Kubernetes, por outro lado, é uma plataforma de orquestração para contêineres. Basicamente, com ele é possível gerenciar perfeitamente centenas ou milhares de diferentes contêineres.

Abaixo estão algumas das minhas conclusões do ponto de vista da equipe vermelha e da equipe azul.

Equipe Vermelha

A maior parte do conteúdo dos contêineres é executado sob o root: isso significa que, se o contêiner for comprometido, você obterá acesso total ao contêiner. Isso torna os passos subsequentes significativamente mais fáceis.

Montar docker.sock dentro do contêiner é perigoso: se você obteve root dentro do contêiner e também instalou o Docker dentro do contêiner que possui o socket Docker (\/var\/run\/docker.sock), você tem a possibilidade de explorar todo o cluster, incluindo acesso a qualquer outro contêiner. Esse tipo de acesso não pode ser prevenido nem por isolamento de rede nem de outras maneiras.

Variáveis de ambiente muitas vezes contêm dados confidenciais: na maioria dos casos, as pessoas enviam senhas para o contêiner usando variáveis de ambiente comuns. Então, se você tiver acesso à conta, poderá espiar essas variáveis de ambiente para ampliar seus privilégios mais tarde.

Docker API pode fornecer uma série de informações: A Docker API, quando configurada por padrão, funciona sem autorização e pode expor uma série de informações. Usando o Shodan, é fácil encontrar uma lista de portas abertas, obter detalhes sobre o cluster — e seguir para sua captura total. A TrendMicro escreveu um artigo muito interessante.

Time azul

Não execute o conteúdo dos contêineres como root: apesar de que executar como root seja mais fácil, você não deve fazer isso. Em vez disso, execute aplicativos com privilégios reduzidos, atribuindo um uid ou usando o parâmetro --user ao trabalhar com CLI, ou especificando USER no Dockerfile.

Não permita a instalação de programas nos contêineres: quase todo ataque começa com a instalação de algo. Desde nmap até ifconfig e o próprio Docker (dentro do contêiner), a instalação de qualquer coisa no contêiner foi uma prática comum. Por essa razão, é sempre necessário bloquear todas as portas não utilizadas. Isso também ajuda a prevenir a transferência de comandos de controle durante a contaminação da sua máquina. Além de prevenir a instalação de programas, é fundamental garantir que no contêiner esteja instalado o menor número possível de aplicativos necessários para realizar a tarefa.

Proteja o docker.sock: ele deve ser protegido, pois através desse socket é processada a comunicação entre o contêiner e o cluster. Como não quero entrar em detalhes neste artigo, leia uma nota da Docker, sobre o que pode acontecer, assim como como bloquear tudo isso.

Use segredos do Docker em vez de variáveis de ambiente: Os segredos estão disponíveis desde cerca de 2017. Embora isso não seja seguro, ainda é melhor do que usar variáveis de ambiente para passar dados sensíveis no contêiner.

Se o artigo despertou seu interesse por contêineres, é bastante fácil instalar o Docker ou o microk8s (uma versão reduzida do Kubernetes). Aqui Existem instruções para instalar o Docker no Linux e no MacOS, e aqui instruções para instalar o microk8s para Windows, Linux e MacOS.

Após a instalação, você pode seguir este guia de início rápido da Docker, uma opção semelhante é oferecida também para microk8s.

Se você deseja ou precisa fazer um curso abrangente sobre Docker, onde palestrantes praticantes abordam todas as suas ferramentas: desde abstrações básicas até opções de rede, nuances de trabalho com diferentes sistemas operacionais e linguagens de programação, experimente "Curso em vídeo sobre Docker". Você se familiarizará com a tecnologia e entenderá onde e como usar melhor o Docker. E ainda obterá casos de melhores práticas - é melhor aprender com segurança e com o apoio de profissionais a partir de histórias sobre erros do que pessoalmente cometer os erros com garras afiadas.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster