Análise dinâmica (DAST) — fuzzing, scanner contra a app rodando
DAST (Dynamic Application Security Testing) testa a aplicação enquanto ela roda. Em vez de ler o código-fonte, o scanner envia requisições reais e observa as respostas — da mesma forma que um atacante faria. Isso revela problemas que só aparecem em tempo de execução: configurações erradas, headers ausentes, comportamentos inesperados.
DAST vs SAST
SAST DAST
───────────────────── ──────────────────────
Lê código-fonte Interage com app rodando
Roda sem deploy Requer ambiente ativo
Encontra: taint paths, Encontra: misconfig, XSS
SQL injection no código em runtime, auth bypass
Alta taxa falso positivo Resultados mais concretos
Rápido no CI Mais lento, requer infra
Ferramentas Comuns
| Ferramenta | Tipo | Uso |
|---|---|---|
| OWASP ZAP | Scanner web OSS | CI/CD, exploração manual |
| Nikto | Scanner web OSS | Reconhecimento rápido |
| Burp Suite | Proxy + scanner | Pentest manual assistido |
| sqlmap | SQLi especializado | Somente em ambientes autorizados |
| ffuf / wfuzz | Fuzzer HTTP | Descoberta de endpoints |
Scan Básico com OWASP ZAP
ZAP tem modo CLI para automação:
# Usando Docker — aponta para ambiente de teste (nunca produção)
docker run -t owasp/zap2docker-stable zap-baseline.py \
-t http://staging.example.com \
-r relatorio-zap.html
# Saída típica
WARN-NEW: Web Cache Deception [10056] x 1
WARN-NEW: Missing Anti-clickjacking Header [10020] x 4
FAIL-NEW: SQL Injection [40018] x 1
O -r gera relatório HTML. FAIL indica achados críticos configuráveis como gate no CI.
Fuzzing de API REST
Fuzzing envia entradas malformadas ou inesperadas para descobrir comportamentos anômalos:
# ffuf — fuzzing de parâmetros em endpoint de teste
ffuf -w /wordlists/payloads.txt \
-u "http://staging.example.com/api/user?id=FUZZ" \
-fc 200 \
-o resultados.json
# Observar: respostas 500 (erro interno), timeouts, respostas diferentes
Payloads comuns para fuzzing:
- Strings muito longas (buffer overflow)
- Caracteres especiais:
' " ; < > & | \ - Valores limítrofes:
0,-1,2147483648,null - Path traversal:
../../../etc/passwd - Injection clássicos:
' OR 1=1--
Nunca aponte ferramentas de fuzzing para produção ou sistemas sem autorização.
Autenticação no DAST
Muitas páginas exigem login. ZAP e Burp suportam sessões autenticadas:
# ZAP automation framework — auth via form
authentication:
method: form
loginUrl: http://staging.example.com/login
loginRequestData: "username={%username%}&password={%password%}"
usernameField: username
passwordField: password
Sem autenticação, o scanner só enxerga a superfície pública da aplicação.
Integração no CI/CD
# .github/workflows/dast.yml
name: DAST
on:
push:
branches: [staging]
jobs:
zap-scan:
runs-on: ubuntu-latest
steps:
- name: ZAP Baseline Scan
uses: zaproxy/action-baseline@v0.12.0
with:
target: 'http://staging.example.com'
fail_action: true
cmd_options: '-l WARN'
Execute DAST apenas contra ambientes de staging com dados fictícios — nunca produção.
Limites do DAST
- Não acessa lógica interna — testa apenas a superfície HTTP.
- Pode ser lento para apps grandes (horas de scan completo).
- Gera tráfego real: pode disparar alertas de monitoramento ou afetar performance do ambiente.
- Cobertura depende da capacidade de navegar a aplicação (SPAs exigem configuração extra).
DAST complementa SAST. Juntos cobrem tanto análise de código quanto comportamento em runtime.