Analisando o impacto da vulnerabilidade FakesApp e decifrando o tráfego do WhatsApp Web com “WhatsApp Decoder” (Parte 1/2)

ElevenPaths    22 febrero, 2019

Faz alguns meses, investigadores da Checkpoint publicaram informações sobre uma série de vulnerabilidades descobertas no WhatsApp, que receberam o nome de FakesApp. Esse tipo de falha não é novo, vimos no passado outras vulnerabilidades que geraram “barulho”, tanto para o WhatsApp como para outros sistemas de mensagens.

Segundo os pesquisadores Checkpoint, as falhas descobertas permitiam interceptar e manipular as mensagens enviadas, tanto em conversas privadas como em grupos. Isso permitia diversos tipos de ataques de distribuição de fake news, ou informações falsas, utilizando o popular sistema de mensagens. No post original publicado, os pesquisadores descreveram três possíveis cenários de ataque, que combinavam as falhas propriamente ditas e engenharia social para enganar os usuários.

As mensagens podiam ser manipuladas em uma seção do WhatsApp Web, quando seu conteúdo era transferido do celular para o navegador do usuário. Nesse momento, o atacante podia interceptar e modificar o conteúdo enviado em sua seção web do WhatsApp usando a função “citação” do app, a vítima receberia a resposta do remetente original, mas com conteúdo modificado pelo atacante. Em resumo, o atacante poderia por “palavras na boca” do remitente sem que ele as tenha digitado.
Abaixo, um vídeo explicando a técnica:
O tema se torna mais complexo quando tratamos de grupos. Nesse caso, utilizando a mesma técnica o atacante poderia modificar as citações de qualquer remetente em uma resposta, criando uma verdadeira confusão entre os membros do grupo. Ainda que os usuários pudessem enxergar a mensagem original através do histórico do grupo, a maioria das pessoal só leem os últimos conteúdos postados, além disso o atacante poderia substituir o nome do remetente original por alguém inexistente no grupo, dificultando ainda mais a identificação do ataque. Existe ainda outra variante do exploit em que se pode enviar uma mensagem privada a um membro do grupo, para que ele pense que ela tenha sido enviada para todos, a resposta, por sequência, também seria enviada a todos, influenciada por conteúdo falso.
Vale assinalar que, em nenhum momento, o atacante pode modificar a mensagem original na base de dados do WhatsApp, visto que elas são recebidas primeiro no dispositivo móvel e depois na seção do WhatsApp Web. De fato, para poder realizar os ataques é necessário que ele manipule não somente o conteúdo, mas também o identificador da mensagem por um que não exista nessa base.

No post original da Checkpoint, os pesquisadores disseram conseguir analisar a criptografia ponto a ponto do WhatsApp. Ao aplicar engenharia reversa do algoritmo, concluíram que o app usava o recurso “Protocol buffers”, convertendo os dados do protobug2 para Json, os pesquisadores puderam visualizar os parâmetros enviados pela aplicação e manipulá-los para comprovar o nível de segurança do WhatsApp. Ao final, eles criaram uma extensão chamada “WhatsApp Decoder” para o conhecido proxy Burp que permitia a qualquer um realizar o mesmo processo.

Extensão “WhatsApp Decoder” para Burp imagen
Extensão “WhatsApp Decoder” para Burp

Para realizar o ataque deve-se instalar a extensão desenvolvida pelos pesquisadores, obter as chaves de seção e alguns outros parâmetros, interceptar o tráfego em tempo real para então modificar seu conteúdo e enviar ao destinatário.

Instalando e configurando la extensão
O primeiro passo é fazer o download da extensão e seguir os passos de instalação. Como a extensão foi desenvolvida em Python, é necessário instalar previamente o Jython, seguindo as instruções da documentação oficial do Burp. Depois disso, poderemos instalar a extensão ao nosso proxy.

Precisamos, então, obter as chaves públicas e privadas da comunicação com o WhatsApp Web, o que deve ser feito antes da geração do QR code mostrado pela aplicação. Para isso, é necessário usar um depurador no navegador e introduzir um breakpoint em um ponto específico.

Obtendo a chave pública e privada antes da geração do QR code imagen
Obtendo a chave pública e privada antes da geração do QR code

