WeChat Forensics – parte II
Nel precedente articolo mi sono occupato dell’analisi forense di WeChat iOS. Questa seconda parte riguarderà Android.
Con la versione 7.0.4 – ultima release attualmente scaricabile da Play Store alla data di stesura dell’articolo – arrivano: le “Capsule del tempo”, un design tutto nuovo con interfaccia più semplice e intuitiva e il “Fai una bolla” che consente di far conoscere a un amico l’apertura di una “Capsula del tempo”; chi volesse approfondire può farlo qui.
Le caratteristiche dell’applicazione sono state già descritte nell’articolo su iOS; darò quindi dei cenni qualora vi siano delle evidenti discrepanze.
Allo stato attuale, molti prodotti commerciali a supporto della mobile forensics quali Cellebrite, XRY, Oxygen e Belkasoft supportano le estrazioni dei dati inerenti le applicazioni di terze parti per Android – tra cui WeChat – ma solo in presenza di una determinata condizione: il rooting[1] dei dispositivi, che può essere anche effettuato dall’applicazione forense stessa durante l’estrazione.
Una sostanziale differenza tra WeChat iOS e WeChat Android risiede nella modalità di gestione del database; in iOS – come abbiamo avuto modo di verificare nel precedente articolo – il database non è cifrato, mentre lo è in Android.
Quindi, per proteggere la privacy degli utenti, WeChat for Android cifra il database contenente i messaggi di chat avvalendosi di SQLCipher[2]; questa è la prima sostanziale differenza rispetto a iOS.
Ma vi è di più: mentre in iOS è possibile estrarre i dati dell’app con iTunes, dalla versione 6.0 di WeChat non è più possibile estrarre i contenuti tramite la funzionalità di backup insita in Android su dispositivi non rootati; ciò si traduce in una ulteriore difficoltà per l’analista forense.
Come già detto, vi sono molti tool forensi in grado di estrapolare le evidenze di WeChat: per questo articolo adopereremo Oxygen Forensic Detective[3].
Oxygen Forensic Detective supporta l’estrazione e l’analisi della messaggistica WeChat sia da dispositivi Android che da dispositivi iOS.
Verrà utilizzata, in questo contesto, l’acquisizione fisica effettuata di un dispositivo Samsung Edge S6 + mediante l’utilizzo di Oxygen Detective. Essendo fondamentale assicurare l’integrità delle prove acquisite, l’acquisizione deve essere condotta necessariamente in ambiente forense mediante collegamento del dispositivo a una stazione di lavoro opportunamente predisposta.
In Android, i dati di interesse investigativo di WeChat sono archiviati nella cartella /data/data/com.tencent.mm, che contiene quanto riportato in fig. 1.
Le cartelle che contengono i file di particolare interesse sono:
- files/host;
- MicroMsg;
- shared_prefs;
- /sdcard/tencent/MicroMsg.
I file di maggiore interesse contenuti nelle cartelle descritte, sono così suddivisi:
- /files/host/*.getdns2
- MicroMsg
- db
- db
- SnsMicroMsg
- cfg
- /shared_prefs/
- tencent.mm_preferences.xml
- xml
- /sdcard/tencent/MicroMsg
- image2
- video
- voice2
I file con estensione getdns2 – fig. 4 – che si trovano nella cartella /files/host possono essere tranquillamente aperti con un editor di testo o esadecimale. All’interno è possibile trovare la sezione [clientip] – fig. 5 – che mostra gli indirizzi IP dai quali l’utente si è connesso e la data della connessione in formato “Epoch Linux”; il formato può essere facilmente convertito in data e ora intellegibile anche a mezzo di siti web quali, ad esempio, https://epochconverter.com.
La cartella MicroMsg è così composta:
Viene posta in evidenza la cartella denominata 528196c25f8900a682350929260b6a44 – determinata dal risultato di MD5 (‘mm’ + uin) – che contiene, tra l’altro, due file di database cifrati: quello contenente le chat dell’utente, EnMicroMsg.db e enFavourite.db.
Entrambi sono cifrati tramite l’estensione di crittografia opensource per SQLite denominata SQLCipher [14]. SQLCipher fornisce un’interfaccia trasparente a SQLite; il file è diviso in piccoli blocchi di 4Kb e il testo cifrato viene calcolato utilizzando l’algoritmo AES[4] 256-bit. La decifrazione viene eseguita utilizzando la chiave di decrittografia – calcolata con il metodo esposto in seguito – e convertendo il testo cifrato in testo semplice.
In calce, figg. 7 e 8, il contenuto della cartella 528196c25f8900a682350929260b6a44:
Per decifrare i database menzionati – enFavourite.db e EnMicroMsg.db – è necessario utilizzare un codice di decifrazione che, nel caso di WeChat, è composto dal codice IMEI (International Mobile Equipment Identity) – estraibile dal file CompatibleInfo.cfg, fig.9 – e l’id univoco del profilo utente di WeChat, rinvenibile dal file /shared_prefs/system_config_prefs.xml, come indicato in fig. 10:
La chiave per decifrare i db è composta dai primi sette (7) caratteri risultanti dalla seguente espressione: Md5 (IMEI + default_uni).
Utilizzando una semplice applicazione, denominata sqlcipher (e liberamente scaricabile dal seguente indirizzo web: https://raw.githubusercontent.com/xiejiangzhao/Wechat_database_decrypt/master/sqlcipher.exe) è possibile, fornendo all’applicazione la chiave ricavata in precedenza – fig.11 – , avere accesso alle numerose tabelle – ben 173 evidenziate in parte in fig. 12 –, che compongono il database EnMicroMsg.db:
Analogo metodo è adoperabile per l’accesso al database enFavourite.db dato che la chiave di decifrazione è la stessa utilizzata per EnMicroMsg.db:
I dati chiave sono principalmente concentrati nelle tabelle FavSearchInfo e FavItemInfo e l’analisi corrispondente consente di ottenere, tra l’altro, l’ID locale, il contenuto, l’etichetta, la data e ora, il mittente e il destinatario che sono tutti dati inerenti il contenuto preferito memorizzato:
Certamente, i dati più significativi risiedono nel database EnMicroMsg.db.
Analizzaremo solo le tabelle che potrebbero contenere le informazioni utili all’analista forense.
1. userinfo, atta a contenere le informazioni di base dell’utente, come specificato in calce:
- Il campo id con valore 2 contiene l’identificativo dell’utente WeChat;
- Il campo id con valore 3 contiene l’eventuale soprannome;
- Il campo id con valore 4 contiene il nominativo dell’utente;
- Il campo id con valore 6 contiene il numero del cellulare dell’utente;
- Il campo id con valore 12293 contiene le informazioni sul paese dell’utente.
2. userinfo2 – fig. 18 – contiene le altre informazioni legate all’utente:
- USERINFO_INSTALL_FIRST_TIME_LONG: contiene le Informazioni inerenti la data di prima installazione dell’app;
- USERINFO_INSTALL_FIRST_CLIENT_VERSION_INT: il numero della prima versione installata;
- USERINFO_HEAVY_USER_REPORT_TYPE_FAV_DB_SIZE_LONG: dimensione del database;
- USERINFO_HEAVY_USER_REPORT_TYPE_DB_CHATROOM_LONG: il numero dei gruppi;
- USERINFO_HEAVY_USER_REPORT_TYPE_DB_MESSAGE_LONG: numero dei messaggi;
- USERINFO_HEAVY_USER_REPORT_TYPE_DB_CONTACT_LONG: numero dei contatti;
- USERINFO_HEAVY_USER_REPORT_TYPE_DB_CONVERSATION_LONG: numero di sessioni complessive;
- USERINFO_UPDATE_UPDATE_TIME_LONG: data e ora dell’ultimo aggiornamento;
- USERINFO_UPDATE_UPDATE_VERION_LONG: versione aggiornata;
- USERINFO_LAST_LOGIN_AVATAR_PATH_STRING: il percorso più recente relativo all’avatar dell’utente;
- USERINFO_WALLET_RELEAY_NAME_BALANCE_CONTENT_STRING: posizione utilizzata di recente.
3. MediaDuplication – fig. 19 – contiene le informazioni sui file multimediali, inclusi il valore MD5, le dimensioni, il percorso e il timestamp relativo alla creazione del file (nel caso di studio, non erano presenti file multimediali).
4. Voiceinfo – fig. 20 – contiene le informazioni vocali, inclusi l’id dell’utente, il nome del file vocale, la dimensione, la durata dell’audio, la data e ora di creazione, etc.
5. ImgInfo2 – fig.21 – contiene le informazioni sull’immagine, inclusi ID del messaggio, lunghezza, percorsi dell’immagine e della sua miniatura, data di creazione, immagine originale MD5, etc.
6. Videoinfo2 – fig.22 – contiene le informazioni sul video, inclusi il nome del file, le dimensioni, la durata, ID del messaggio, l’attributo ora, ID dell’utente corrispondente (individuo o gruppo), etc.
7. Rconversation – fig. 23 – contiene informazioni sulla sessione – gruppo di messaggi inerenti lo stesso oggetto della chat -, incluso il numero di messaggi, l’ID oggetto (incluso l’ID gruppo), il numero di messaggi non letti, il timestamp, il contenuto e altro.
8. message – fig. 24 – contiene le conversazioni scambiate, inclusi i messaggi peer-to-peer (mittente, contenuto del messaggio, timestamp) e i messaggi di gruppo (ID gruppo, contenuto del messaggio, timestamp), i percorsi di archiviazione dei file multimediali e così via.
I messaggi offline QQ sono memorizzati separatamente nella tabella qmessage.
I campi di ciascun record che potrebbero rivestire particolare interesse per l’analista forense sono: “talker“, “createTime“, “type“, “content“, “imgPath” e “isSend“. Il campo “talker” memorizza l’account WeChat con cui l’utente sta comunicando; le sue informazioni dettagliate sono invece memorizzate nel tabelle “userinfo” – fig.17 – e “rcontact” – fig. 25 -.
Nella fig.25, che evidenzia la tabella rcontact, il campo type viene utilizzato per distinguere il tipo di oggetto, il cui significato è esplicitato nella tabella in calce:
Conclusa la panoramica sui due database cifrati – anche se non sono i soli – è interessante soffermarsi ad esaminare, se pur velocemente, anche il database SnsMicroMsg.db.
Esso contiene i dati relativi ai “momenti” della propria vita che gli utenti condividono con gli amici, in cui sono presenti anche contenuti multimediali. Questo database non è cifrato ed è costituito da 9 tabelle.
I dati di interesse possono essere rinvenuti nelle tabelle “SnsInfo” e “SnsComment”.
La tabella “SnsInfo” memorizza i messaggi Moments, inclusi i testi e il collegamento dei file multimediali (immagini o video). La tabella “SnsComment” contiene invece i commenti associati al messaggio condiviso.
Di interesse nella tabella “SnsInfo” vi sono i campi “userName“, “createTime” e “content“. Il campo “userName” contiene l’identificativo del mittente del messaggio, il campo “content” i dati del messaggio memorizzati in formato (BLOB) e il campo “createTime” il timestamp relativo.
Per concludere, è utile dettagliare alcuni dei contenuti presenti nel percorso /sdcard/tencent/MicroMsg, utilizzato per archiviare le risorse multimediali come immagini ricevute, file audio, etc.
Ogni utente ha una sua cartella privata – nel caso in esame 528196c25f8900a682350929260b6a44, la stessa di cui abbiamo già parlato che contiene, tra l’altro, alcune cartelle interessanti:
- image2, le immagini relative ai messaggi;
- voice2, i file audio delle conversazioni vocali;
- video, i file video relativi ai messaggi.
Ritengo conclusa la trattazione dell’app WeChat per i sistemi Android.
Come sempre,
Stay Tuned.
Note
[1] https://it.wikipedia.org/wiki/Rooting
[2] https://www.zetetic.net/sqlcipher/open-source/
[3] https://www.oxygen-forensic.com/en/products/oxygen-forensic-detective
[4] https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
Articolo a cura di Cosimo De Pinto
Informatico Forense, socio IISFA, socio ONIF, certificato CIFI, è Perito e Consulente Tecnico presso il Tribunale Ordinario di Roma. Laureato in Beni Culturali, è stato un pioniere della Digital Forensics, espletando il suo primo incarico come ausiliario di P.G. presso la Procura di Bari nel lontano 1990.Titolare di uno studio professionale, presta la propria consulenza a studi legali, aziende, Procure e FF.OO., in materia di Digital Forensics e CyberCrime.