paint-brush
Como transformar um pipeline DevOps em um pipeline DevSecOps: uma visão geral do conceito Shift Leftpor@goal23
10,696 leituras
10,696 leituras

Como transformar um pipeline DevOps em um pipeline DevSecOps: uma visão geral do conceito Shift Left

por Sofia Konobievska12m2023/09/08
Read on Terminal Reader

Muito longo; Para ler

Expliquei o que é o conceito Shift Left e como ele ajuda a reduzir o custo de correções de bugs e o tempo de desenvolvimento: quanto mais cedo no processo de desenvolvimento você iniciar as verificações de segurança, melhor. Em seguida, desconstruí a estrutura do Pipeline DevSecOps e observei quais verificações de segurança são realizadas em cada estágio do Pipeline.
featured image - Como transformar um pipeline DevOps em um pipeline DevSecOps: uma visão geral do conceito Shift Left
Sofia Konobievska HackerNoon profile picture

Olá, HackerNoon! Meu nome é Sofia e sou engenheira DevOps/Cloud. Decidi participar do concurso do HackerNoon e Aptible.


Neste artigo, falarei sobre os recursos do pipeline DevSecOps e o conceito de Shift Left. Você aprenderá sobre os principais estágios do pipeline DevSecOps, verificações automatizadas de segurança no desenvolvimento de software e ferramentas gratuitas e de código aberto. Você também encontrará dicas para ajudá-lo a detectar vulnerabilidades mais cedo e melhorar a segurança dos aplicativos.


Este artigo irá ajudá-lo a avaliar a maturidade do seu pipeline DevSecOps, desenvolver um roteiro para seu desenvolvimento, escolher as ferramentas certas para cada tarefa e entender melhor como gerenciar projetos seguindo a filosofia DevSecOps.

Conceito de mudança para a esquerda

O principal objetivo da metodologia DevSecOps é introduzir verificações de segurança automatizadas nos pipelines DevOps, ou seja, no próprio processo de desenvolvimento de software.


Não faz muito tempo, especialistas em segurança da informação realizavam testes após concluir o processo de desenvolvimento. Essa abordagem é ineficiente – se forem descobertos erros durante os testes de segurança, todo o ciclo de desenvolvimento deverá ser reiniciado. Isso é demorado e caro.


Dê uma olhada na imagem abaixo. Você pode ver que o custo da correção de erros aumenta a cada etapa.


Não custa quase nada corrigir problemas de segurança descobertos durante o desenvolvimento e testes funcionais. Todas as alterações necessárias podem ser feitas imediatamente no código-fonte e enviadas para nova verificação.


A correção de problemas no estágio de construção do artefato é pelo menos duas vezes mais cara. Você terá que fazer alterações no processo de construção, por exemplo, editar o Dockerfile, o que significa que precisará da ajuda de engenheiros de DevOps.


Se um erro for detectado durante o teste de integração, será 10 vezes mais caro corrigi-lo. Nesse caso, você deve reiniciar o ciclo de desenvolvimento e envolver desenvolvedores, engenheiros de DevOps e testadores.


Problemas de segurança detectados na fase de implantação podem levar ao vazamento de dados do usuário. A empresa pode receber milhões de dólares em multas e danos à sua reputação, o que significa que o custo de um erro aumenta centenas de vezes.


Portanto, a principal conclusão é que as verificações de segurança devem ser realizadas o mais cedo possível. Se você visualizá-lo, mova-os para o lado esquerdo do Pipeline. Este é o conceito de Shift Left, sobre o qual os especialistas em segurança adoram falar.


Estrutura do pipeline DevSecOps

Os pipelines DevSecOps são uma cadeia automatizada de processos e ferramentas que criam, testam e entregam aplicativos em um ambiente de produção e os protegem em todas as fases.



