Avaliando a Segurança em Ambientes Kubernetes com Kubeaudit

Avaliando a Segurança em Ambientes Kubernetes com Kubeaudit

Essa é a segunda parte falando de segurança em ambientes Kubernetes. Caso você ainda não tenha visto a Parte 1, fique a vontade para clicar no link abaixo:

No post anterior, falamos de uma avaliação mais geral, focada no cluster inteiro e com uma base de avaliação nas instruções de boas práticas da CIS (Center for Internet Security).

Já nesse post, vamos ser um pouco mais específicos e entender se conseguimos avaliar os Manifests do Kubernetes.

Esses manifests nos permite descrever, em um arquivo YAML, qual vai ser a estrutura da nossa aplicação no cluster Kubernetes e, além disso, faz que esse arquivo seja uma “linguagem” para os mecanismos do Kubernetes entenderem e criarem os objetos que serão necessários para sustentar uma aplicação.

O objeto que vamos focar nesse post é o Deployment, que é o objeto mais comum de ser usado no Kubernetes. É com o deployment que podemos chamar a imagem de container da minha aplicação, relacionar os environments de configuração e associar os volumes corretos.

E devido esse conjunto de estruturas, é importante que a gente saiba quando um Deployment está ou não dentro dos padrões de segurança, e para isso a melhor maneira é auditá-lo.

Mas como fazer essas auditorias? Para isso vamos as seguintes ferramentas Open Source:

  • Minikube: Formas mais simples de ter um cluster Kubernetes básico focado para laboratório.
  • Kubaudit: Ferramenta focada em auditória de manifests e do cluster Kubernetes.

Preparando o Laboratório

Para que todos possam fazer esse laboratório, vamos utilizar o Minikube. O Minikube tem como propósito criar um ambiente de desenvolvimento ou de testes, virtualizado de forma simples e rápida.

Já que o foco é a parte de Segurança, vamos seguir os passos de instalação do Minikube e Kubectl mencionados no post abaixo:

Então, após garantir a instalação do Minikube e o kubectl (binário para controlar os recursos do K8S) vamos fazer os seguintes comandos:

minikube start
kubectl get node

O resultado esperado é semelhante ao seguinte:

Com isso, já temos uma laboratório simples para que nossa avaliação da segurança seja efetiva.

Kubeaudit

Agora, sim! Apresento-vos o kubeaudit. Essa é uma ferramenta open source mantida pela Shopify com o objetivo de conseguir auditar ambientes de Kubernetes fazendo validação de vários pontos focados para a segurança.

Com o kubeaudit é possível avaliar os arquivos ou aplicações que estão em execução no Kubernetes, fazendo a avaliação se estão corretamente configurado. Suas validações vão desde análise de uso abusivo de elevação de privilégio, de capabilities, analise de permissões em volumes entre outros.