Além das chaves pública e privada, precisamos obter o parâmetro “secret” transferido ao se estabelecer a comunicação entre o dispositivo móvel e a seção do WhatsApp Web. Para isso é necessário configurar previamente o navegador para redirecionar o tráfego HTTP e HTTPS através do proxy Burp.

A partir daí escaneamos o QR code com o dispositivo móvel, conectamos a seção web e poderemos ver na janela do Burp os websockets com as informações necessárias.

Captura do objeto “ref” com parâmetro “secret” ao se estabelecer a seção imagen
Captura do objeto “ref” com parâmetro “secret” ao se estabelecer a seção

O parâmetro “secret” é transferido através do objeto “ref”, podemos encontrar também outros parâmetros relevantes como os tokens do cliente, servidor e navegador, além de visualizar o número de telefone do usuário que recebe o parâmetro “wid”, a versão do WhatsApp utilizada, percentual de bateria restante no telefone, marca, modelo e o nome utilizado pelo usuário no app.

Nesse ponto, já temos informação suficiente para configurar a extensão do Burp e decifrar o tráfego do WhatsApp, copiamos o objeto “ref” no primeiro quadro de texto garantindo que ele contenha o parâmetro “secret”, as chaves públicas e privadas recuperadas no passo anterior.

Configurando a extensão Burp para decifrar o tráfego do WhatsApp imagen
Configurando a extensão Burp para decifrar o tráfego do WhatsApp

O próximo passo é rodar o script “parser.py” gravado na pasta “helper” do repositório no GitHub, configurar corretamente a extensão, clicar em “Connect” e comprovar a conexão com a mensagem “OK” em verde.

Executando o script “parser.py” e conectando a extensão imagen
Executando o script “parser.py” e conectando a extensão

A partir desse ponto, se tudo ocorreu bem, já podemos decifrar corretamente o tráfego do WhatsApp, para mensagens que chegam ou são enviadas.

Descifrando o tráfegoo do WhatsApp
Para decifrar e manipular o tráfego é necessário acessar a janela Proxy no Burp e ativar a opção “Intercept”, capturando os pacotes transmitidos. Alguns deles não são criptografados e fazem referência a diferentes aspectos à seção do WhatsApp (comentaremos alguns deles mais a frente), vamos nos concentrar naqueles que correspondem às mensagens e permitem a realização dos ataques descritos aqui.
Quando o usuário recebe uma mensagem, seu conteúdo está criptografado e não é possível entende-lo.

Capturando uma mensagem recebida criptografada no WhatsApp Web imagen
Capturando uma mensagem recebida criptografada no WhatsApp Web

Para poder decifrar a mensagem usando a extensão, temos que converter seu conteúdo para base64, selecionando o comando na janela e pressionando “CTRL-B”.

Convertendo o conteúdo da mensagem criptografada a base64 imagen
Convertendo o conteúdo da mensagem criptografada a base64

Uma vez convertida a base64, basta copia a cadeia de texto na extensão e pressionar o botão “Decrypt”, após ter habilitado o botão “Incoming”, especificando assim que estamos analisando tráfego recebido.

Decifrando uma mensagem recebida no WhatsApp Web imagen
Decifrando uma mensagem recebida no WhatsApp Web

Como podemos ver, uma vez decifrada a mensagem é possível ver claramente os parâmetros:

  • O valor do parâmetro “conversation” que corresponde ao conteúdo da mensagem em si, que no caso é “jajajaja”.
  • O parâmetro “fromMe” que indica se a mensagem foi enviada para o usuário. Nesse caso definido como false porque se trata de uma mensagem entrante.
  • O parâmetro “remotejid” que contém a informação do usuário emissor da mensagem, nesse caso inclui o número do telefone do contato do remetente.
  • O “id” corresponde ao identificador único da mensagem que coincide com o que se armazena na base de dados do dispositivo móvel.
Nesse caso, deciframos uma mensagem de um chat individual (ou privado). Se estivéssemos analisando um chat de grupo, poderíamos ainda ver o parâmetro “participant” que indiciaria o membro do grupo que havia enviado a mensagem.
No próximo post, veremos como utilizar a extensão “WhatsApp Decoder” para replicar o ataque FakesApp e interpretar o que acontece em diferentes cenários.
Deepak Daswani
Chief Security Ambassador de ElevenPaths

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *