Exonerando: Hacker encontra falha grave no Samsung Pay

O Samsung Pay foi lançado com bastante barulho no Brasil, mas um hacker conseguiu encontrar falhas. Destrinhacmos seu relatório neste texto, mostrando cada explicação do hacker.

0
1092
samsung-pay
Samsung Pay. (foto: Samsung)

O Samsung Pay é uma das mais recentes empreitadas da coreana no Brasil. Desde o dia 14/07, quando foi lançado oficialmente. O serviço passou a suportar poucos cartões e serviços, mas funciona em todas as máquinas de cartão de crédito. Isso se deve ao fato suportar a tecnologia MST, que permite emular um cartão de crédito com tarja magnética.

Até a semana do dia 07/07 – quando a Samsung anunciou o Galaxy S7 Edge Olympic Games Edition (ufa!) – tudo estava na mais perfeita paz entre a coreana, seus consumidores e a comunidade de hackers. Porém, o hacker Salvador Mendoza conseguiu tirar a tranquilidade da empresa no dia 7. Como? Hackeando o Samsung Pay e mostrando na DEFCON 2016.

Destrinchamos todo o relatório publicado pelo hacker. O resultado você confere abaixo:

(vídeo do hacker Salvador Mendoza demonstrando a ferramenta TokenGet).

Analisando o Samsung Pay

Salvador Mendoza começa seu relatório analisando o aplicativo do Samsung Pay. Para tal, realizou um backup de todos os dados do aplicativo, utilizando o Android Device Bridge, responsável pela obtenção de tais dados. O resultado foi um arquivo .tar com todos os dados necessários.

samsung pay
Sqlitebrowser mostra tudo facilmente mapeável. (Foto: Salvador Mendoza/DEFCON)

Mendoza conta que, ao abrir a database com o visualizador Sqlitebrowser, é possível visualizar como a database do aplicativo é feita. Os dados são encriptados utilizando uma função privada que implementa substituição, onde alguns campos representam o cartão de crédito, quatro últimos dígitos do token, CEP, nome do cartão, ID do token e mais.

No entanto, esta não é a única database implementada pelo serviço. O hacker cita outro aplicativo, chamado de Spayfw. O mesmo relaciona este aplicativo ao Serviço de Tokens Visa com uma combinação de todas as regras, comandos e protocolos de segurança para realizar o processo de tokenização.

Algumas das databases são guardadas até na pasta EFS, que não é fácil de ser acessada e que, anteriormente, era ligada apenas ao IMEI dos aparelhos. Estas databases salvam logs, transações, participações em programas de fidelidade e muitas outras coisas.

Analisando o contexto da pasta EFS, agora se entende perfeitamente o motivo na qual o Samsung Pay não funciona com o KNOX em 0x1. Com um recovery alternativo, é possível ter acesso fácil a pasta EFS, realizando, inclusive, um backup.

Muitos donos de Samsungs, após realizarem modificações em seus telefones, realizam o backup desta pasta. Isso evita que, em um futuro hipotético, o IMEI ou dados importantes do aparelho possam ser perdidos e, desta forma, inutilizar o aparelho.

samsung pay
O Samsung Pay funciona com o novíssimo Galaxy Note7. (foto: Samsung)

A teoria da tokenização

De acordo com as explicações da coreana, não existe uma maneira certa de adivinhar um token. A empresa diz que o sistema gera estes tokens de maneira aleatória. Porém, o hacker questiona o quão aleatório é um número. Bem, pouco provável que seja totalmente aleatório.

O hacker explica que é possível, utilizando um leitor de cartões USB, coletar dados para encontrar um padrão ou uma maneira de encontrar o exploit para um ataque perfeito. O hacker demonstra isso com uma string completa, transmitida via MST com o aplicativo do Samsung Pay:

%4012300001234567^21041010647020079616?

;4012300001234567^21041010647020079616?

~4012300001234567^21041010647020079616?

Perceba que, neste número digitado acima, existem três pontos de interrogação. Estes pontos são “divisores de faixas”. Existem, ao todo, três faixas em cada token, e todas as faixas possuem o mesmo número tokenizado.

Caso o leitor não detecte nenhum dado inicialmente, o próprio Samsung Pay se encarrega de dar uma segunda chance para a utilização deste token. O serviço envia os tokens baseados em uma configuração especial a ser transmitida em diferentes taxas de transmissão. E isso é feito com um simples arquivo XML.

Analisando o token

O hacker descreve como o token realmente funciona. Para tal, ele analisa o token criado na seção acima, ou seja, esse:

%4012300001234567^21041010647020079616?

;4012300001234567^21041010647020079616?

~4012300001234567^21041010647020079616?

Para o Samsung Pay, apenas a segunda faixa (;4012300001234567^21041010647020079616?) é realmente importante. O hacker pergunta o por quê. Simples: ele explica que, um leitor de cartões normal detecta a segunda faixa como a “faixa de autorização”, que possui todos os dados para concluir a transação.

Para entender esta segunda faixa:

  • os 16 primeiros dígitos (4012300001234567) é o “novo número” do cartão de crédito:
    • destes 16 dígitos, os seis primeiros se referem a um número privado;
    • os três seguintes não mudam e se referem ao cartão original;
    • os oito últimos não foram explicados pelo hacker.
  • os 20 últimos dígitos (21041010647020079616), segundo o hacker, representam o coração do token:
    • os quatro primeiros dígitos (2104) representam a data de expiração;
    • os três seguintes representam um “código de serviço”;
    • e os 13 últimos dígitos se subdividem em três categorias distintas:
      • os seis primeiros dígitos dentre estes 13 são aqueles que lidam com o código de verificação e o alcance da transação
      • os quatro seguintes representam o ID da transação, e que sempre são acrescido em 1;
      • os três últimos dígitos são aleatórios e são gerados a partir de um criptograma.

