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:
- SAST — executado antes do build, no código-fonte
- Build — compilação e testes unitários
- Deploy em staging — ambiente de teste
- 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
- Mensal: revisão de falsos positivos e ajuste de regras
- Trimestral: atualização de ferramentas e regras OWASP
- Semestral: auditoria de eficácia dos scanners com testes manuais
Referências
- OWASP SAST Guidelines — Diretrizes oficiais da OWASP para ferramentas de análise estática de segurança
- Documentação Semgrep — Guia completo de regras, integrações e CLI do Semgrep
- OWASP ZAP User Guide — Documentação oficial do ZAP com exemplos de scans automatizados
- GitLab SAST Configuration — Como configurar scanners SAST nativamente no GitLab CI
- GitHub Security Scanning — Guia da GitHub para integração de code scanning em workflows
- NIST Guide to Static Analysis — Publicação do NIST sobre técnicas de análise estática para segurança
- SonarQube Security Analysis — Documentação oficial sobre regras de segurança no SonarQube