Skip to main content

Como reforçar a segurança do seu pipeline de CI/CD

Escrito por
blog feature supply chain sbom

12 de julho de 2023

0 minutos de leitura

DevSecOps é a integração de práticas de segurança ao processo de DevOps. Com os ciclos modernos de desenvolvimento, não dá para deixar a segurança para o final. Ela deve estar incorporada a todas as etapas.

A segurança da integração contínua e entrega contínua (CI/CD) é uma parte importante do DevSecOps. É fundamental proteger seus pipelines e garantir que os sistemas automatizados usados para implementar CI/CD não estejam vulneráveis a ataques.

Neste artigo, você vai conhecer os riscos de segurança que podem ameaçar seu pipeline de CI/CD. Também vai aprender a criar pipelines protegidos contra ataques e a testá-los para verificar sua segurança.

Por que proteger seu pipeline de CI/CD

Quando o assunto é segurança, o foco costuma estar em aplicações web e serviços acessíveis ao público. É fácil deixar de lado questões que parecem específicas, como a segurança do pipeline, mas isso é um erro: as consequências de uma proteção inadequada de CI/CD podem ser graves.

Um pipeline comprometido pode dar aos hackers acesso aos seus sistemas, incluindo ao seu código, a dados valiosos e a segredos de clientes. Quando uma parte do pipeline é comprometida, tudo o que passa por ele fica vulnerável.

Também existe o risco de injeção de código malicioso, um tipo de ataque sutil, mas muito grave. Um agente mal-intencionado com acesso ao seu pipeline pode inserir o próprio código, que pode ser incorporado à versão final sem que você perceba. Assim, a aplicação implantada fica comprometida, dando aos invasores liberdade para roubar seus dados e os dos seus usuários.

Além disso, uma cadeia de build comprometida pode vazar segredos. Senhas ou credenciais usadas para autorizar o acesso às suas ferramentas podem ser roubadas e usadas para acessar outras partes do sistema. Um hacker pode causar muitos danos com credenciais roubadas, por isso é essencial mantê-las protegidas.

Além disso, tome cuidado com componentes desatualizados, pois eles podem ser os mais vulneráveis a ataques. Novos vetores de ataque são descobertos o tempo todo, e o software recebe atualizações e patches para eliminá-los. Já as versões antigas continuam desprotegidas.

Manter o software atualizado traz muitos benefícios além da segurança, e manter sua cadeia de ferramentas em dia deve ser uma parte essencial da sua estratégia de segurança.

Como criar um pipeline de CI/CD seguro

Felizmente, há muito o que você pode fazer para se proteger contra ataques. Veja algumas medidas que você pode adotar.

Implemente o controle de acesso baseado em funções

O controle de acesso baseado em funções (RBAC) permite limitar o acesso a diferentes partes do seu sistema. Com ele, você pode conceder acesso às pessoas de acordo com suas funções. Assim, fica mais fácil criar um conjunto seguro de regras, com diferentes níveis de acesso que podem ser implementados rapidamente.

Gerenciar o acesso de cada usuário individualmente parece seguro, mas, na prática, isso gera problemas, como contas antigas esquecidas e privilégios concedidos por tempo demais. Com o RBAC, você tem um conjunto fixo de regras que pode conceder ou revogar de uma só vez.

Faça uma varredura em busca de vulnerabilidades

As ferramentas automatizadas são essenciais para detectar vulnerabilidades. Felizmente, há vários sistemas de análise de segurança que ajudam você a encontrar problemas com rapidez e eficiência. Eles podem detectar erros de código ou problemas de configuração que deixam seu sistema vulnerável a ataques.

Você também pode pedir ajuda externa e contratar terceiros para fazer uma auditoria de segurança e identificar problemas que talvez tenham passado despercebidos. Alguém que não esteja tão envolvido no projeto quanto você pode encontrar pontos cegos que talvez você não tenha considerado.

Use um gerenciador de segredos

