EN

Securing Kubernetes Clusters: Identifying and Addressing Vulnerabilities

Explore key vulnerabilities in Kubernetes clusters, such as: misconfigurations, resource misallocation, and security issues. Discover how to conduct periodic checks and implement security best practices.

Head of Product

Marianna Medeiros

O Kubernetes realmente se tornou a escolha padrão para executar cargas de trabalho conteinerizadas. O nível de automação, flexibilidade e seu modelo de configuração declarativa simplifica/diminui/remove uma enorme sobrecarga operacional ao gerenciar computação, armazenamento e rede.

Também é verdade que, devido ao ritmo acelerado de adoção do Kubernetes, ao nível de flexibilidade de configurações que ele permite, à quantidade de opções de ferramentas disponíveis e à complexidade por trás das arquiteturas de microsserviços, um novo conjunto de problemas de segurança e demanda cognitiva foi criado para as equipes que tentam acompanhar, tornando os contêineres e o Kubernetes alvos ideais para invasores.

Existem muitas vulnerabilidades que podem ser exploradas intencionalmente para obter acesso não autorizado, interromper serviços e/ou causar violações de dados. Da mesma forma, existem muitas configurações incorretas que podem causar problemas, como custos elevados e uso ineficiente de recursos.

Pesquisas recentes destacaram a prevalência de vulnerabilidades em clusters Kubernetes:

  • De acordo com uma pesquisa realizada pela RedHat em 2022, 93% dos entrevistados relataram ter passado por “pelo menos um incidente de segurança em seus ambientes Kubernetes nos últimos 12 meses”, com 53% sendo atribuídos a configurações incorretas e 38% resultantes da exploração de vulnerabilidades.

  • Um relatório da RedHat de 2023 também observa que 67% dos entrevistados relataram atrasos ou lentidão na implantação devido a preocupações de segurança com o Kubernetes, 37% sofreram perda de receita ou de clientes devido a um incidente de segurança em contêiner/Kubernetes, e 90% tiveram pelo menos um incidente de segurança nos últimos 12 meses.

Para informar um pouco mais essa conversa, vamos citar alguns exemplos muito comuns de vulnerabilidades e configurações incorretas encontradas em clusters Kubernetes, que muitas vezes passam despercebidas por falta de conhecimento ou de ferramentas que possam identificá-las corretamente:

Solicitações e limites de recursos do Pod

O Kubernetes foi projetado para alocar recursos com base em solicitações e limites definidos pelo usuário. Se essas definições estiverem incorretas, a alocação de recursos necessária para executar os contêineres de forma eficiente ficará severamente comprometida.

Se as solicitações e limites definidos forem muito altos, o Kubernetes pode alocar mais recursos do que o necessário, levando a um uso ineficiente e ao aumento de custos. Por outro lado, se forem muito baixos, pode alocar recursos insuficientes, levando a problemas de desempenho, inatividade do sistema e até perda de dados.

Portanto, é essencial defini-los corretamente para garantir que os contêineres tenham acesso aos recursos necessários para funcionar de forma eficiente e evitar problemas de desempenho, inatividade e perda de dados.

Contextos de segurança configurados incorretamente

Escalada de privilégios, acesso não autorizado, negação de serviço, perda de dados e violações de conformidade são apenas algumas das possíveis consequências de contextos de segurança configurados incorretamente.

Um contexto de segurança excessivamente permissivo em um contêiner pode fornecer aos invasores privilégios elevados dentro do contêiner ou até mesmo no nó host, permitindo que eles obtenham acesso não autorizado a recursos confidenciais, como segredos ou dados de configuração. Isso também pode deixar os contêineres vulneráveis a ataques de DoS, onde o invasor pode esgotar os recursos do contêiner ou do nó host.

Violações de conformidade, como as previstas pela HIPAA ou GDPR, também podem ocorrer devido a contextos de segurança mal configurados, levando a penalidades legais e financeiras.

Para garantir a integridade, confidencialidade e disponibilidade de dados e recursos, é crucial configurar corretamente os contextos de segurança para contêineres e pods no Kubernetes.

Imagem Docker sem Tag

Uma tag Docker fornece uma identidade exclusiva para uma imagem Docker. Se você não especificar uma tag (ou um digest) para uma imagem, o Kubernetes assumirá que você está se referindo à tag :latest. Isso pode causar confusão ao tentar rastrear qual versão da imagem está sendo executada e para que ela seja revertida corretamente.

Para resolver esse problema, é necessário associar a tag ou o digest de todas as imagens referenciadas nos recursos.

Verificar regularmente todas as imagens pode identificar e corrigir rapidamente quaisquer imagens sem tag, reduzindo o risco de vulnerabilidades e garantindo a integridade e a segurança do ambiente de infraestrutura como um todo.

Definição de Probes

Os probes são usados para verificar a integridade de um contêiner. Eles permitem que o Kubernetes detecte e se recupere de falhas automaticamente.

Definir probes em um recurso pode ajudar a garantir que o cluster esteja funcionando de maneira eficiente e eficaz.

Sem um probe de liveness (disponibilidade de execução), caso o processo do servidor web dentro do contêiner falhe, ele não seria reiniciado automaticamente. Isso pode levar a um aumento no tempo de inatividade do serviço, pois o site permanecerá indisponível até que alguém intervenha manualmente.

Sem um probe de readiness (prontidão), o contêiner que executa o servidor web ainda poderá ser incluído no pool de instâncias disponíveis do balanceador de carga. Isso pode fazer com que requisições sejam enviadas para o contêiner que talvez não consiga processá-las adequadamente, resultando em erros ou timeouts. Por exemplo, o servidor web pode precisar se conectar a um banco de dados ou a algum serviço externo antes de poder responder às requisições recebidas.

Além disso, não ter ambos os probes definidos pode dificultar o diagnóstico e a resolução de problemas com o serviço, pois não haveria um mecanismo automático para identificar quando o contêiner não está funcionando corretamente. Isso pode levar a um atraso na identificação e correção de problemas, causando ainda mais tempo de inatividade e impactando a disponibilidade do serviço.

Conclusão

Os danos potenciais que essas vulnerabilidades e configurações incorretas podem causar podem ser significativos.

Para evitar isso, é importante verificar todos os clusters Kubernetes regularmente para identificar riscos potenciais e corrigi-los o mais rápido possível. Também é importante implementar as melhores práticas de segurança para clusters Kubernetes, como restringir o acesso a recursos confidenciais, usar políticas de rede seguras e atualizar o ambiente regularmente.

O Zora pode ajudá-lo a realizar essas verificações periódicas de forma fácil e automática. Ele permite a varredura periódica de todos os seus clusters K8s por meio de plugins conectados, como o Popeye e o Marvin, plugin oficial da Undistro que reporta verificações atualizadas com as últimas vulnerabilidades divulgadas pelos principais frameworks (Kubernetes POD Security Standards, Mitre Att&ck, NSA & CISA Kubernetes Hardening Guidance). Outros plugins estarão disponíveis em breve ;))

Visite a página de código aberto para saber mais.

Em conclusão, o Kubernetes é uma ferramenta essencial para gerenciar cargas de trabalho conteinerizadas, mas também representa um risco significativo para a segurança da infraestrutura. Ao identificar e corrigir vulnerabilidades, as organizações podem reduzir o risco de incidentes de segurança e violações de dados, protegendo sua infraestrutura e seus dados críticos.

Newsletter Getup.

Atualizações sobre Kubernetes e Software Supply Chain Security todos os meses.

Operating Kubernetes in production for more than 13 years. With Quor, this experience extends to software supply chain security as well.