A imagem acima mostra a estrutura do DevSecOps Pipeline com todas as principais fases das verificações de segurança. Aqui estão algumas palavras sobre cada um deles:


  • Pré-comprometer. Implica verificar a segurança do código-fonte antes que o desenvolvedor envie o código para o sistema de controle de versão. Essa verificação permite detectar informações confidenciais não criptografadas, como senhas ou chaves de API.


  • Pré-construir. Implica verificar a segurança do código-fonte após sua entrada no sistema de controle de versão. As ferramentas realizam análises estáticas do código-fonte e de suas dependências para detectar vulnerabilidades comuns, como muitas das Os dez melhores da OWASP lista.


  • Pós-construção. É a verificação de segurança de um artefato construído a partir do código-fonte, como um arquivo Docker, pacote RPM ou arquivo JAR. As ferramentas analisam o ambiente e as dependências da aplicação, encontrando versões desatualizadas de pacotes e bibliotecas que já possuem patches em versões mais recentes.


  • Tempo de teste. Implica testar a segurança de uma aplicação executada a partir de um artefato coletado. As ferramentas nesta fase tentam “quebrar” a aplicação simulando as ações dos invasores.


  • Pós-implantação. Implica verificar a segurança de uma aplicação após ela ter sido implantada em um ambiente de produção. As ferramentas monitoram registros abertos de vulnerabilidades conhecidas em tempo real e notificam quando uma ameaça ao aplicativo é detectada.


A seguir, vamos dar uma olhada mais de perto no que são essas verificações e quais ferramentas são usadas para realizá-las.

Verificações pré-confirmação

As verificações pré-confirmação permitem analisar o código-fonte na máquina do desenvolvedor antes de confirmar as alterações na cópia local do repositório. Se alguma das instruções retornar um erro, o commit não será executado. Neste caso, o desenvolvedor deve corrigir o erro e cometer novamente.


Essa verificação evita a situação em que código não verificado, por exemplo, com segredos não criptografados, entra no repositório.



Para realizar verificações de código-fonte pré-commit, é necessário instalar ferramentas nas máquinas locais dos desenvolvedores. Esta abordagem não tem apenas vantagens, mas também desvantagens. Por exemplo, diferenças ambientais: diferentes versões dos instrumentos, vários sistemas operacionais e até arquiteturas de processador.


Se os desenvolvedores usarem versões diferentes de ferramentas de pré-comprometimento, os resultados da verificação serão diferentes, e isso pode dificultar o trabalho conjunto. Considere isso ao implementar verificações pré-confirmação dentro de uma equipe ou em toda a empresa.

Ferramentas para verificações pré-confirmação

Muitas ferramentas de código aberto podem ser usadas para configurar verificações de pré-confirmação:


  1. Gileaks
  2. segredos do git
  3. Verificação secreta de curiosidades
  4. Sussurros
  5. git-todos-segredos
  6. detectar segredos
  7. vazamentos complicados


Estas são ótimas ferramentas para verificações pré-confirmação.

Verificações pré-construção

Na fase de pré-construção, é realizado o Teste de Caixa Branca. Essas verificações são utilizadas para analisar o código-fonte, como na etapa anterior. Neste caso, a aplicação é uma “caixa branca” porque conhecemos e entendemos a sua arquitetura e estrutura interna.


Existem vários tipos de verificações de pré-construção:


  • Detecção Secreta
  • Teste estático de segurança de aplicativos (SAST)
  • Análise de Composição de Software (SCA)


Agora, vamos discuti-los em detalhes.

Verificação de detecção de segredo pré-construída

A detecção de segredo é uma verificação automatizada que detecta informações confidenciais não criptografadas: segredos não criptografados no código-fonte que entraram em um sistema de controle de versão.


As verificações de pré-construção são realizadas depois que o código-fonte entra no repositório do sistema de controle de versão. Portanto, todos os dados confidenciais não criptografados no armazenamento podem ser potencialmente acessados por invasores, por exemplo, se o conteúdo do repositório vazar.


Além disso, o processo de implementação de verificações de detecção de segredos pode ocorrer não do zero, mas num projecto em evolução. Nesse caso, segredos não criptografados podem ser encontrados em commits antigos e em diferentes ramificações do repositório.


Para resolver esses problemas, precisamos fazer muitas coisas diferentes. Por exemplo, devemos limpar os repositórios de segredos não criptografados ou implementar várias ferramentas de gerenciamento de segredos, como o Hashicorp Vault .

Ferramentas para detecção de segredos

A detecção de segredo pode ser configurada usando Gileaks , segredos do git , ou detectar segredos . No entanto, é melhor usar serviços fornecidos por plataformas CI/CD conhecidas, por exemplo, Detecção de segredos do GitLab .