Para que o Samsung Pay possa funcionar sem a proteção de chip e senha, o “código de serviço” acima é mudado de 2 para 1, permitindo, desta forma, a utilização sem esta proteção e sem a necessidade de inserir o cartão todas as vezes.

samsung pay
Samsung Pay funcionando em um Galaxy S7. (Foto: Samsung)

Como funciona a geração do token?

Segundo Mendoza, o serviço gera, a cada pagamento, um token único. Cada token precisa, necessariamente, ser superior ao outro. Isso previne que um token seja reutilizado ou que faltem tokens em alguma altura do uso. O hacker descobriu que o Samsung Pay é capaz de funcionar em modo avião, mas com uma diferença.

Enquanto conectado a uma rede, o token gerado pelo Samsung Pay sempre será maior que o anterior. Vamos analisar com quatro tokens fornecidos no documento original de Salvador Mendoza:

%4012300001234567^21041010821000232646? (token 1)
%4012300001234567^21041010831000233969? (token 2)
%4012300001234567^21041010831000234196? (token 3)
%4012300001234567^21041010831010235585? (token 4)

Perceba que, muito próximo do final do token, existem três números vermelhos em negrito, e números apenas em negrito. Estes números, enquanto o serviço possui conexão com a internet, serão sempre acrescidos em 1. Isso faz com que o próximo número sempre seja maior que o anterior, independente do que aconteça.

Quando o Pay está sem conexão com a internet, apenas os números em vermelho são acresidos em 1. Desta forma:

%4012300001234567^21041010821000232646? (token 1)

%4012300001234567^21041010821000233969? (token 2)

%4012300001234567^21041010821000234196? (token 3)

%4012300001234567^21041010821000235585? (token 4)

Cenários de ataque

samsung pay
MagSpoof. (foto: Salvador Mendoza/DEFCON)

O hacker, então, trabalhou em três cenários diferentes para a obtenção destes tokens. O primeiro é utilizar um hardware chamado MagSpoof para utilizar estes tokens. Porém, cada token é inutilizado após uma utilização, o que limita o uso do MagSpoof. Ainda assim, o hacker poderia criar uma sequência de adivinhação para tentar adivinhar os próximos tokens.

samsung pay
Segundo método utiliza um Raspberry Pi Zero. (foto: Salvador Mendoza/DEFCON)

O segundo cenário é onde a situação fica ainda mais interessante. Mendoza afirma que é possível recuperar um token inutilizado caso o hacker em questão saiba como fazer o serviço gerar outro token. Para isso, seria necessário fazer com que a transação “falhasse”, fazendo com que o serviço gere outro e o antigo possa ser utilizado.

samsung pay
Terceiro método utiliza engenharia social e este hardware. (foto: Salvador Mendoza/DEFCON)

Por fim, o terceiro (e demonstrado em vídeo) se trata de “engenharia social”, utilizando um dispositivo chamado TokenGet. Este dispositivo captura o token e envia para um email pré-determinado, podendo ser utilizado com o MagSpoof, descrito no primeiro método e, desta forma, utilizando o token.

Falhas no Samsung Pay?

samsung pay
Parte do código do Samsung Pay. (foto: Salvador Mendoza/DEFCON)

O serviço, segundo o hacker, parece ter mais falhas do que aparenta. Em uma análise, o mesmo descobriu que todo o código do aplicativo possui diversos comentários, que podem potencialmente explicar seu funcionamento. Em tese, não seria necessário, por exemplo, uma engenharia reversa grande para entender o funcionamento.

Mendoza também cita o fato de que senhas são utilizadas para encriptar os hashes, e que todos os cartões de crédito são devidamente encriptados. Porém, com uma senha inclusa dentro do próprio código, é possível decriptar estes cartões de crédito rapidamente, o que é preocupante.

Para finalizar esta seção do texto, o hacker conclui que ainda possui dúvidas. Uma delas, chama a atenção: como o servidor consegue distinguir um token verdadeiro de um falso. Segundo o mesmo, ao que parece, o servidor tem uma maneira proprietária de fazer uma “geração reversa” de tokens e verificar sua autenticidade.

O hacker aponta (as) soluções

Salvador Mendoza propõe soluções para tornar o Samsung Pay mais seguro. Dentre estas, o mesmo cita uma mudança na data de expiração do token, para que este seja invalidado assim que possível, incluindo aqueles que não foram utilizados para realizar uma compra.

Além disso, ele cita uma mudança nas databases e senhas: o serviço precisa utilizar senhas aleatórias para encriptar seus arquivos e databases com a mesma função. Isso significa que, caso este cenário não mude, qualquer um poderia realizar uma engenharia reversa e encontrar um exploit.

As databases, segundo Mendoza, são muito sensíveis. Contém informações delicadas para atualizar o status de cada token, instruções de como o aplicativo deve se conectar ao servidor e validação de certificados para uso no aplicativo em si.

O que diz a Samsung e o hacker?

Entramos em contato com a Samsung nesta quarta (10/08), para esclarecer os problemas supracitados aqui, e atualizaremos quando recebermos uma resposta. Também enviamos uma mensagem para Salvador Mendoza em relação às descobertas do Samsung Pay.