BLOG

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

  Jordan Zebor

  Lori MacVittie

Publicado em 17 de julho de 2019

Se você está apenas começando esta série, talvez queira começar do início: 
Noções básicas de segurança de contêineres: INTRODUÇÃO

Em uma era de capital de aplicativos, o pipeline de CI/CD é um componente crítico sobre o qual repousa a velocidade e a segurança dos aplicativos que ele cria e entrega.

Este é um sistema complexo de ferramentas, integrado via APIs e invocado por scripts ou plugins que representam digitalmente o processo que você está seguindo para criar e, por fim, entregar aplicativos em contêineres. O que isso significa é que há vários pontos em que um agente mal-intencionado pode comprometer o sistema. Embora isso possa parecer absurdo, lembre-se de que um bom número de organizações está aproveitando a nuvem hoje em dia, o que necessariamente significa acesso remoto.

Isso significa que há duas partes na segurança do gasoduto: primeiro, a segurança do próprio gasoduto . Segundo, segurança no pipeline.

Segurança do Gasoduto 

1. A autenticação não é opcional
Se você estiver usando ferramentas e serviços como parte do seu pipeline na nuvem ou como um serviço hospedado, eles estarão abertos a ataques. Se você permitir o acesso de desenvolvedores ou operações remotas a ferramentas e serviços hospedados internamente, eles estarão abertos a ataques. Antes de descartar essa preocupação, não podemos esquecer o número de violações nos últimos anos como resultado da abertura de sistemas para acesso externo. A melhor postura a ser assumida quando se trata de segurança de oleodutos é que sim, eles são acessíveis a malfeitores.

Por sua vez, isso significa que a primeira tarefa é garantir o acesso. Autenticação forte não é opcional. O uso de controle de acesso é altamente recomendado para ajustar o acesso a sistemas críticos. Mesmo que você pense que os sistemas são acessíveis apenas internamente. Existem outros sistemas na sua rede por meio dos quais pessoas mal-intencionadas podem obter acesso.

Depois de lidar com a autenticação, o próximo passo é a autorização. A autorização especifica o que um usuário autenticado pode fazer dentro do sistema. É importante distinguir privilégios com base em funções porque quanto menos credenciais com acesso a componentes críticos, melhor será para você.

Cada componente no pipeline deve exigir autenticação e autorização. Isso significa tudo, desde repositórios até as ferramentas usadas para criar aplicativos e contêineres.

2. Protegendo componentes do pipeline
Infelizmente, não é incomum ouvir relatos de que invasores descobriram grandes tesouros (credenciais e outros segredos) ao escanear repositórios públicos. Veja o número um para um lembrete sobre exigir autenticação em repositórios.

A realidade dos pipelines de hoje é que eles são 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 invocam as ferramentas e serviços que compõem o pipeline. Isso é algo muito ruim™, principalmente quando associado a práticas de autenticação ruins em repositórios onde esses scripts podem estar armazenados.

Credenciais são ativos essenciais que precisam ser protegidos. Esteja ciente de onde eles residem, onde são armazenados e como são protegidos. Uma ferramenta útil para gerenciar a “proliferação de segredos” é o HashiCorp Vault . O Vault armazena segredos com segurança em um local central.

Segurança no Pipeline

3. Manter uma lista de materiais
Antes de poder proteger um sistema – ou componente do sistema – você precisa saber que ele existe. É importante manter uma lista de materiais abrangente para garantir que você saiba o que há em seu ambiente. Mais precisamente, você precisa ter certeza de que sabe o que deve estar em seu ambiente – e, inversamente, o que não deve.

Um inventário bem mantido pode ajudar a proteger contra tentativas de inserir componentes contaminados ou comprometidos no pipeline. Padronizar um único contêiner base ou pelo menos um punhado gerenciável de contêineres pode melhorar drasticamente sua capacidade de detectar possíveis problemas. Desvios, então, devem disparar um alerta que pode ser investigado. Por exemplo, comparar hashes e, se disponível, validar assinaturas digitais de imagens de contêineres é uma etapa importante. Se você estiver extraindo de um repositório remoto, há uma chance de que ele tenha sido comprometido.

Foi o que aconteceu quando o DockerHub sofreu uma violação e expôs credenciais e tokens de 190.000 de seus usuários. Usando essas informações, os invasores poderiam ter comprometido imagens que mais tarde lhes dariam acesso a outros sistemas.

Não pare nas imagens de contêiner. Lembre-se de que componentes de aplicativos de origem externa estão sujeitos a comprometimento. Um exemplo concreto é a inserção de software de mineração de criptomoedas em um fluxo de eventos do pacote NPM do NodeJS .

A padronização do 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 diferente de contêineres.

4. Digitalizar e corrigir
Há inúmeras maneiras pelas quais os ambientes de contêineres podem ser comprometidos ou ficar vulneráveis a ataques. Na maioria das vezes, pensamos em vulnerabilidades em software em uma imagem de contêiner. Embora você deva prestar atenção a eles – escanear e atualizar/corrigir – também há problemas baseados em configuração que são menos frequentemente detectados e resolvidos. Muitos deles podem ser evitados com a configuração correta. Seu pipeline deve incluir ferramentas capazes de detectar comprometimentos ou alertar sobre configurações inseguras.

A Aqua Security oferece ferramentas que podem auxiliar na digitalização e avaliação de contêineres e configurações. Kube-bench e kube-hunter são ótimos recursos para identificar erros de configuração comuns (mas críticos) em ambientes Kubernetes.
 

Todas as varreduras do mundo não ajudarão a evitar comprometimento ou violação se você não agir. O relatório State of Container Security de 2019 da Tripwire descobriu que quase uma em cada cinco (17%) organizações estava ciente das vulnerabilidades em imagens de contêiner, mas as implementou mesmo assim. Diante disso, provavelmente não é surpresa que a pesquisa tenha descoberto que mais da metade (60%) das organizações sofreram um incidente de segurança relacionado a contêineres nos últimos doze meses.

Este ponto não pode ser enfatizado com frequência ou em voz alta o suficiente: se você integrar varreduras de segurança ao seu pipeline (e deveria), é importante acompanhar as descobertas. Executar uma verificação não fará nada para melhorar a segurança se você não corrigir.

Repetimos: executar uma verificação não fará nada para melhorar a segurança se você não corrigir.

A segurança de oleodutos é um problema multifacetado que pode ser desafiador. O pipeline deve ser tratado como qualquer outro conjunto de aplicações porque, no final das contas, é isso que ele é, ainda que operacional. Não ignore a segurança do pipeline enquanto estiver integrando a segurança ao pipeline.