Verificação SAST pré-construída

O Static Application Security Testing (SAST) é um teste em que os analisadores não apenas verificam a correção sintática, mas também medem a qualidade do código com a ajuda de métricas exclusivas. A principal tarefa dos scanners SAST são os testes de segurança.


Em particular, os analisadores SAST contêm código-fonte para vulnerabilidades comuns, por exemplo, alguns dos Os dez melhores da OWASP listas. É essencial dizer que os scanners SAST encontram não apenas a vulnerabilidade em si, mas também o fragmento de código que a causou.


A análise SAST é chamada de Teste de Caixa Branca porque o analisador pode acessar a estrutura interna do aplicativo. É importante observar que os analisadores verificam o código-fonte sem executá-lo, portanto podem gerar falsos positivos e não detectar algumas vulnerabilidades.


Por esse motivo, você não deve se limitar apenas à análise SAST. É melhor abordar a questão de forma abrangente e utilizar diferentes tipos de análise: SCA, DAST, IAST e OAST.

Ferramentas SAST

Soluções proprietárias:



A solução gratuita é GitLab SAST.

Verificação SCA de origem pré-construída

A Análise de Composição de Software (SCA) é uma metodologia que protege aplicativos analisando seus componentes de código aberto.


Os scanners SCA procuram dependências desatualizadas que contenham vulnerabilidades e explorações conhecidas. Além disso, algumas ferramentas SCA podem determinar a compatibilidade de licença de componentes e os riscos de violação de licença.


O Source SCA analisa o código-fonte e, mais especificamente, as dependências do aplicativo definidas no código-fonte. Essa análise costuma ser chamada de Verificação de Dependências.


O SCA permite detectar um problema em que uma vulnerabilidade em um componente pode levar a problemas de segurança em todos os aplicativos.


Um bom exemplo é Log4Shell . Esta vulnerabilidade foi descoberta no final de 2021 no Log4j, uma popular estrutura de registro Java. Tornou-se uma das vulnerabilidades mais temidas porque permitiu que invasores executassem código Java arbitrário em centenas de milhões de dispositivos.

Ferramentas SCA

Curiosidades é uma solução de código aberto.


Solução comercial com planos de preços gratuitos:



Como parte do GitLab (disponível apenas na versão Ultimate), você pode usar Verificação de dependência do GitLab .

Verificações pós-construção: SCA binário

A fase de pós-construção ocorre depois que os artefatos foram construídos a partir do código-fonte no CI Pipeline: uma imagem Docker, um pacote RPM ou um arquivo JAR. Com verificações pós-compilação, você pode analisar as dependências nesses artefatos binários.



A análise SCA binária envolve a inspeção de artefatos binários, como imagens Docker, pacotes RPM e arquivos JAR/WAR/EAR. Também é frequentemente referido como verificação de contêiner. Faz sentido executá-lo quando os artefatos binários são construídos, ou seja, não antes do estágio pós-construção.


Existem alguns recursos interessantes ao trabalhar com imagens Docker. Os analisadores binários SCA verificam camadas de imagens Docker e as procuram como somas de hash em bancos de dados públicos de vulnerabilidade, como Banco de dados nacional de vulnerabilidades (NVD) ou Banco de dados de vulnerabilidade Snyk .


Alguns dos analisadores podem não apenas encontrar componentes vulneráveis, mas também sugerir uma correção, por exemplo, especificando a versão mínima necessária de um componente com uma vulnerabilidade já corrigida.

Exemplos de analisadores SCA binários populares

A solução gratuita é Verificação de contêiner GitLab .


Soluções de código aberto:



Registro Docker com analisadores integrados - Porto .

Verificações de tempo de teste: DAST, IAST e OAST

Nesta fase, são realizados testes dinâmicos de caixa cinza e teste de caixa preta. Quando a estrutura interna da aplicação é parcial ou totalmente desconhecida, essas verificações de segurança são realizadas emulando as ações de um invasor que encontra vulnerabilidades e tenta “quebrar” a aplicação explorando-as. Vamos discutir brevemente cada um deles: DAST, IAST e OAST.


Verificação DAST em tempo de teste

