A utilização de DevSecOps em Engenharia de Dados

Michelle Mesquita
7 min readNov 30, 2022

--

Hoje, resolvi trazer esse post para falar de um assunto que vim estudando durante esse ano e que eu usei como trabalho final na minha pós em Engenharia de Dados.

A motivação desse trabalho começou justamente como ocorre nessa imagem anterior: Analistas de segurança e desenvolvedores trabalhando juntos para priorizar as vulnerabilidades. Enquanto o time de operações tenta priorizar novas funcionalidades nas aplicações para que assim seja possível melhorar ferramentas, analistas de segurança tentam mostrar como é importante o business entender que correções de vulnerabilidades precisam fazer parte do dia a dia do desenvolvedor até criarem o mindset de desenvolvimento seguro.

Assim, quando pensamos em DevSecOps, pensamos em esteira que compõe todo o ciclo de desenvolvimento de um software e automações que possam ser utilizados durante esse ciclo para que ajude a trazer maturidade, segurança e qualidade para as aplicações.

Diante disso, sabemos que existem diversas ferramentas que podemos utilizar desde a fase de build até o deploy da aplicação. Por conta disso, precisamos criar um processo para que seja possível adicionar as correções de vulnerabilidades nas sprints e que possível acompanhar o entendimento dos desenvolvedores frente ao tema.

Nesse trabalho, eu utilizei algumas ferramentas que pudessem gerar outputs frente ao SAST, DAST e SCA. Assim, o trabalho seguinte, do analista de segurança, é retirar os falsos positivos referentes as ferramentas e levar a informação para o desenvolvedor sobre os pontos que ele precisa corrigir.

Além disso, podemos gerar um dashboard de acompanhamento sobre as correções, gerar insights de como melhorar a abordagem da cultura (Security Champions) ou mesmo, mostrar aos gestores como as correções estão ocorrendo ou que tipo de vulnerabilidade está acontecendo com maior frequência.

A partir desses pontos definidos, foram utilizadas as seguintes ferramentas por serem bastante populares na área de segurança, possuírem alta assertividade nos alertas de vulnerabilidades e pela grande parte ser OpenSource:

- Snyk — Ferramenta utilizada para analisar vulnerabilidade em código (SAST)

- WhiteSource — Ferramenta utilizada para checagem de dependências (SCA)

- OWASP ZAP API — Ferramenta utilizada para análise dinâmica na aplicação (DAST)

- Dependency Check — Ferramenta utilizada para checagem de dependências (SCA)

- Bandit — Ferramenta utilizada para analisar vulnerabilidade em código (SAST) exclusivo para linguagem Python

As ferramentas escolhidas fazem parte do seguinte grupo e escopo de tecnologias frente a segurança: SAST (Teste de código da aplicação), DAST (Teste dinâmico na aplicação) e SCA (Checagem de bibliotecas da aplicação).

Após a análise, foram desenvolvidos diversos scripts que obtivessem as informações de vulnerabilidades, desenvolvidas na linguagem Python, por meio de repositórios obtidos no Github e Gitlab.

Para a extração dessas informações das APIs referentes ao Gitlab, foi necessário adicionar na pipeline de CI/CD do mesmo, uma opção de artefato, pois apenas dessa maneira, era possível extrair o objeto JSON que seria utilizado para desenvolvimento de arquivo CSV e a concatenação das diversas extrações em um único arquivo CSV final.

É possível analisar o csv final gerado com todas as vulnerabilidades presentes nos repositórios escolhidos no Github e Gitlab, além das ferramentas que foram integradas.

O código para o desenvolvimento da sprint encontra-se nesse repositório:

Após a etapa das escolhas de ferramentas de segurança, escolhi um banco de dados SQL para armazenar as vulnerabilidades, principalmente os status, para que pudesse criar as métricas necessárias para o entendimento da cultura de desenvolvimento seguro.

