Introdução ao SAST e DAST: análise de segurança no pipeline de CI

A segurança de software deixou de ser uma etapa isolada no final do desenvolvimento para se tornar um processo contínuo integrado ao pipeline de CI/CD. Duas abordagens fundamentais para essa integração são o SAST (Static Application Security Testing) e o DAST (Dynamic Application Security Testing). Este artigo apresenta os fundamentos dessas técnicas, como combiná-las no pipeline e as melhores práticas para implementação eficaz.

1. Fundamentos de SAST e DAST

SAST — Análise Estática de Segurança

SAST analisa o código-fonte, bytecode ou binários sem executar a aplicação. Funciona como um "revisor de código automatizado" que examina padrões, fluxos de dados e configurações para identificar vulnerabilidades como injeção SQL, XSS e vazamento de informações sensíveis.

Vantagens:
- Detecta vulnerabilidades nas fases iniciais do desenvolvimento
- Cobre todo o código, incluindo caminhos não executados
- Fornece localização exata do problema no código

Limitações:
- Alto índice de falsos positivos
- Não detecta vulnerabilidades de configuração de runtime
- Pode perder vulnerabilidades que surgem apenas em tempo de execução

DAST — Análise Dinâmica de Segurança

DAST testa a aplicação em execução, simulando ataques reais contra endpoints, formulários e APIs. Não requer acesso ao código-fonte, atuando como um "pentest automatizado".

Vantagens:
- Detecta vulnerabilidades reais no ambiente de execução
- Identifica problemas de configuração e dependências
- Menos falsos positivos que SAST

Limitações:
- Só testa caminhos executáveis
- Requer aplicação em funcionamento (staging ou produção)
- Pode perder vulnerabilidades em código não acessível via interface

2. Por que integrar segurança no pipeline de CI?

A abordagem shift-left move a segurança para as fases iniciais do ciclo de desenvolvimento. Estudos indicam que corrigir uma vulnerabilidade na produção custa até 30 vezes mais que corrigi-la durante a codificação.

Benefícios principais:
- Redução de custos: correções precoces evitam retrabalho
- Conformidade: atende requisitos de OWASP Top 10, PCI-DSS e ISO 27001
- Automação: elimina verificações manuais repetitivas
- Rastreabilidade: cada commit tem seu relatório de segurança associado

3. Ferramentas SAST populares e sua integração

Semgrep

Ferramenta open-source que usa regras declarativas para encontrar padrões de código. Suporta múltiplas linguagens e é fácil de integrar em pipelines.

Configuração básica no GitHub Actions:

name: SAST Scan
on: [push, pull_request]
jobs:
  semgrep:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Semgrep
        uses: semgrep/semgrep-action@v1
        with:
          config: p/owasp-top-ten

SonarQube

Plataforma completa que combina análise estática com qualidade de código. Oferece dashboards e histórico de evolução.

Exemplo de comando para pipeline:

sonar-scanner \
  -Dsonar.projectKey=meu-projeto \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://sonarqube:9000 \
  -Dsonar.login=$SONAR_TOKEN

Checkmarx

Ferramenta enterprise com suporte a centenas de linguagens e frameworks. Oferece correlação de fluxo de dados para reduzir falsos positivos.

4. Ferramentas DAST populares e sua integração

OWASP ZAP

Ferramenta open-source mais utilizada para DAST. Oferece modos passivo (apenas observa) e ativo (envia payloads maliciosos).

Automação com Docker:

docker run -v $(pwd):/zap/wrk/:rw \
  -t ghcr.io/zaproxy/zaproxy:stable \
  zap-api-scan.py \
  -t https://staging.meuaplicativo.com/api \
  -f openapi \
  -r relatorio.html

Burp Suite Professional

Ferramenta comercial com scanner automatizado e recursos avançados de interceptação. Ideal para equipes de segurança dedicadas.

Acunetix

Solução enterprise com foco em vulnerabilidades web, incluindo detecção de SQL Injection e XSS com alta precisão.

5. Estratégias de pipeline com SAST e DAST combinados

A ordem ideal de execução segue o fluxo natural do desenvolvimento:

  1. SAST — executado antes do build, no código-fonte
  2. Build — compilação e testes unitários
  3. Deploy em staging — ambiente de teste
  4. DAST — após deploy, contra a aplicação em execução

Exemplo prático de pipeline YAML (GitLab CI):

stages:
  - security-static
  - build
  - deploy-staging
  - security-dynamic

sast-job:
  stage: security-static
  script:
    - semgrep --config=p/owasp-top-ten --output=sast-report.json
  artifacts:
    paths: [sast-report.json]

build-job:
  stage: build
  script:
    - docker build -t app:$CI_COMMIT_SHORT_SHA .

deploy-staging:
  stage: deploy-staging
  script:
    - kubectl set image deployment/app app=app:$CI_COMMIT_SHORT_SHA

dast-job:
  stage: security-dynamic
  script:
    - zap-api-scan.py -t https://staging.app.com/api -r dast-report.html
  artifacts:
    paths: [dast-report.html]
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

Gating baseado em severidade:

# Exemplo de bloqueio com base em resultados críticos
if grep -q "CRITICAL" sast-report.json; then
  echo "Vulnerabilidades críticas encontradas. Pipeline bloqueado."
  exit 1
fi

6. Desafios e boas práticas na implementação

Gerenciamento de falsos positivos

  • Crie um baseline inicial para cada projeto
  • Marque achados como "falso positivo" com justificativa
  • Revise regras periodicamente para ajustar sensibilidade

Performance do pipeline

  • Execute SAST em paralelo com testes unitários
  • Use cache de resultados para arquivos não modificados
  • Limite scanners DAST a branches principais (main, develop)

Cultura de segurança contínua

  • Realize treinamentos trimestrais sobre OWASP Top 10
  • Estabeleça um "security champion" por squad
  • Promova hackathons de segurança para engajar a equipe

7. Métricas e evolução contínua

Principais KPIs

  • Tempo médio de detecção (MTTD): reduzir de dias para horas
  • Taxa de correção: percentual de vulnerabilidades corrigidas em 7 dias
  • Cobertura de segurança: percentual de código e endpoints escaneados

Integração com dashboards

# Exemplo de exportação para Grafana via Loki
semgrep --config=p/owasp-top-ten --json \
  | jq '{results: [.results[] | {severity, path, check_id}]}' \
  > /var/log/sast-results.json

Ciclo de melhoria contínua

  1. Mensal: revisão de falsos positivos e ajuste de regras
  2. Trimestral: atualização de ferramentas e regras OWASP
  3. Semestral: auditoria de eficácia dos scanners com testes manuais

Referências