Os scanners DAST testam aplicativos automaticamente simulando ataques externos por meio de várias vulnerabilidades. A aplicação é uma caixa preta para o analisador; nada se sabe sobre isso.


Para verificações DAST, é necessário ter uma instância em execução do aplicativo disponível para o scanner. Além disso, quanto mais próximos os parâmetros da instância de teste da aplicação estiverem da instalação de produção, menos falsos positivos haverá.


Por exemplo, suponha que você tenha implantado uma instância de aplicativo de teste acessível somente por meio do protocolo HTTP, mas na produção, o aplicativo seja acessível somente por meio do protocolo HTTP.


Nesse caso, o scanner DAST irá gerar alguns erros relacionados à falta de criptografia do tráfego entre o cliente (analisador) e o servidor (instância da aplicação).

Exemplos de ferramentas DAST

Ferramentas que merecem sua atenção:


  • DAST do GitLab — disponível apenas na versão Ultimate
  • Proxy de ataque Zed OWASP (ZAP) — uma solução de código aberto, que também é usada no GitLab DAST
  • Acunetix
  • Fortify WebInspect
  • AppScan de Segurança HCL
  • DAST gerenciado pela Synopsys
  • Tenable.io (Verificação de aplicativos da Web)
  • Análise Dinâmica Veracode


Ótimo, siga em frente.

Verificação IAST em tempo de teste

IAST (Interactive Application Security Testing) é um teste de caixa cinza que combina as vantagens e os pontos fortes do teste de caixa branca SAST e do teste de caixa preta DAST.


Para coletar todas as vantagens e eliminar as desvantagens dos métodos SAST e DAST, os desenvolvedores inventaram o IAST - um mecanismo híbrido que combina esses métodos. Aumenta a precisão dos testes dinâmicos porque fornece mais informações sobre o funcionamento do aplicativo por meio da análise de código.


Vale lembrar que além das vantagens, o IAST apresenta limitações. A mais básica é a dependência da linguagem em que a aplicação em teste é escrita. As soluções IAST funcionam no nível da aplicação e requerem acesso ao código executável para analisar seu comportamento.


Isto significa que as soluções IAST devem ser capazes de compreender a linguagem de programação na qual a aplicação é escrita. Deve-se notar que o suporte para uma solução IAST específica pode ser melhor implementado para alguns idiomas do que para outros.


A análise IAST também leva muito tempo. Depende de muitos fatores, como o tamanho e a complexidade da aplicação, o número de dependências externas e o desempenho da ferramenta IAST utilizada.


Além disso, o processo de análise não verifica o código em si, mas verifica apenas os fragmentos que são executados diretamente. Portanto, a análise IAST é melhor combinada com testes funcionais quando você pode testar tantos cenários de aplicação quanto possível.

Exemplos de ferramentas IAST

Aqui estão ótimas ferramentas para você:



Ótimo, siga em frente.

Verificação OAST em tempo de teste

OAST (Out-of-band Application Security Testing) é uma técnica desenvolvida por PortSwigger e é uma extensão do DAST que encontra vulnerabilidades que o DAST não vê, como log4shell.

Exemplos de ferramentas OAST

Eu recomendo você:



Ir em frente.

Verificações pós-implantação


Esta é uma etapa essencial para garantir a segurança e a operabilidade do aplicativo. Ao contrário das verificações pré-confirmação, que são realizadas no estágio de desenvolvimento, as verificações pós-implantação permitem identificar possíveis problemas já durante a operação do aplicativo no ambiente natural.

Monitorando a Segurança de Artefatos

Para detectar novas vulnerabilidades a tempo, é necessário realizar verificações regulares de artefatos, inclusive após a implantação de um aplicativo.


Isso pode ser feito usando repositórios ou ferramentas especiais, como Contêiner Snyk , Trivy, GitLab Container Scanning ou desenvolvendo seu módulo de integração.

Monitoramento de segurança de aplicativos

Outra forma de garantir a segurança é monitorar o próprio aplicativo. Existem diversas tecnologias disponíveis para esse fim:


  • Web Application Firewall (WAF) é uma ferramenta de filtragem de tráfego. Ele funciona na camada de aplicação e protege aplicações web analisando o tráfego HTTP/HTTPS.


  • RASP (Runtime Application Self-Protection) é uma tecnologia que detecta e bloqueia ataques a um aplicativo em tempo real. Ele adiciona uma função de defesa ao ambiente de tempo de execução, permitindo que o aplicativo se autoproteja automaticamente.


