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.

fig 1
Le cartelle che contengono i file di particolare interesse sono:
- files/host;
- MicroMsg;
- shared_prefs;
- /sdcard/tencent/MicroMsg.

fig 2
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.

fig 4

fig 5
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:

fig 7

fig 8
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:

fig 9

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:

fig 11

fig 12
Analogo metodo è adoperabile per l’accesso al database enFavourite.db dato che la chiave di decifrazione è la stessa utilizzata per EnMicroMsg.db:

fig 13
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:

fig 14

fig 15
Certamente, i dati più significativi risiedono nel database EnMicroMsg.db.

fig 16
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:

fig 17
- 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.

fig 18
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).

fig 19
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.

fig 20
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.

fig 21
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.

fig 22
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.

fig 23
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.

fig 24
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 -.

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
https://www.ictsecuritymagazine.com/articoli/wechat-forensics-parte-ii/