Gerenciadores de segredos são ferramentas que armazenam dados confidenciais, como credenciais e chaves, e gerenciam o acesso a eles. Ao limitar quem pode acessar esses dados, de onde e como, você reduz muito as chances de vazamento. Além disso, uma boa ferramenta de gerenciamento de segredos criptografa os dados em repouso e em trânsito, minimizando o impacto de um eventual vazamento.

Muitas plataformas de CI têm sistemas integrados de gerenciamento de segredos e credenciais, e algumas também se integram a sistemas externos populares para esse fim.

Gerencie a exposição da rede

O acesso irrestrito à rede pode deixar seus sistemas de CI/CD vulneráveis a ataques externos (tráfego de entrada) e facilitar a exfiltração de dados (tráfego de saída). Gerenciar a exposição da rede e desativar os acessos desnecessários do seu pipeline ajuda a mantê-lo mais seguro.

Por exemplo, abra o mínimo de portas possível e feche-as quando não forem necessárias. Além disso, desative os recursos remotos de que você não precisa. Soquetes do Docker, APIs e qualquer meio de comunicação entre seus sistemas e o mundo externo precisam de proteção rigorosa.

Limite os limites de confiança

Outra forma de reduzir os riscos é limitar os limites de confiança ao máximo. Toda comunicação entre sistemas externos ou usuários precisa ser protegida. Restrinja o que é permitido ao mínimo necessário e, de preferência, conceda acesso apenas por um período específico.

Garantir que cada parte da sua cadeia revele o mínimo possível de informações também dificulta ataques. Saídas de texto, como mensagens de erro, podem aparecer em uma parte do sistema acessível ao público e ajudar a criar um retrato detalhado da sua infraestrutura, facilitando ataques direcionados.

Para evitar isso, em alguns casos, você pode executar comandos com saída mínima. Assim, os logs ou mensagens que eventualmente vazarem revelarão o mínimo possível sobre seu sistema.

Por exemplo, o comando wget no Bash exibe vários tipos de informação. Você pode ocultá-las com a opção q, assim:

wget -q https://google.com

Hackers costumam avançar pela sua cadeia de ferramentas, obtendo informações sobre seu sistema ao longo do caminho. Reduzir a saída limita as oportunidades para isso. Você pode aplicar opções semelhantes a outros comandos.

Como automatizar a segurança do pipeline de CI/CD

Felizmente, vários desses problemas podem ser resolvidos com um produto de segurança, como o Snyk, executado como parte do pipeline de build para ajudar você a detectar e corrigir problemas rapidamente.

Por exemplo, executar um scanner de vulnerabilidades no pipeline pode detectar problemas causados por componentes desatualizados. O Snyk pode encontrar e detectar esse tipo de problema. Para encontrá-los pelo terminal, basta digitar:

snyk test

Você também pode integrar seu sistema de gerenciamento de código-fonte, como o GitHub, ao Snyk para adicionar automaticamente verificações de PR que detectam novas vulnerabilidades em dependências, contêineres ou políticas de infraestrutura como código:

Interface de pipeline de CI/CD exibindo uma marca de seleção verde, “Todas as verificações foram aprovadas” e uma verificação de segurança/Snyk marcada como ignorada

Saiba mais sobre como integrar o Snyk às verificações de PR na documentação de suporte do Snyk.

Como integrar testes de segurança a um pipeline de CI/CD

Você pode incluir testes de segurança no pipeline. Como eles podem verificar vários aspectos, não deixe nenhum de fora.

RBAC

Como mencionado, o RBAC é uma ótima maneira de proteger diferentes partes do seu sistema. Testes regulares ajudam a garantir que ele continue seguro. Verificações automatizadas podem confirmar que os usuários só acessam recursos compatíveis com suas funções. Por exemplo, um teste com um usuário anônimo não deve permitir o acesso a recursos restritos a usuários autorizados. Esse tipo de teste pode falhar, por exemplo, se uma atualização de software alterar as configurações e impedir a aplicação de mudanças feitas anteriormente.

