Noções básicas de segurança de contêineres: segurança de pipelines

Ecossistema F5 | 17 de julho de 2019

Se você está começando a acompanhar esta série agora, talvez seja melhor começar pelo início:
Noções básicas de segurança de contêineres: introdução

Na era do capital de aplicações, o pipeline de CI/CD é um componente essencial do qual dependem a velocidade e a segurança das aplicações que ele cria e entrega.

Esse é um sistema complexo de ferramentas, integradas por meio de APIs e acionadas por scripts ou plugins que representam digitalmente o processo que você segue para criar e, por fim, disponibilizar aplicações em contêineres. Isso significa que há vários pontos nos quais um agente mal-intencionado poderia comprometer o sistema. Embora isso possa parecer improvável, lembre-se de que um número considerável de organizações utiliza a nuvem atualmente, o que necessariamente implica acesso remoto.

Isso significa que a segurança do pipeline tem dois aspectos: primeiro, a segurança do próprio pipeline; segundo, a segurança dentro do pipeline.

Segurança do pipeline

1. A autenticação não é opcional
Se você usa ferramentas e serviços como parte do seu pipeline na nuvem ou como um serviço hospedado, eles estão sujeitos a ataques. Se você permite que desenvolvedores remotos ou equipes de operações acessem ferramentas e serviços hospedados internamente, eles também ficam sujeitos a ataques. Antes de descartar essa preocupação, não podemos esquecer a quantidade de violações ocorridas nos últimos anos em decorrência da abertura de sistemas para acesso externo. A melhor postura em relação à segurança do pipeline é presumir que, sim, ele está acessível a agentes mal-intencionados.

Portanto, a primeira providência é proteger o acesso. Uma autenticação forte não é opcional. É altamente recomendável usar controles de acesso para definir com precisão o acesso a sistemas críticos, mesmo que você acredite que eles só possam ser acessados internamente. Há outros sistemas na sua rede por meio dos quais agentes mal-intencionados podem obter acesso.

Depois de implementar a autenticação, o próximo passo é a autorização. A autorização determina o que um usuário autenticado pode fazer no sistema. É importante diferenciar os privilégios de acordo com as funções, pois quanto menos credenciais tiverem acesso a componentes críticos, maior será a segurança.

Todos os componentes do pipeline devem exigir autenticação e autorização. Isso inclui desde os repositórios até as ferramentas usadas para criar aplicações e contêineres.

2. Proteção dos componentes do pipeline
Infelizmente, não é incomum ouvir relatos de que invasores descobriram verdadeiros tesouros (credenciais e outros segredos) ao vasculhar repositórios públicos. Consulte o item 1 para relembrar a importância de exigir autenticação nos repositórios.

A realidade dos pipelines atuais é que eles formam uma cadeia integrada de ferramentas, cada uma das quais deve exigir autenticação. Por isso, credenciais e segredos (chaves) muitas vezes acabam armazenados em scripts que acionam as ferramentas e os serviços que compõem o pipeline. Isso é Algo Muito Ruim™, especialmente quando combinado com práticas inadequadas de autenticação nos repositórios em que esses scripts podem estar armazenados.

As credenciais são ativos críticos que precisam ser protegidos. Saiba onde elas se encontram, onde são armazenadas e como são protegidas. Uma ferramenta útil para gerenciar a “proliferação de segredos” é o HashiCorp Vault. O Vault armazena segredos com segurança em um local centralizado.

Segurança no pipeline

3. Mantenha uma lista de materiais
Antes de proteger um sistema — ou um componente dele —, você precisa saber que ele existe. É importante manter uma lista de materiais abrangente para saber o que está presente em seu ambiente. Mais especificamente, você precisa saber o que deveria estar em seu ambiente — e, por outro lado, o que não deveria.

Um inventário bem mantido pode ajudar a proteger contra tentativas de inserir componentes contaminados ou comprometidos no pipeline. A padronização em um único contêiner base, ou pelo menos em um conjunto gerenciável de contêineres, pode melhorar significativamente sua capacidade de detectar possíveis problemas. Assim, qualquer desvio deve acionar um alerta para que possa ser investigado. Por exemplo, comparar hashes e, quando possível, validar as assinaturas digitais das imagens de contêiner é uma etapa importante. Se você estiver obtendo imagens de um repositório remoto, existe a possibilidade de ele ter sido comprometido.

Foi o que aconteceu quando o DockerHub sofreu uma violação de segurança que expôs credenciais e tokens de 190 mil usuários. Com essas informações, os invasores poderiam ter comprometido imagens que posteriormente lhes dariam acesso a outros sistemas.

Não se limite às imagens de contêiner. Lembre-se de que componentes de aplicativos provenientes de fontes externas estão sujeitos a comprometimento. Um exemplo concreto é a inserção de um software de mineração de criptomoedas em um pacote NPM do Node.js event-stream.