Seu uso é bem simples, já que ele é apenas um binário. Sendo assim para instalá-lo, basta acessar a última release no repositório do projeto (https://github.com/Shopify/kubeaudit/releases) escolher o sistema/arquitetura que melhor se adequar a você. Se você usa Linux, os passos são:

sudo wget https://github.com/Shopify/kubeaudit/releases/download/0.16.0/kubeaudit_0.16.0_linux_amd64.tar.gz -O /tmp/kubeaudit.tar.gz
cd /tmp/
tar -xf kubeaudit.tar.gz
sudo mv kubeaudit /usr/bin/
kubeaudit version

O mais interessante é que o Kubeaudit trabalha em 3 modos, são eles:

  • Manifest Mode: Esse é o modo de avaliação de um arquivo de manifest. Nesse caso usamos o parâmetro -f para definir o arquivo e executar o kubeaudit no manifest mode.
  • Cluster Mode: Identifica se está sendo executar em um cluster. Caso esteja, faz a auditoria os recursos do cluster.
  • Local Mode: Faz a conexão a um cluster usando um kubeconfig local. Utiliza por padrão o ~/.kube/config mas pode esse caminho pode ser alterado com a opção -c

Vamos então ver na prática como usar o kubeaudit.

Execução Prática

O minikube já cria um ~/.kube/config para que possamos fazer os testes. Sendo assim, vamos executar o kubeaudit em Local Mode e com isso, podemos executar uma auditoria em busca de pods que estão sendo executados no cluster e que permitem escalar privilégios, podemos fazer a auditoria assim:

kubeadmin privesc

Para saber todos os tipos de auditoria que o kubeaudit faz execute kubeaudit –help

O resultado deve ser semelhante a imagem abaixo:

Reparem que a saída do comando mostra qual é o tipo do Objeto, o seu nome e o namespace que ele está alocado. E além disse apresenta na mensagem que a diretiva allowPrivilegeEscalation deviria ter sido configurada como false, sendo que isso resolveria o problema.

Outra forma, bem simples também, de usar o kubeadmin é no modo Manifest. Para isso, vamos usar um manifest de Deployment de exemplo Github do Kubernetes, com os seguintes comandos:

wget https://raw.githubusercontent.com/kubernetes/examples/master/guestbook/frontend-deployment.yaml
kubeaudit all -f fronted-deployment.yaml

Vocês podem perceber que dessa vez passamos o valor all, isso permite que o kubeaudit realize todas as auditorias possíveis no arquivo. E como podemos ver, ele está em Manifest Mode apenas porque definimos o arquivo de manifest com a opção -f

Sendo assim, o resultado da auditoria deve ser semelhante a imagem abaixo:

Dessa vez o resultado é maior, mostrando desde problemas (identificado por [Error]) até alguns warnings. Podemos identificar que esse manifest, por exemplo, não tem o parâmetro privileded definido no manifest (PrivilegedNil) ou mesmo, algo mais grave, não há nenhum configuração de Security Context (CapabilityOrSecurityContextMissing).

Só essa saída é muito importante, porque dá um norte para as equipes avaliarem os problemas e fazerem as correções. Mas um das funções mais interessantes do kubeaudit é de fazer a correção automática dos problemas. Com isso ele usa o recurso de autofix,  para usá-lo siga os passo abaixo:

kubeaudit autofix -f frontend-deployment.yaml -o frontend-fix.yaml
kubeaudit all -f frontend-fix.yaml

Nesse passo, perceba que estamos criando um novo arquivo com a correção, assim você pode avaliar melhor as diferenças dos arquivos, porém caso a opção -o seja omitida ele executa os ajustes dos problemas diretamente no arquivo original.

Após os passos, você poderá ver que todos os problemas foram resolvidos e que sobrou apenas uma correção de LimitNotSet, que deve ser corrigida manualmente adicionando um limit de uso de recursos:

Conclusão

O kubeaudit é uma ótima ferramentas para complementar a validação de segurança de um cluster de Kubernetes. É prática e simples de ser manipulada, o que já ajuda na sua implementação e permite que pipelines de entrega de produtos fiquem cada vez mais robustas e façam todas as validações necessárias do inicio ao fim.

Além disso, o aumento da automação, seja para testar ou para corrigir os problemas, permite que as equipes possam focar em melhorar cada vez mais os seus fluxos de entrega.

Mas lembre-se, toda vez que falamos de segurança, mesmo que tenhamos inúmeras automações, ainda é necessário ter um olha critico sobre essas ações para que a cobertura na mitigação de problemas seja a maior possível.

Espero que você tenham gostado! E até a próxima!

Anterior Como garantir que seu site esteja sempre online com ferramentas de monitoramento
Próxima 4Linux se une ao Google Cloud: Infraestrutura open source na nuvem

About author

Yago Ésquines
Yago Ésquines 5 posts

Yago Ésquines, atua como Coordenador de TI em Software Livre, formado em Ciência da Computação pela Universidade Paulista (UNIP) e em Segurança da Informação pela FATEC São Caetano. Atua com foco em Linux, Automação, DevOps e DevSecOps, possuindo mais de 10 anos de experiência profissional em Tecnologia da Informação. Detém expertise como instrutor de cursos voltados ao Sistema Operacional Linux, Infraestrutura Ágil, DevSecOps e Kubernetes, além ser Certificado Linux Engineer(LPIC-2), CKA (Certified Kubernetes Administrator) e DevOps Essentials.

View all posts by this author →

Você pode gostar também

Banco de Dados

Entenda o Snapshot: a ferramenta de backup que não para seu serviço

Atualmente, o termo snapshot tem se popularizado por sua utilidade nas mais variadas Clouds. Este snapshot em questão funciona na sua casa, na sua infraestrutura local e até mesmo na

Infraestrutura TI

Maximize o poder do seu servidor com Hot-Plug no Linux

Dentro do Linux é possível realizar o hot-plug de CPU, mas o que é “hot-plug“? Hot-plug é um mecanismo de “troca de hardware à quente”, ou seja, enquanto o servidor ainda

Containers

Dominando o Docker Swarm: Implantação de Stack de Serviços em Cluster

Swarm é uma ferramenta de cluster nativa para Docker, que utiliza a API padrão. Ou seja, qualquer ferramenta que fizer uso da API Docker, poderá usar Swarm para escalar contêineres,