Dessa maneira, foi escolhido o MySQL, por ser um banco SQL, conforme explicado anteriormente e que possui uma integração muito boa com as bibliotecas em Python (linguagem utilizada no projeto majoritariamente). A linguagem Python foi utilizada por ser muito comum em projetos de Engenharia de dados e análise de dados.

Enquanto o Airflow foi escolhido por ter grande integração com a linguagem Python. Como também, ele é comumente utilizado na área de dados para a realização de uma pipeline de ETL (Extração, transformação e carregamento desses dados ). Um outro ponto a ser ressaltado também, como premissa do projeto, era utilizar ferramentas opensource, como ocorre com o Airflow.

Após os dados populados e os scripts das APIs estarem funcionando, foi necessário criar uma dag que pudesse criar cada uma das etapas e de maneira automatizada.

Assim, podemos analisar o script na imagem abaixo, onde foi adicionado para o script rodar mensalmente para coletar as vulnerabilidades. Esse tempo foi escolhido porque é um tempo comum para o desenvolvedor fazer o deploy (levar a aplicação para produção, após esse tempo).

Como também, podemos analisar que os scripts em Python são chamados por cada dag.

Por fim, podemos observar a pipeline executando de maneira funcional, no Airflow.

Na figura abaixo, podemos observar os dados coletados, através do visualizador de dados, DBeaver.

Por último, foi escolhida a ferramenta Trello para realizar o gerenciamento das tarefas dos desenvolvedores.

Essa escolha do Trello deve-se pela facilidade da utilização da API para adicionar cards ou atualizá-los por meio de uma ótima documentação.

Outro ponto que o Trello foi crucial para esse projeto é ter como premissa um quadro simples e muito intuitivo para a utilização da metodologia do Kanban que tem como premissa ser simples, incremental e que utiliza cards para tornar o gerenciamento visual.

Assim, foi criado um quadro que será utilizado nesse trabalho, como PoC (Prova de Conceito).

Após os testes, podemos observar o Airflow rodando com a etapa de integração da API do Trello. Isso pode ser visto na imagem abaixo, na etapa de “generate-card-trello”. Além disso, podemos observar que essa fase foi concluída com sucesso, portanto, sem erro na atualização ou inserção de um novo item no Trello.

Assim, conforme figuras abaixo, podemos ver a sequência de três etapas:

  • A primeira imagem abaixo, é possível observar a inserção de um novo item na coluna “To Do”, após o processo do Airflow ter iniciado.
  • Na segunda imagem abaixo, podemos ver esse mesmo item que agora está sendo tratado pelo time de desenvolvimento, na coluna “Testing”.
  • Na terceira imagem, após o status desse item ter sido alterado, ou seja, concluído, a pipeline envia de forma automatizada para a coluna “Done”.

Nessa imagem abaixo, disponibilizada pelo Airflow, podemos observar todas as etapas funcionando do início ao final do processo.

Por fim, podemos observar o Dashboard criado no Data Studio na imagem abaixo. Nesse Dashboard podemos filtrar pelo tipo de vulnerabilidade, ferramentas de SAST, DAST e SCA, como time responsável pela tratativa de vulnerabilidade (Squad) e quantidade de vulnerabilidades de acordo com a severidade e data limite para essa resolução.

Assim, é possível fazer um acompanhamento personalizado com os desenvolvedores e gerar insights para garantir a segurança das aplicações.

Aqui eu trouxe um resumo de como foi o trabalho e como é possível juntarmos áreas que podem parecer distantes inicialmente.

No entanto, podemos ver que é possível juntar diferentes ideias e gerar um grande valor tanto para a empresa, o negócio e principalmente para a área de segurança ❤

Espero que tenham gostado 💜

Qualquer dúvida, podem me chamar e o código do projeto está aqui:

Obrigada 👩‍💻

--

--

Michelle Mesquita
Michelle Mesquita

Written by Michelle Mesquita

DevSecOps & AppSec Engineer & Developer girl 👩‍💻

Responses (1)