A padronização de um inventário mantido de imagens e componentes também agiliza a correção de vulnerabilidades quando — e não se — elas surgirem. Atualizar uma única camada de sistema operacional base é muito mais fácil de gerenciar do que tentar atualizar um conjunto heterogêneo de contêineres.

4. Verifique e corrija
Há inúmeras maneiras pelas quais os ambientes de contêineres podem ser comprometidos ou acabar vulneráveis a ataques. Na maioria das vezes, pensamos em vulnerabilidades no software de uma imagem de contêiner. Embora seja necessário dar atenção a elas — verificando e atualizando/aplicando patches —, também há problemas relacionados à configuração que são detectados e corrigidos com menos frequência. Muitos deles podem ser evitados com a configuração adequada. Seu pipeline deve incluir ferramentas capazes de detectar comprometimentos ou alertar sobre configurações inseguras.

A Aqua Security oferece ferramentas que podem ajudar a verificar e avaliar tanto contêineres quanto configurações. O Kube-bench e o kube-hunter são excelentes recursos para identificar erros de configuração comuns (mas críticos) em ambientes Kubernetes.

o FOSS
https://github.com/aquasecurity/kube-bench
https://github.com/aquasecurity/kube-hunter

o Comercial
https://www.aquasec.com/

Todas as verificações do mundo não ajudarão a evitar comprometimentos ou violações se você não tomar providências. O relatório State of Container Security 2019, da Tripwire, constatou que quase uma em cada cinco organizações (17%) estava ciente de vulnerabilidades em imagens de contêiner, mas ainda assim as implantava. Diante disso, provavelmente não surpreende que a pesquisa tenha constatado que mais da metade (60%) das organizações havia enfrentado um incidente de segurança relacionado a contêineres nos doze meses anteriores.

Nunca é demais enfatizar este ponto: se você integrar verificações de segurança ao seu pipeline (e deve fazer isso), é importante tomar as medidas necessárias com base nos problemas identificados. Executar uma verificação não melhora em nada a segurança se você não corrigir esses problemas.

Repetimos: executar uma verificação não melhora em nada a segurança se você não corrigir os problemas encontrados.

A segurança do pipeline é um problema multifacetado que pode ser desafiador. O pipeline deve ser tratado como qualquer outro conjunto de aplicações, pois, em última análise, é exatamente isso que ele é, embora tenha caráter operacional. Não ignore a segurança do pipeline enquanto integra a segurança ao pipeline.

Leia o próximo artigo da série:
Noções básicas de segurança de contêineres: orquestração

Compartilhar

Sobre o autor

Publicações relacionadas no blog

Entrega e proteção de agentes de IA em fábricas de IA: F5 para a arquitetura de referência NVIDIA OpenShell para agentes de IA seguros
Ecossistema F5 | 21/10/2026

Entrega e proteção de agentes de IA em fábricas de IA: F5 para a arquitetura de referência NVIDIA OpenShell para agentes de IA seguros

As soluções da F5 ampliam a Arquitetura de Referência NVIDIA OpenShell para agentes de IA seguros.

Como medir – e minimizar – o custo total de propriedade do seu Kubernetes
Ecossistema F5 | 10/12/2020

Como medir – e minimizar – o custo total de propriedade do seu Kubernetes

O Kubernetes pode ser baixado e executado gratuitamente, mas sua manutenção está longe de não ter custos. Assim como outras grandes plataformas de código aberto que são “gratuitas” apenas em um sentido simplista, o Kubernetes quase certamente exigirá investimentos para ser implantado e operado.

As-Code: a pilha de TI contínua
Ecossistema F5 | 08/10/2018

As-Code: a pilha de TI contínua

Infraestrutura, configuração, pipeline, operações. De repente, tudo é “como código”. Lori MacVittie busca esclarecer a terminologia e identificar os diferentes componentes de uma stack contínua de TI.

O estado da entrega de aplicações em 2017: automação, APIs e DevOps
Ecossistema F5 | 17/04/2017

O estado da entrega de aplicações em 2017: automação, APIs e DevOps

Explore o relatório State of Application Delivery de 2017. Leia o blog retrospectivo da F5 sobre o início da ascensão das redes declarativas e dos pipelines de DevOps.

DevOps Summit: onde a rede foi convidada para a festa
Ecossistema F5 | 11/06/2015

DevOps Summit: onde a rede foi convidada para a festa

No DevOps Summit NY, falou-se muito não apenas sobre DevOps, mas também sobre contêineres, IoT e microsserviços. As sessões se concentraram não só na mudança cultural necessária para crescer em escala com uma abordagem DevOps, mas também fizeram questão de incluir...

F5 e Nutanix convergem em infraestrutura no .NEXT
Ecossistema F5 | 08/06/2015

F5 e Nutanix convergem em infraestrutura no .NEXT

Aplicações empresariais como Microsoft SharePoint e Exchange, juntamente com a VDI, continuam sendo a espinha dorsal da sua empresa. A produtividade, embora não seja tão atraente quanto o lucro, é um fator essencial para o sucesso das operações empresariais atuais. Deixar de...