Code FightersSegurança de Aplicação

Como integrar o Semgrep no CI/CD e enviar os resultados para a Conviso Platform

Atualmente, é uma prática muito comum integrar verificações de segurança durante a fase de integração contínua e entrega contínua (CI/CD) do desenvolvimento de software. Isso traz o benefício de fornecer detecção precoce de defeitos de segurança, potencialmente bloqueando a entrega da aplicação quando um problema crítico é encontrado. Um dos scanners estáticos mais famosos atualmente é o Semgrep.

É uma ferramenta de análise estática de código aberto usada para encontrar bugs e aplicar padrões de codificação. Ele pode ser executado em vários níveis do ciclo de desenvolvimento de software, incluindo a fase de CI/CD. Pode ser configurado para ser executado a cada pull request ou quando um push é feito em branchs e arquivos específicos. No modo CI, ele retornará um código de status diferente e, dependendo do que acontece durante a execução, quando um bug ter critério bloqueador seja encontrado ou aconteça algum erro interno.

A Conviso Platform [5, 6] é nossa plataforma de Software como Serviço (SaaS) que suporta todo o ciclo de vida de segurança no desenvolvimento de software. Um dos benefícios do Conviso Platform é ajudar a centralizar a comunicação entre equipes de segurança e desenvolvimento, por meio da integração de ferramentas.

Neste post, mostraremos como configurar o Semgrep para ser executado por meio do GitHub Actions e enviar os resultados encontrados pelo scan para a Conviso Platform.

Semgrep no GitHub Actions

O GitHub Actions é uma plataforma de CI/CD que permite automatizar tarefas para o seu projeto. O workflow é definido em arquivos YAML que são criados no diretório `.github/workflows` do repositório. Nesses arquivos, você pode definir workflows que são acionados quando certos eventos ocorrem (por exemplo, pull requests). Você pode escrever fluxos de trabalho (i.e., workflows) por conta própria ou pode usar alguns do marketplace do GitHub (por exemplo, semgrep-action).

Uma configuração simples pode ser vista abaixo:

name: Semgrep
on:
  pull_request: {}
  push:
    branches:
      - main
      - master
    paths:
      - .github/workflows/semgrep.yml
  schedule:
    - cron: '0 0 * * 0'
  workflow_dispatch: {}
jobs:
  semgrep:
    name: Scan
    runs-on: ubuntu-20.04
    env:
      SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
    container:
      image: returntocorp/semgrep
    steps:
      - uses: actions/checkout@v3
      - name: Semgrep scan
        id: scan
        run: semgrep ci --config=auto --sarif -o result.sarif
      - name: Upload results
        if: failure() && steps.scan.outcome == 'failure'
        uses: actions/upload-artifact@v3
        with: 
          name: result.sarif
          path: result.sarif

Ele executará o workflow do Semgrep uma vez por semana, a cada pull request, e também quando alguma alteração for acionada nas branchs main ou master. O workflow também salvará o resultado da verificação do Semgrep no formato SARIF.

O que são Artifacts

Um artifact é um arquivo ou conjunto de arquivos produzidos durante a execução de um workflow. Os artifacts também podem ser usados para compartilhar dados com vários jobs em seu workflow. No GitHub Actions, existem duas ações prontas para lidar com artifacts. Quando um job precisa disponibilizar dados para outro job, ele pode usar a ação action/upload-artifact para fazer o upload de um arquivo. Quando o upload é concluído, o outro job pode usar a ação actions/download-artifact para baixar o arquivo e fazer o que for necessário com ele.

Como se comunicar com a API da Conviso Platform

É possível interagir com a Conviso Platform por meio do Conviso CLI e você pode usar essa funcionalidade para importar os resultados de um arquivo SARIF e criar os resultados em um projeto na Conviso Platform. Como exemplo, escrevemos um workflow do GitHub Actions que obtém o arquivo SARIF gerado pelo Semgrep, extrai os resultados e as envia para a Conviso Platform para fazer a gestão lá.

As informações necessárias para o workflow são: `FLOW_API_KEY`, `FLOW_PROJECT_CODE` e `OUTPUT_FILEPATH`. Você pode armazená-las como Action Secrets no seu repositório do GitHub (Configurações > Segurança/Secrets > Actions).

O arquivo de configuração final para enviar as questões enontradas durante uma verificação pode ser visto abaixo:

name: Semgrep + Conviso Platform

on:
  workflow_dispatch:
  push:
    branches:
      - main

jobs:
  # You can change the Scanner here to anyone who performs SARIF output
  scan:
    name: Security Scan
    runs-on: ubuntu-20.04
    container:
      image: returntocorp/semgrep
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Semgrep scan
        id: scan
        run: semgrep --config=auto --sarif -o ${{secrets.OUTPUT_FILEPATH}}

      - name: Upload results
        uses: actions/upload-artifact@v3
        with:
          name: ${{secrets.OUTPUT_FILEPATH}}
          path: ${{secrets.OUTPUT_FILEPATH}}

  submit_findings:
    name: Conviso Findings Importation
    needs: scan
    runs-on: ubuntu-20.04
    container:
      image: convisoappsec/flowcli:1.12.0-rc.2
      env:
        FLOW_API_KEY: ${{secrets.FLOW_API_KEY}}
        FLOW_PROJECT_CODE: ${{secrets.FLOW_PROJECT_CODE}}
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Download result from previous scan
        uses: actions/download-artifact@v3
        with:
          name: ${{secrets.OUTPUT_FILEPATH}}

      - name: SARIF Importation
        run: |
          conviso findings import-sarif --input-file ${{secrets.OUTPUT_FILEPATH}}

O workflow possui dois jobs. Um é responsável por executar o Semgrep e gerar o arquivo SARIF, e o outro enviará os resultados para a Conviso Platform. Os resultados serão denominados “findings” na Conviso.

Os Findings na Conviso Platform

Esta tela mostra os Findings agrupadas por título:

Os Findings na Conviso Platform

E esta tela mostra um Finding individual:

Findings individual

Conclusão

Neste post, demonstramos apenas uma maneira de integrar os resultados do scanner Semgrep, executando no modo CI, com a nossa plataforma. A Conviso Platform suporta diferentes tipos de integrações e possui muitos recursos para ajudar você a aprimorar a segurança do seu negócio.

Referências

Autores:

Gabriel Quadros – Analista de Segurança
Ricardo Silva – Analista de Segurança

Tradução: Anderson Bosa – Engenheiro Backend

Nova call to action
About author

Articles

Uma equipe de profissionais, altamente conectados com as notícias, técnicas e informações sobre a segurança de aplicações.
Related posts
Segurança de Aplicação

Secure by Design em ASPM - Entenda como as ferramentas se integram nesse processo

Em um momento onde continuamos a ver problemas de vazamentos de dados e vulnerabilidades em…
Read more
Segurança de Aplicação

Nova CVE-2023-4314 identificada em plugin do WordPress

Neste artigo, vamos analisar um estudo de caso de uma CVE encontrada em um plugin do WordPress…
Read more
Segurança de Aplicação

Mitigação de Vulnerabilidades: Elevando a Segurança no Desenvolvimento de Software

No cenário digital em constante evolução, a importância da segurança de software não pode ser…
Read more

Deixe um comentário