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.

fig 1

Le cartelle che contengono i file di particolare interesse sono:

  1. files/host;
  2. MicroMsg;
  3. shared_prefs;
  4. /sdcard/tencent/MicroMsg.

fig 2

I file di maggiore interesse contenuti nelle cartelle descritte, sono così suddivisi:

  1. /files/host/*.getdns2
  2. MicroMsg
  • db
  • db
  • SnsMicroMsg
  • cfg
  1. /shared_prefs/
  • tencent.mm_preferences.xml
  • xml
  1. /sdcard/tencent/MicroMsg
  • WeChat
  • 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

Download PDF

https://www.ictsecuritymagazine.com/articoli/wechat-forensics-parte-ii/