WhatsAPP è senza dubbio una delle applicazioni multipiattaforma più utilizzate per la messaggeria mobile; infatti permette di utilizzare il traffico dati per l’invio di sms con notifiche push. Il vantaggio è ovviamente quello di inviare messaggi gratis per chi ha piano un tariffario con traffico dati compreso o per chi dispone di una connessione wifi.
Il suo successo è dovuto al carattere multipiattaforma ma anche dalla esponenziale diffusione di tablet e smarphone, senza negare la fase emulativa apple-style-way-of-life-very-cool. Per questo motivo è ancora più grave scoprire gravissime ed ingenue falle di sicurezza che minano la privacy di tutti i suoi numerosi utilizzatori .
Analizzando il traffico di rete di questa applicazione utilizza una connessione https sulla porta 443 e qui direte: per fortuna.. il problema è che il resto viaggia tutto in chiaro.
Il protocollo XMPP ed il message digest
WhatsApp utilizza il protocollo XMPP (Extensible Messaging and Presence Protocol, ex jabber, per chi lo ricorda), utilizzato per la messaggistica istantanea e basato su XML.
Il sistema di autenticazione è un digest SASL-MD5 (http://www.ietf.org/rfc/rfc2831.txt) di cui riportiamo un esempio di autenticazione preso dagli amici spagnoli di securitybydefault:
username="34666666666",
realm="s.whatsapp.net",
nonce="1438536309",
cnonce="E0487DC6-6D1A-4A67-AV70-3299TD89O29A",
nc=00000001,
qop=auth,
digest-uri="xmpp/s.whatsapp.net",
response=b98d50c159a938723d8eb8f3039afab2, //sbd J
charset=utf-8
Ma se in fase di registrazione non mi hanno chiesto neppure la password come viene generato il digest? Si chiederà un utilizzatore leggermente meno smaliziato e più attento degli altri. Prima di proseguire dobbiamo capire come funziona questo frame work di autenticazione SASL-MD5 (chi vuole venire al dunque lo salti ma …).
UN ESEMPIO DI AUTENTICAZIONE SASL-MD5:
A partire dal documento ufficiale rfc sull’autenticazione SALS l’utente deusty ci ha regalato un dettagliato esempio di autenticazione SASL (http://deusty.blogspot.com/2007/09/example-please.html), che cercherò di schematizzare:

Quindi abbiamo il digest di risposta: f079bb0caab1a1f0f5b0950010dcee4c ed ora vediamocome possiamo ottenerlo.
CALCOLIAMO UN DIGEST SASL-MD5
I dati in gioco sono questi di seguito,con password e username di esempio:
username=test
password=secret
realm=osXstream.local
nonce=392616736
qop=auth
cnonce=05E0A6E7-0B7B-4430-9549-0FE1C244ABAB
digest-uri=xmpp/osXstream.local
nc=00000001
realm è l’identificativo del server, nel caso di whatsapp è s.whatsapp.net.
nonce è un valore che viene fornito dal server per ogni sambio di dati (che può essere casuale)
cnonce è una stringa generata casualmente
digest-uri è il realm preceduto dal percorso xmpp
nc è il contatore di nonce, che conta appunto quanti ”scambi” abbiamo fatto col server
generiamo il digest:
HA1data = MD5(username:realm:password) = MD5(test:osXstream.local:secret)= 3a4f5725a748ca945e506e30acd906f0
HA1 = MD5(HA1data:nonce:cnonce) = b9709c3cdb60c5fab0a33ebebdd267c4
attenzione perché non dobbiamo operare su stringhe quindi dobbiamo convertire la parte :nonce:cnonce in RAW data.
HA2 = MD5(AUTHENTICATE:digest-uri) = MD5(AUTHENTICATE: xmpp/osXstream.local) = 2b09ce6dd013d861f2cb21cc8797a64d
MD5(HA1:nonce:nc:cnonce:qop:HA2) = MD5(b9709c3cdb60c5fab0a33ebebdd267c4:392616736:00000001:05E0A6E7-0B7B-4430-9549-0FE1C244ABAB:auth:2b09ce6dd013d861f2cb21cc8797a64d)= 37991b870e0f6cc757ec74c47877472b
Ecco quindi la risposta da inviare codificata in base 64.
Probabilmente implementerò uno script che riassuma questi passi a titolo esemplificativo. Dopo questa impegnativa digressione possiamo tornare a riprendere il discorso di WhatsApp.
TORNIAMO A WHATSAPP: LO SNIFFER
Come dicevamo utilizza XMPP, che vengono inviati al server bin-short.whatsapp.net porta 5222.
Il nostro amico spagnolo ha quindi ben deciso di sniffare il traffico di uno smartphone collegato alla rete wireless e utilizzante tale applicazione. Possiamo usare wireshark ed effettivamente notare come tutte le comunicazioni avvengano in chiaro.
Come prima applicazione della scoperta ha creato un programmino, WhatsAppSniffer, che utilizza le librerie winpcap che non fa altro che filtrare i pacchetti interessati e mostrare la comunicazione messaggistica al curiosone di turno.
IMPLICAZIONI E SVILUPPI:
La conclusione è semplice e comunque vale per chiunque si connetta ad una rete wireless (protetta o non protetta…) : stare attenti a non trasmettere troppi dati personali.
Un possibile sviluppo di tale programmino potrebbe essere quello di inviare messaggi fake al chattatore di turno, oppure ancora implementare lo sniffer in modo tale che possa operare con reti protette da wep/wpa con chiave di accesso nota a priori oltre che verificare il fatto che la password di default di WhatsApp messenger sia proprio la parola “password”…
RINGRAZIAMENTI E LINK UTILI
Script ruby Md5.Sasl di a0rtega: http://a0rtega.pentbox.net/
Sostenete il rinnovamento del sito dando un'occhiata ai link pubblicitari che vi interessano.
| Commenti |
|













