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

DevOps

Como modificar recursos existentes com Terraform na Google Cloud

Vimos no post anterior uma introdução ao Terraform e como criar de forma prática e simples uma máquina virtual na cloud da Google – GCP, porém não vimos como realizar

Desenvolvimento

Descubra as vantagens do MongoDB para o desenvolvimento Web

Bancos de dados são a base dos projetos de desenvolvimento Web. Muitos desenvolvedores estão voltando sua atenção para o MongoDB, um banco de dados sem esquema que é popular para uma

DevOps

Descubra como otimizar seu cluster Kubernetes com o plugin de rede Calico

Olá mundo DevOps! Nesse post irei mostrar como se comporta um cluster Kubernetes quando trabalhamos com nós de trabalho divididos em várias instâncias cloud como Amazon Web Services (AWS), Google