Cartões de crédito são vulneráveis a ataques do tipo brute force
(metin.nextc.org)- O PCI DSS limita o armazenamento e a exibição de dados do cartão, mas mesmo apenas com informações permitidas como o BIN, os 4 últimos dígitos e a data de validade, ainda é possível continuar tentando cobranças adicionais em outros comerciantes
- Em uma conta comprometida, o atacante obteve, por meio da página de 3D Secure do banco, a informação de que o cartão ainda podia ser usado, o nome do banco, o número do cartão mascarado e a data de validade completa, e cerca de 6 horas depois iniciou tentativas de autenticação em vários comerciantes
- O número do cartão de pagamento (PAN) tem uma estrutura com IIN, identificador da conta e dígito verificador Luhn; se a resposta do gateway de pagamento indicar qual valor está errado, fica fácil adivinhar PAN, validade e CVV
- A velocidade observada no teste real foi de 6 tentativas por segundo, cerca de 2 por segundo por API, e como o IP mudava via proxy e o número do cartão também mudava constantemente, é difícil para o comerciante detectar brute force
- O atacante usou comerciantes com exceção de 3D Secure para transferir para uma carteira eletrônica todo o limite que havia sido reduzido; o dinheiro foi devolvido via chargeback, mas o rate limit de CVC2 do banco ainda se limitava a bloqueios de alguns minutos
O que o PCI DSS bloqueia e o que deixa passar
- O PCI DSS é um padrão do setor que define as medidas mínimas de segurança exigidas ao lidar com dados bancários sensíveis, como os de cartão de crédito, e limita o armazenamento e a exibição para evitar que todas as informações sejam expostas mesmo se a conta for comprometida ou os dados do cartão forem parar nas mãos de terceiros
- Segundo o PCI DSS 4, as informações que podem ser exibidas na tela ou no recibo são o PAN mascarado, o nome do titular do cartão, o código de serviço e a data de validade; no caso do PAN, podem ser mostrados o BIN e os 4 últimos dígitos
- As informações que não podem ser exibidas se limitam aos dados completos de trilha, ao código de verificação do cartão e ao PIN/bloco de PIN
- Tanto sites de e-commerce quanto recibos físicos podem ser afetados pelo mesmo problema, e parte das informações do cartão pode vazar não só por comprometimento de conta, mas também por recibos que não foram descartados
Fluxo do incidente
- A vítima usava um cartão de crédito virtual com limite restrito, havia ativado o 3D Secure como autenticação em duas etapas e armazenava o cartão apenas em comerciantes conhecidos
- Depois que uma conta criada há muito tempo foi comprometida, chegou um SMS sobre uma tentativa de compra em um site onde o cartão estava salvo; a vítima entrou imediatamente, trocou a senha, confirmou a tentativa de compra e reduziu bastante o limite do cartão virtual
- O motivo para não desativar totalmente o cartão foi a avaliação de que os dados completos do cartão não haviam sido comprometidos
- Cerca de 6 horas após a invasão inicial, ocorreram 3 ou 4 tentativas de SMS de 3D Secure em vários comerciantes nunca usados; todas falharam, mas depois se tornaram uma pista importante para entender o método do ataque
- Alguns minutos depois, enquanto a vítima ligava para o banco para desativar totalmente o cartão, o atacante usou outros comerciantes sem 3D Secure para drenar, em várias cobranças, todo o limite reduzido
- O dinheiro foi movido para a carteira eletrônica de um marketplace que permite saque em dinheiro, e a vítima recebeu o valor de volta do banco após solicitar chargeback
Informações obtidas pelo atacante
- O atacante tentou fazer um pagamento na conta comprometida, visualizou a página de 3D Secure do banco, cancelou o pedido e saiu
- Nesse processo, obteve a informação de que o cartão ainda estava ativo, o nome do banco, o número do cartão mascarado e a data de validade completa
- Em geral, para concluir normalmente um pagamento com cartão, considera-se necessário ter os 16 dígitos completos do PAN, a data de validade, o número CVC2 e informações como o celular usado no 3D Secure
- No ataque real, foi possível continuar as tentativas em outros comerciantes apenas com parte dessas informações
Estrutura do PAN e possibilidade de adivinhação
- O número do cartão de pagamento (PAN) é o identificador usado em cartões de crédito, débito, valor armazenado e gift cards
- O PAN segue um esquema numérico comum conforme a ISO/IEC 7812, com a seguinte estrutura interna
- Issuer Identification Number (IIN) de 6 ou 8 dígitos
- Um identificador de conta individual de até 12 dígitos
- Um dígito verificador calculado pelo algoritmo de Luhn
- O banco da vítima não autorizava pagamentos apenas com o número do cartão, exigindo PAN, validade e CVV em conjunto
- Alguns bancos e gateways de pagamento conseguem processar cobranças apenas com o número do cartão, o que foi a parte mais difícil de acreditar para a vítima
Como as respostas do gateway de pagamento criaram as condições para brute force
- O banco da vítima recusava pagamentos com valores ausentes ou incorretos, mas informava pelo código de resposta qual parte estava errada
- Exemplos de resposta
- “Não é um cartão de crédito válido”
- “O cartão expirou”
- “Todas as outras informações estão corretas, mas o CVV está errado”
- Essas respostas podem ser usadas pelo atacante para distinguir quais valores de número do cartão, validade e CVV estão corretos ou incorretos
- No ataque real, o atacante testou a uma velocidade de 6 tentativas por segundo, cerca de 2 por segundo por API
- Essa velocidade é difícil de detectar do ponto de vista do comerciante, porque o IP de origem muda via proxy, os números de cartão também não são iguais por causa da própria natureza do brute force, e a frequência das requisições é muito baixa
O papel dos comerciantes com exceção de 3D Secure
- O banco mantém uma lista de comerciantes com exceção de 3D Secure, considerados confiáveis o suficiente para receber pagamentos e assinaturas sem 3D Secure
- Esses comerciantes assumem a responsabilidade caso haja chargeback
- O atacante usou comerciantes sem 3D Secure para mover para uma carteira eletrônica valores dentro do limite do cartão
Resposta posterior e problemas restantes
- O dinheiro foi devolvido rapidamente via chargeback
- Foi informado ao comerciante que o sistema que convertia pagamentos com cartão em dinheiro estava sendo usado para saques não autorizados, mas o comerciante respondeu que a questão deveria ser tratada com o banco
- Também foi informado ao site de e-commerce que exibir 10 dígitos do número do cartão junto com a data de validade facilita o ataque, mas o site respondeu que não considerava isso uma vulnerabilidade e que o sistema havia sido projetado intencionalmente de acordo com os padrões PCI DSS 3 e 4
- Pessoas que criam APIs de pagamento ou trabalham no setor de pagamentos não se mostraram surpresas, e alguns comerciantes responderam que conseguem processar transações até sem a data de validade
- Depois do incidente, a empresa que convertia pagamentos por cartão em dinheiro deixou de processar isso sem 3D Secure
- O banco da vítima ainda mantém um rate limit relativamente tolerante contra brute force de CVC2; quando o limite é atingido, o cartão é apenas bloqueado temporariamente por alguns minutos
1 comentários
Comentários do Hacker News
Vendo casos relacionados, talvez o autor original estivesse atrás da causa errada. Recentemente apareceram cobranças pequenas não autorizadas ligadas a FB/Meta no meu cartão de crédito, e parecia que alguém estava testando se o cartão seria detectado
Liguei para a administradora, cancelei a cobrança, encerrei o cartão e recebi outro com novo número, nova validade e novo CVV, mas as cobranças fraudulentas de FB/Meta começaram de novo até nesse cartão novo que eu nunca tinha usado. A causa era a carteira digital, e mesmo cancelando o cartão, dados como o número podiam ser transferidos pela carteira digital
Liguei de novo para a administradora e pedi para cancelarem todas as carteiras digitais; eram 99 ao todo, e isso não podia ser resolvido online, então precisei falar com um atendente do call center. Mesmo depois de ouvir a explicação de que todas as cobranças recorrentes seriam resetadas, tive de pedir o cancelamento do cartão e de todas as carteiras digitais, e ainda esperei 20 minutos. Cancelar um cartão pode não ser o que a gente imagina, e como cobranças recorrentes são muito lucrativas para as operadoras, cancelar isso parece representar uma grande perda de receita
Blog da Stripe: https://stripe.com/resources/more/what-is-a-card-account-upd...
Se tivesse vazado de outro lugar, provavelmente ninguém tentaria fazer login em contas de e-commerce não relacionadas
Este texto não aborda a parte mais importante. A liquidação, que é o consentimento do banco para mover dinheiro da minha conta para o comerciante, é algo completamente separado da autorização
Autorização é EMV moderno, ou seja, autenticação por “chip e PIN”, CVV online e vários mecanismos que o banco usa para se proteger contra fraude e, secundariamente, proteger o comerciante também
A rede pode aceitar quando a Amazon diz “aqui está o número do cartão, e esta pessoa afirma que está nos pagando 400 dólares”. Isso é só liquidação e vai para a fatura. Sem criptografia sofisticada, sem nem algo no nível de um PIN de 4 dígitos, sem sequer uma checagem no nível de lembrar o nome de solteira da mãe: é basicamente um “ok, acredito”. Por isso o consumidor precisa ler a fatura do cartão e contestar cobranças desconhecidas, senão simplesmente paga
A rede quase não tem incentivo para se preocupar com consumidores sendo lesados. Se ninguém contestar, todo mundo fica feliz; se contestarem, o valor pode ser recuperado do comerciante, então não é problema deles
Os processadores de pagamento não permitem enumeração de cartões nem testes de cartão por força bruta com o número completo, e as bandeiras também aplicam penalidades severas a comerciantes e processadores que não impedem isso
Enumerar CVC2 para um único PAN é outra história
Isso é prova de que a infraestrutura antifraude realmente protegeu. O banco absorveu a perda com fraude e o dinheiro foi devolvido
No fim, os sistemas bancários se importam com perdas por fraude e também são muito bons em detectá-las. O sistema de pagamentos com cartão é tão grande que é extremamente difícil mudá-lo, então, sem evidência forte de que uma alteração específica realmente reduziria a taxa de fraude, os bancos tendem a não mexer
O banco emissor ganha taxa de intercâmbio em todas as transações, então, se não tiver responsabilidade pela fraude, o incentivo padrão é aprovar o máximo possível e depois resolver com chargeback. Mas o 3DS muda bastante essa conta, e transações presenciais normalmente também ficam sob responsabilidade do banco emissor
No fim, todos os consumidores acabam arcando coletivamente com esse custo. Só não aparece como linha separada na fatura; estamos pagando um pouco a mais em tudo o que compramos
Passei por isso com um caso no eBay ligado a cartão de crédito roubado; no começo parecia ir bem, mas quando o eBay enviou uma pilha de documentos ao banco, o chargeback foi revertido, e pouco depois até minha conta bancária foi encerrada
Não termina quando o dinheiro volta por chargeback. No começo, parece que o valor é apenas provisório enquanto se dá prazo para a outra parte responder, e levou uns 30 dias até eu conseguir reabrir a contestação depois que o eBay me soterróu com papelada. A explicação deles foi tão eficaz que meu próprio banco acabou me tratando como fraudador
Também não sei se é 100% correto dizer que o banco absorve essas perdas. Se a estrutura fosse mesmo essa, o eBay não teria motivo para empregar gente especializada para investigar e responder ao meu chargeback; alguém entre quem sofreu o chargeback e quem o abriu acaba arcando com a perda
Seria muito mais útil se o 3D Secure fosse obrigatório em todo lugar, mas entendo que quase não se usa isso nos EUA. Como o mercado americano é enorme, as emissoras acabam tendo de aceitar solicitações sem 3D Secure, senão o cliente não conseguiria usar o cartão em muitos lugares
Isso limita bastante um mecanismo antifraude muito poderoso, o que é frustrante para praticamente todo o resto do mundo
Não entendo por que o consumidor americano parece preferir sofrer fraude a aceitar um pouco mais de atrito. Mesmo quem nunca foi vítima acaba pagando, porque o comerciante repassa o custo da fraude e do seguro para o preço dos produtos
Mas, olhando o setor inteiro, isso é um problema clássico de coordenação. A conversão cai porque continua existindo uma alternativa mais fácil; se todos os comerciantes e bancos passassem a exigir 3DS ao mesmo tempo, não haveria mais uma opção mais conveniente para onde migrar. Gostando ou não, os usuários se acostumariam ao novo modelo mais seguro e a conversão subiria de novo
A UE tornou o 3DS obrigatório em muitos pagamentos justamente dessa forma, embora lá também os reguladores tenham reconhecido que aplicar isso em 100% dos casos seria contraproducente, e existe um ponto de equilíbrio em algum lugar no meio
Outro exemplo da mesma lógica: cartões de crédito nos EUA não têm PIN. Se um banco individual resolvesse adotar PIN, os clientes migrariam para cartões concorrentes sem PIN e o uso cairia muito. Em outros mercados, por intervenção regulatória ou incentivos das bandeiras, todos os cartões têm PIN, e as pessoas simplesmente se acostumaram
Quando os cartões de crédito estavam surgindo, nos EUA, o Congresso aprovou o Fair Credit Billing Act de 1974, limitando a responsabilidade do consumidor a 50 dólares se um cartão perdido fosse reportado em até 60 dias após o fechamento do ciclo de cobrança fraudulento. Na época, os pagamentos eram totalmente offline, em papel, com aquelas máquinas que faziam o barulho de “kachunk” ao tirar cópia carbono do cartão
Essa lei não mudou e, na prática, a maioria dos bancos nem cobra esses 50 dólares, porque irritar o cliente por esse valor não vale a pena para o banco
Com a internet, os cartões ficaram subitamente muito mais fáceis de roubar e abusar, mas os bancos ainda precisam absorver todas as perdas reportadas em até 60 dias após o fim do ciclo de cobrança. Por isso os bancos americanos investiram pesadamente em monitoramento em tempo real de transações com cartão de crédito e levam isso muito a sério, porque no fim a responsabilidade é deles. Já os consumidores se preocupam menos. Do ponto de vista do consumidor, os cartões nos EUA parecem muito mais frouxos do que os europeus porque, ao contrário da Europa, o consumidor fica isento e o banco investe muito mais nos bastidores
Separadamente, a UE regulou a taxa de intercâmbio que as operadoras podem cobrar, mas os EUA não impuseram teto. Como resultado, portadores de cartão nos EUA podem receber recompensas bem significativas pelo uso, especialmente entre os 10% mais ricos, algo praticamente impossível com cartões emitidos na UE, onde a taxa é limitada
Neste momento há um grande processo tentando permitir que comerciantes aceitem apenas cartões de taxa baixa. Os contratos padrão de VISA/MC/AMEX exigem tratamento igual para todos os cartões, e isso dá às operadoras incentivo para empurrar as pessoas para cartões com intercâmbio mais alto. Ainda é preciso ver o resultado desse caso, mas até lá consumidores americanos de alta renda podem ter recompensas muito maiores, o que também incentiva o uso do cartão e reduz o atrito em comparação com cartões no estilo europeu
Não é que as pessoas prefiram sofrer fraude; isso é uma questão de negociação entre emissor e comerciante
Uma vez, uma pessoa contratada pela nossa empresa começou a se gabar de que tinha descoberto como adicionar valor armazenado a gift cards. Mais tarde descobrimos que ela estava sendo investigada pelo FBI
Era até uma empresa contratada pelo governo, e no fim apareceu o maior agente de segurança que eu já vi para levar a pessoa embora
Cartões de crédito virtuais existem há muito tempo. Lembro de Bank of America ou Citi oferecendo isso há mais de 15 anos, talvez em um app Java ou um executável. Surpreende que isso não tenha se espalhado mais
O Robinhood implementa isso muito bem. É o melhor sistema de cartão de crédito virtual que já usei, muito fluido. Dá para autorizar o cartão para uso único, por 24 horas ou indefinidamente até cancelar, e o UI/UX é excelente
No mundo atual, em que tudo é assinatura, não entendo por que isso não se popularizou. Era ótimo poder definir validade e limite de gasto para não ter de entrar em negociação suja na hora de cancelar uma assinatura
Recentemente recebi um SMS do banco dizendo que havia uma transação suspeita no cartão da minha esposa no exterior, e o valor era literalmente 0 dólar, além de ter ocorrido num horário em que ela não estava usando celular nem computador
No início achei que a própria mensagem fosse phishing, mas conferi online, vi que o formato da mensagem batia e que a página do banco garantia que não pedia nenhuma informação no processo de feedback, então confirmei que não tínhamos feito a transação
O banco cancelou imediatamente o cartão e enviou um novo
No começo achei que o sistema de segurança do banco estava reagindo exageradamente, mas parece que alguém estava realmente fazendo o que este texto descreve, e o banco detectou antes
Vale a pena manter um cartão separado para pagamentos online e colocar nele só o dinheiro necessário para pagar
Sei que é uma ideia ingênua
Voltando ao texto, a vulnerabilidade era a senha, e isso levou a outros comerciantes que não usam 3D Secure
Pelo texto, parece que os atacantes têm um sistema totalmente automatizado, então grandes comerciantes precisam lidar com tentativas automáticas de login na mesma faixa de IP usando contas diferentes. Mesmo olhando nossos logs do Wordfence, a rotação de IP não é tão rápida assim, então talvez dê para conter parte disso com bloqueio permanente de IP
Um vazamento de senha não deveria levar a um vazamento de todos os dados do cartão de crédito. Os mesmos dados aparecem até em recibos de papel impressos em loja, às vezes com 4 dígitos, às vezes com 10. Mesmo recibos de papel largados na loja ainda permitem força bruta
Complementando, o comerciante não pode escolher o nível de segurança que quiser no processador de cartão de crédito. Por exemplo, no authorize.net dá para receber pagamento mesmo se o endereço não bater
A verdadeira pergunta é: como o dinheiro foi sacado? Compraram gift cards em algum comerciante com segurança frouxa?
Acertar o número e tirar o dinheiro do sistema são coisas completamente diferentes
Existe uma certa divisão no mercado de processadores. De um lado estão os que oferecem simplicidade ao cliente e reduzem a carga; do outro, os que expõem toda a complexidade e dão controle granular. O primeiro tipo normalmente não deixa definir requisitos de segurança, enquanto o segundo oferece centenas de opções. Claro, há processadores no meio do caminho, e esses dois eixos costumam mirar clientes diferentes