3-D Secure 2.x: Protocolo, Fluxos e Mitigação de Fraude
Como o 3DS 2.x troca mais de 100 atributos para decidir entre atrito zero ou desafio, e onde estão os limites reais do protocolo.
🎧 audiobook · nível 1
3-D Secure 2.x: Protocolo, Fluxos e Mitigação de Fraude
Por que dominar o 3DS?
O 3-D Secure é o único protocolo de autenticação que transfere a responsabilidade financeira da fraude (Liability Shift) do lojista para o banco emissor. Compreender sua mecânica permite desenhar estratégias de antifraude eficientes, reduzindo o atrito na conversão de vendas sem anular a análise que o emissor já realiza.
Os 5 atores do ecossistema
- Cardholder — o portador do cartão (quem está comprando).
- Merchant / PSP — a loja virtual ou o gateway de pagamento que inicia o processo.
- 3DS Server (3DSS) — servidor técnico (geralmente fornecido pelo PSP/adquirente) que orquestra a mensagem do lado do lojista.
- Directory Server (DS) — ecossistema da bandeira (Visa, Mastercard, Elo) que valida as chaves e roteia a transação.
- Access Control Server (ACS) — o cérebro do banco emissor (ex: Itaú, Nubank) que autentica o portador.
O fluxo de autenticação (3DS 2.2)
diagrama do fluxo
[Browser/App] ─► (3DS Method / Device Data) ─► [3DSS]
└─► (AReq: ~150 campos) ─► [DS Bandeira] ─► [ACS Emissor]
│
┌────────────────────────────────────┴────────────────────────────────────┐
▼ ▼
[ Frictionless ] [ Challenge ]
Aprovação instantânea Validação ativa do portador
sem que o cliente perceba. CReq/CRes via iframe/WebView:
OTP, biometria ou push no app.- Coleta silenciosa (3DS Method): o navegador ou app do cliente coleta dados do dispositivo e os envia ao 3DSS.
- A Requisição (AReq): o 3DSS monta a Authentication Request com cerca de 150 campos (BIN, valor, moeda, IP, histórico da conta) e envia ao Directory Server.
- Roteamento: o DS direciona essa carga de dados para o ACS do banco emissor.
- Tomada de decisão: o ACS analisa os dados e escolhe entre Frictionless (risco baixo, aprovação invisível) ou Challenge (risco suspeito, abre canal seguro CReq/CRes para OTP, biometria ou push notification).
- Token de sucesso: as mensagens de resultado (RReq/RRes) finalizam o fluxo e geram o criptograma CAVV/ECI, que deve ser enviado junto com a requisição de autorização financeira para garantir o Liability Shift.
Dados que movem o ponteiro para o Frictionless
O banco emissor precisa de contexto para confiar na transação sem desafiar o cliente. Os campos mais críticos são:
- Consistência digital — browserUserAgent, browserAcceptHeader, browserLanguage, e combinação de resolução de tela com timezone.
- Intenção de compra (merchantRiskIndicator) — recompra, histórico de entrega no mesmo e-mail, vale-presente ou pré-venda.
- Maturidade da conta (acctInfo) — idade do cadastro na loja, modificações recentes de senha e histórico de tentativas falhas de pagamento.
- Relação comercial — histórico prévio de transações bem-sucedidas entre aquele portador específico e a sua loja.
- Isenções regulatórias — TRA Exemption (Transaction Risk Analysis) quando a taxa de fraude global do adquirente é extremamente baixa (comum sob PSD2 europeia).
Os limites reais do 3DS — o que ele NÃO resolve
O 3DS protege a camada de autenticação da transação no momento da compra, mas não é uma bala de prata. Ele deixa brechas para: (1) Scams / engenharia social — cliente legítimo induzido a aprovar a compra sob coação ou engano; (2) Fraude amigável — portador real faz a compra, passa pelo challenge, recebe o produto e depois alega desconhecer a cobrança; (3) Account Takeover bancário — se o fraudador clonou o dispositivo da vítima e tem acesso ao app do banco, ele mesmo aprova o challenge. O 3DS deve ser tratado como camada robusta de segurança, não como solução única.
Boas práticas de integração (lado merchant)
- Não invente a roda — colete os dados de dispositivo utilizando estritamente o SDK oficial do seu PSP. Coletas customizadas quebram as regras do EMVCo.
- Enriqueça o payload — preencha o objeto merchantRiskIndicator com o máximo de detalhes possível. Mais contexto para o emissor = maior taxa de frictionless.
- Antecipe o processo — execute o 3DS Method de forma invisível em um iframe assim que o cliente insere o número do cartão, antes mesmo do clique em Finalizar Compra.
- Amarre a autorização — garanta que os códigos ECI e CAVV retornados na autenticação sejam repassados integralmente na etapa de autorização. Sem eles, você perde o direito ao liability shift.
- Monitore por BIN — acompanhe taxas de conversão e challenge divididas por emissores. Se um banco específico força challenge em 100% das transações, acione seu adquirente para calibrar as regras junto à bandeira.
Checklist de produção
Antes de subir para live: (a) validar CAVV/ECI no log de autorização; (b) montar dashboard com frictionless rate, challenge rate e chargeback rate por BIN; (c) testar fallback quando ACS está fora do ar (3DS 2.x permite degradação controlada); (d) revisar consentimento e LGPD para a coleta de device fingerprint.
Template OffSec · aplicar antes de rodar
Objetivo → Preparação → Execução → Evidência → Ética
Objetivo
Compreender protocolos (3DS, tokenização, PIX) e falhas comuns no checkout para reforçar antifraude — sem tocar em cartão real de terceiros.
Pré-requisitos
- Ambiente sandbox do PSP com credenciais de teste
- Coleção Postman/Insomnia com fluxos parametrizados
- Cartões de teste oficiais (Visa 4111..., Mastercard 5555..., etc.)
- Log estruturado (JSON) para cada request/response
Passos
- Mapear o fluxo (auth → 3DS challenge → capture → refund)
- Testar cada estado de erro documentado pelo PSP
- Injetar variações no device fingerprint e observar o desafio 3DS
- Medir latência e códigos de resposta para cada persona-teste
- Consolidar findings em playbook com decision tree para o time de risco
Evidências a coletar
- Coleção Postman versionada
- Log request/response com sanitização de PAN (só BIN + últimos 4)
- Screenshots do painel do PSP mostrando a transação
Regra prática: se você não guardou evidência reprodutível, o achado não existe.
Guia prático (lab autorizado)
alvo · Sandbox oficial do PSP (Stripe test, Adyen test, PagSeguro sandbox)
curl https://api.stripe.com/v1/payment_intents -u sk_test_...: -d amount=1000 -d currency=brl -d 'payment_method_types[]=card'verificar · O painel do PSP em modo teste é a fonte da verdade — compare com o response do seu backend. Divergência = bug no seu lado.
Checklist interativo
Checklist ético (marcar antes do primeiro comando)
Autorização, escopo, lab e proteção de dados. Sem 100%, não roda fora do lab.
Prática segura · Pagamentos
→ guia do labMonte um ambiente isolado antes de qualquer teste — use Docker (DVWA/juice-shop), uma VM host-only ou um alvo autorizado (HTB, TryHackMe, PortSwigger Academy).
Nunca aponte para alvo em produção. Se estiver no celular, use proot-distro + Debian para não sujar o Termux principal.
