Intermediário Aplicação e Código

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

FerramentaTipoUso
OWASP ZAPScanner web OSSCI/CD, exploração manual
NiktoScanner web OSSReconhecimento rápido
Burp SuiteProxy + scannerPentest manual assistido
sqlmapSQLi especializadoSomente em ambientes autorizados
ffuf / wfuzzFuzzer HTTPDescoberta 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.