Phishing de Marca e Defesa de Domínio
O vetor
Vetor real: atacante registra seu-app.exemplo.workers.dev (typo) ou exemplo-login.com (lookalike), clona sua página de admin, e envia e-mail para seus clientes (no futuro SaaS) pedindo "atualização de senha". Como seu domínio não tem SPF/DKIM/DMARC, o e-mail do atacante pode spoofar contato@exemplo.com se você tiver esse domínio.
O que testamos: (a) seu domínio tem proteção contra spoofing de e-mail, (b) não há lookalikes registrados, (c) sua página de admin é indexável (deve NÃO ser).
Os passos
Preparação:
# Seu domínio de produção é workers.dev (não tem e-mail associado).
# Quando você registrar exemplo.com (ou similar), ESTES são os testes.
# Hoje rodamos a versão preventiva no domínio atual.
Passo 1 — Verificar SPF/DKIM/DMARC no seu domínio (quando tiver .com):
# Substitua SEU_DOMINIO quando tiver um:
# SPF:
nslookup -type=TXT SEU_DOMINIO.com | grep "v=spf1"
# DMARC:
nslookup -type=TXT _dmarc.SEU_DOMINIO.com | grep "v=DMARC1"
# DKIM:
nslookup -type=TXT default._domainkey.SEU_DOMINIO.com | grep "v=DKIM1"
O que esperar
Resultado esperado HOJE (workers.dev): vazio — Cloudflare Workers não tem e-mail. ✅ Correto (não envia e-mail).
Resultado esperado quando registrar .com:
SPF: "v=spf1 include:_spf.google.com -all" # só Google Mail pode enviar
DKIM: "v=DKIM1; k=rsa; p=MIGfMA0GCS..." # chave pública de assinatura
DMARC: "v=DMARC1; p=reject; rua=mailto:sec@SEU_DOMINIO.com; adkim=s; aspf=s"
Passo 2 — Buscar lookalikes registrados (OSINT legítimo no próprio nome):
# DomainsDB API (grátis, público) — busca variantes do seu nome:
curl -s "https://api.domainsdb.info/v1/domains/search?domain=exemplo" \
| python -m json.tool | head -30
Resultado esperado: lista de domínios que contêm "exemplo". Se alguém registrou uma variante, investigue.
Passo 3 — Verificar se sua página de admin está indexável (deve NÃO estar):
BASE="https://seu-app.exemplo.workers.dev"
# robots.txt — admin DEVE estar em Disallow:
curl -s "$BASE/robots.txt"
Resultado esperado:
User-Agent: *
Allow: /
Disallow: /admin/
Disallow: /api/admin/
✅ Confirmado ao vivo: /admin/ e /api/admin/ em Disallow. Bom — mas robots.txt é sugestão, não bloqueio.
Passo 4 — Verificar X-Robots-Tag na página de admin:
curl -s -I "$BASE/admin" | grep -i "x-robots-tag\|noindex\|noarchive"
Resultado esperado: x-robots-tag: noindex, noarchive — garante que Google não indexa mesmo se alguém linkar.
Passo 5 — Monitorar lookalikes com canary:
# Quando tiver .com, registre as variações comuns ANTES de atacantes:
# - exemplo.com (typo)
# - exemplo.net (outro TLD)
# - adrianoterres-rosa.com (hífen)
# - antigravitymedia.com (marca)
# Use Cloudflare Registrar para os principais (~$10/ano cada).
# Configure "Domain Alert" no Cloudflare para receber notificação se aparecer lookalike.
Análise — o que isto significa:
- Sem SPF/DKIM/DMARC, qualquer um pode spoofar e-mails do seu domínio (quando tiver .com).
- Sem registrar lookalikes, atacantes criam domínios que imitam o seu.
robots.txtnão impede indexação — sóX-Robots-Tag: noindexou<meta name="robots" content="noindex">garante.
Como corrigir
Correção necessária (P2):
- Registrar domínio próprio (
exemplo.comou marca do produto). - SPF:
v=spf1 include:_spf.google.com -all(só provedor autorizado envia). - DKIM: adicionar registro DNS da chave pública do provedor de e-mail.
- DMARC:
v=DMARC1; p=reject; rua=mailto:sec@dominio.com; adkim=s; aspf=s(rejeita e-mails não assinados). - Registrar lookalikes nos TLDs principais (.com, .com.br, .net).
- Cloudflare Brand Alert ou MarksPan para monitorar novas_variantes.com.
X-Robots-Tag: noindex, noarchiveem todas as rotas/admin/*.- Quando virar SaaS: usar Brand-Alert API ou PhishDeck para detectar páginas de phishing clonadas.
🧹 LIMPEZA ESPECÍFICA DO BLOCO G
# Ex. 27 — lead de teste:
cd /d/Antigravity-Monetizacao_TikTok/app
node -e "
(async()=>{
const fs=require('fs');
const env=Object.fromEntries(fs.readFileSync('.env.local','utf8').split(/\r?\n/).filter(l=>l.includes('=')).map(l=>[l.slice(0,l.indexOf('=')).trim(),l.slice(l.indexOf('=')+1).trim()]));
const SB=env.NEXT_PUBLIC_SUPABASE_URL, SRK=env.SUPABASE_SERVICE_ROLE_KEY;
const H={apikey:SRK,Authorization:'Bearer '+SRK};
const d=await fetch(SB+'/rest/v1/leads?car_title=ilike.*pentest*',{method:'DELETE',headers:H});
console.log('DELETE leads pentest:',d.status);
})()"
# Ex. 28 — nenhum dado persistido (só 10 requests de login falhados). Nada para limpar.
# Ex. 29 — só leitura. Nada para limpar.
# Ex. 30 — nenhum dado (endpoint 404). Nada para limpar.
# Ex. 31 — só DNS/OSINT. Nada para limpar.
📋 Novos achados do Bloco G (adicionar ao placar)
| # | Achado | Severidade | Exercício |
|---|---|---|---|
| 32 | Lead poisoning: /api/leads aceita WhatsApp de terceiro sem prova de propriedade |
🔴 Crítico | 27 |
| 33 | Credential stuffing: sem lockout, sem rate limit, sem 2FA no login admin | 🟠 Alto | 28 |
| 34 | Timing side-channel no login (e-mail válido 0,8s vs inválido 0,14s) | 🟠 Alto | 28 |
| 35 | Hash de senha admin é SHA-256 (GPU-friendly, bilhões/s) — usar bcrypt/argon2 | 🟠 Alto | 28 |
| 36 | Scraping sem rate limit: 20 req seguidas no /api/feed = 20× HTTP 200 |
🟠 Alto | 29 |
| 37 | RLS leads exposto: anon key lê PII (nome + WhatsApp) de todos os leads |
🔴 Crítico (já no placar #3) | 29 |
| 38 | Webhook de pagamento não existe — documentar anti-forjamento antes de implementar | 🟡 Preventivo | 30 |
| 39 | Sem SPF/DKIM/DMARC (preventivo — sem domínio .com ainda) | 🟡 Preventivo | 31 |
| 40 | Admin sem X-Robots-Tag: noindex (só robots.txt, que é sugestão) |
🟡 Médio | 31 |