blog conviso

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

May 25, 2023

By

Conviso

Application Security

How to integrate Semgrep on CI CD|plat01|plat2

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

Sobre o autor

Conviso
Application Security

Bachelor's degree in Computer Science from the Federal University of Alagoas. He has spoken at events such as the NullByte Security Conference and Hackers to Hackers Conference, and presented research projects at national and international events. He has experience in application security, exploit development, and vulnerability research in both userland and kernel land, having discovered vulnerabilities for companies like Microsoft, AMD, and Intel. His interests include operating system internals, compilers, malware development, vulnerability research, and EDR evasion.

Saiba mais