APIs

Os testes de API também podem ser automatizados. Para fins de segurança, é importante combinar testes que tenham sucesso com as credenciais corretas e falhem quando elas não forem fornecidas.

Permitir o acesso a um recurso sem as credenciais corretas é uma falha de segurança. Os testes automatizados de API permitem verificar isso de forma regular e rápida. Você também pode confirmar se suas APIs retornam os resultados esperados e respondem adequadamente a solicitações malformadas criadas para comprometer sua segurança.

Segredos

Os testes de segredos permitem verificar se eles ficam expostos em algum momento. Os pipelines precisam gerenciar senhas e tokens, e as ferramentas da sua cadeia precisam ter os privilégios adequados para executar suas funções.

Tome cuidado para não expor seus segredos nos testes, pois outras pessoas podem acessá-los. O Snyk pode identificar segredos codificados diretamente no seu código ou em scripts, ajudando você a corrigir o problema.

Como proteger um pipeline de CI/CD do Jenkins com o Snyk

Para começar a usar o Snyk, você precisa criar uma conta e instalar o cliente localmente. As instruções de instalação estão disponíveis aqui. Por exemplo, se você usa npm, pode executar este código:

npm install snyk -g

O Snyk também se integra aos principais provedores de nuvem e a várias outras ferramentas de CI/CD, com diversos plugins que facilitam essas integrações. Por exemplo, para usá-lo com o Jenkins, acesse o painel do Jenkins e depois vá para Manage Plugins. Em seguida, encontre Snyk Security na aba Available. Não se esqueça de registrar o plugin e conectá-lo à sua conta.

Depois de integrar o Snyk, você pode adicioná-lo como uma etapa do pipeline usando a entrada snykSecurity:

//build stage omitted 

stage('Test') {
      steps {
            echo 'Testing with Snyk'
            snykSecurity(
                  snykInstallation: '<Snyk Installation Name>',
                  snykTokenId: '<Snyk API Token ID>',
                  // other parameters here
            )
      }
}

//deploy stage omitted

Veja outros comandos que você pode usar para controlar o comportamento do Snyk:

  • failOnIssues e failOnError: esses comandos permitem interromper o script quando qualquer uma dessas condições ocorrer, impedindo que problemas detectados pelo Snyk cheguem aos deploys. Isso é especialmente recomendável se sua automação de CI/CD implanta qualquer coisa que será disponibilizada ao público.

  • severity: permite especificar a gravidade dos problemas que o Snyk deve investigar. Você pode ignorar problemas menos graves e permitir que os builds continuem quando apenas problemas leves forem detectados. Também pode executar uma etapa de build separada, com comportamento diferente conforme a gravidade do problema.

Ao executar seus builds, você pode verificar se há problemas no console do Snyk e consultar os logs em detalhes para descobrir o que precisa corrigir.

Esse é o processo para configurar o Snyk com o Jenkins, mas há muitas outras possibilidades, como integrar o Snyk ao GitHub ou a provedores de nuvem, como Amazon Web Services (AWS) e Azure.

Conclusão

Seu pipeline de CI/CD é uma parte essencial, mas muitas vezes esquecida, da sua estratégia de segurança. Hackers podem explorá-lo de várias maneiras, por isso é fundamental tomar medidas para reduzir todos os vetores de ataque.

Você precisa se antecipar e ficar um passo à frente de quem tenta comprometer seus sistemas. Atualizações de segurança, testes automatizados e gerenciamento de funções são algumas das maneiras de reforçar a segurança do seu sistema e manter os invasores longe.

Snyk é uma ótima ferramenta para ter no seu arsenal, pois dá a você controle sobre o pipeline. Acesse o site e comece agora a proteger a segurança do seu CI/CD. Com o Snyk, fica fácil manter tudo seguro.

Comece a participar de desafios de Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.