A principal vantagem do RASP sobre o WAF é que ele entende como o aplicativo funciona e detecta ataques e tráfego ilegítimo. O RASP pode ver não apenas ataques típicos usando correspondência de assinaturas, mas também tentativas de explorar vulnerabilidades de dia zero reagindo a anomalias.


Ao contrário do WAF, o RASP funciona dentro e com o aplicativo. WAF pode ser enganado. Se um invasor alterar o código do aplicativo, o WAF não poderá detectá-lo porque não entende o contexto de execução.


O RASP tem acesso a informações de diagnóstico sobre o aplicativo, pode analisá-lo, detectar anomalias e bloquear ataques.


A tecnologia RASP tem como especialidade focar na prevenção de ataques por padrão. O sistema não requer acesso ao código-fonte.

Tolos RASP

Eu recomendo você:



Ótimo, siga em frente.

Visualização de resultados de pipelines DevSecOps e gerenciamento de vulnerabilidades

Em diferentes estágios do pipeline, eu uso muitos analisadores de testes de segurança de aplicativos/DevSecOps. Cada um deles gera um relatório em formato próprio, e alguns deles geram os chamados Falsos Positivos. Por isso, não é fácil analisar a segurança de uma aplicação como um todo.


Para analisar vulnerabilidades com eficácia e gerenciar o processo de correção, são usadas ferramentas especializadas de gerenciamento de vulnerabilidades, muitas vezes chamadas simplesmente de painéis de segurança .


Os painéis de segurança resolvem o problema entregando os resultados das análises DevSecOps de uma forma unificada e fácil de analisar. Dessa forma, os engenheiros de segurança podem ver quais problemas existem, quais são os mais críticos e quais precisam ser resolvidos primeiro.


Ferramentas DevSecOps

Uma ampla gama de ferramentas é geralmente usada como painéis de segurança: por exemplo, sistemas SOAR/SIEM clássicos e o orquestrador DevSecOps especializado AppSec.Hub da Swordfish Security ou o kit de ferramentas de gerenciamento de vulnerabilidades de código aberto DefectDojo.


DefectDojo é uma ferramenta amplamente difundida. É amplamente utilizado até mesmo em empresas empresariais. No entanto, apesar de sua popularidade e idade sólida, esta ferramenta ocasionalmente apresenta alguns defeitos de nível inicial quando os contribuidores quebram a funcionalidade básica no commit.


No entanto, o que é bom é que os desenvolvedores e mantenedores do DefectDojo ajudam a resolver as complexidades. Os desenvolvedores do DefectDojo são pessoas muito receptivas - recomendamos contatá-los diretamente por meio de Problemas no GitHub.

Conceito de mudança para a esquerda: vamos resumir

Mais uma vez, aqui está uma rápida recapitulação do que estava no artigo.


Expliquei o que é o conceito Shift Left e como ele ajuda a reduzir o custo de correções de bugs e o tempo de desenvolvimento: quanto mais cedo no processo de desenvolvimento você iniciar as verificações de segurança, melhor.


Em seguida, desconstruí a estrutura do Pipeline DevSecOps e observei quais verificações de segurança são realizadas em cada estágio do Pipeline:


  • Pré-comprometer. Implica verificar a segurança do código-fonte antes de entrar no sistema de controle de versão.


  • Pré-construir. É uma verificação da segurança do código-fonte no sistema de controle de versão (Secret Detection, SAST, SCA).


  • Pós-construção. É uma verificação de segurança de um artefato construído a partir do código-fonte (Source SCA, Binary SCA).


  • Tempo de teste. Implica testar a segurança da aplicação que está rodando a partir do artefato coletado (DAST, IAST e OAST).


  • Pós-implantação. Implica verificar a segurança da aplicação após implantação no ambiente de produção (WAF, RASP).


Agora você entende como funciona o DevSecOps Pipeline. Agora você pode avaliar a maturidade de seus pipelines DevSecOps, desenvolver um roteiro para seu desenvolvimento e escolher as ferramentas certas para cada tarefa.