SlideShare a Scribd company logo
1 of 41
Download to read offline
Analisi Forense di
Telegram Messenger
sugli Smartphone
Android
Alina Korniychuk
giugno 2018
Cos’è Telegram Messenger?
● Client ufficiale di Messaggistica istantanea
open source.
● Molto diffuso (200 000 000 utenti attivi al
mese).
Software per Analisi Forense
1. Cellebrite UFED
2. Micro Systemation
3. Oxygen Forensics
4. Compelson Labs
Questi software sono in grado di decodificare i
vari dati archiviati da Telegram ma non
forniscono alcuna spiegazione su come questa
decodifica viene eseguita.
Lo scopo del progetto
● Presentare una metodologia di analisi forense
per Telegram Messenger.
● Applicare la metodologia
● Confrontare i dati con quelli estratti dal
software Cellebrite UFED
NB: le debolezze presentate non riguardano il
protocollo Telegram, ma l’app client.
Cosa riusciamo a estrarre
● Dati dell’account utente
● L'elenco dei contatti
● La cronologia e il contenuto dei messaggi
scambiati dagli utenti
● Il contenuto dei file che sono stati inviati o ricevuti
● Le proprietà delle varie chat, gruppi e canali in cui
l'utente è stato coinvolto
● Il log delle chiamate vocali fatte o ricevute.
Informazioni di interesse investigativo
● Ogni utente è identificato da un id univoco (TID), un numero intero scelto dal server
Telegram associato a un numero di telefono.
○ Per ciascun contatto, l’app Telegram memorizza il suo TID, nome utente (se
impostato), il numero di telefono e la foto di profilo.
● La cronologia e il contenuto degli scambi i messaggi sono di evidente importanza
investigativa.
● Le proprietà del dialogo in cui l’utente è stato coinvolto(chat segrete, gruppi privati, ecc)
● La cronologia delle chiamate vocali (cioè, quando una chiamata è stata eseguita, con chi
e per quanto tempo) ha un evidente valore investigativo.
Dove prendere i dati di interesse
● Telegram Messenger memorizza vari dati all'interno della memoria del dispositivo, e in
particolare sia nelle cartelle del bundle privato dell’app che in quelle accessibili alle altra
app:
○ Nelle sottocartelle di data, che è inaccessibile alle altre app e agli utenti standard, ci
sono i dati delle chat e preferences
○ Nella cartella media, il cui accesso è invece non soggetto a restrizione, sono
presenti i files scambiati
■ immagini, audio, video e documents
Vediamo come sono strutturati i dati all’interno della cartella /data.
Dove prendere i dati di interesse
Dove prendere i dati di interesse
● L’analisi mostra che ce ne sono quattro principali dati che forniscono informazioni
rilevanti dal punto di vista forense, in particolare:
○ main database, un database SQLite denominato cache4.db che si trova nella
cartella del database e che contiene molte informazioni importanti, cioè l'elenco
dei contatti dell'utente, la cronologia degli scambi di messaggi, i contenuti dei
messaggi testuali, la posizione in memoria del dispositivo in cui sono memorizzati i
contenuti dei messaggi non testuali, e il log delle chiamate vocali;
○ user configuration file, un file XML denominato userconfing.xml collocato nella
cartella preferences, che memorizza i dettagli dell'account Telegram usato sul
dispositivo;
○ le foto del profilo dell'utente e dei suoi contatti, memorizzati nella cartella cache,
che può rivelare informazioni sulla reale identità di contatti dell'utente;
○ le copie dei file inviati o ricevuti dall'utente tramite Telegram Messenger, che sono
memorizzati nella cartella media.
Come ottenere i dati di interesse
● Telegram Messenger memorizza la maggior parte dei dati che genera in strutture dati
complesse, che chiamiamo Telegram Data Structures (TDS), archiviati in formato
binario serializzato.
● Pertanto, per recuperare le informazioni di un TDS, è necessario innanzitutto
deserializzare, cioè estrarre i vari campi dalla corrispondente sequenza binaria, e poi
decodificare.
● La documentazione ufficiale di Telegram fornisce le regole per deserializzare i tipi base.
(int, string, etc)
● Per i tipi compositi (strutture dati costituite da un insieme di attributi) la
documentazione di cui sopra è, al momento, obsoleta e incompleta.
● L'analisi del codice sorgente ha permesso di determinare la deserializzazione di un tipo
composito.
○ deserializzando ricorsivamente i suoi attributi (tipi base) si riesce a deserializzare il
tipo composito.
Identificazione dei dati dell’account
● Questa informazione è memorizzata nel configuration file
dell'utente, e in particolare in uno dei suoi attributi, che è
denominato user.
● Questo attributo memorizza un TDS di tipo User, la cui struttura è
riportata nella tabella successiva.
● TDS User utilizza altri TDS di tipo UserProfilePhoto e FileLocation.
● La struttura di questi TDS è riportata nella documentazione ufficiale.
Identificazione dei dati dell’account
Identificazione dei dati dell’account
● In questo esempio viene mostrato TDS user serializzato, memorizzato
nel campo user del user configuration file, e i suoi campi dopo che
sono stati deserializzati e decodificati.
Ricostruzione della lista dei contatti
● Telegram suddivide le informazioni relative a ciascun contatto su
due tabelle del main database:
○ i contatti effettivi
○ gli utenti di Telegram che sono noti all’utente locale (ad esempio, quelli che hanno
pubblicato un messaggio in un gruppo comune) anche se non appartengono
all'elenco dei contatti.
Ricostruzione della lista dei contatti
● Ogni record nella tabella contacts memorizza il TID del contatto corrispondente (campo
uid) e un valore booleano (campo mutual) che indica se l'utente locale è anche nella
lista dei contatti di quel contatto.
Ricostruzione della lista dei contatti
● L'elenco dei contatti dell'utente può essere ricostruito selezionando i record nella tabelle
users che hanno un record corrispondente nella tabella contacts, come fatto dalla
seguente query SQL:
○ SELECT ∗ FROM users WHERE uid IN (SELECT uid FROM contacts)
Ricostruzione della lista dei contatti
● Questo esempio mostra come un record nella tabella contacts è collegato al record
corrispondente nella tabella users, insieme ad altri due record di quest’ultima tabella
che non corrispondono a un contatto.
Identificazione dei contatti bloccati
● Telegram consente a un utente di bloccare un contatto. Quando
l'utente blocca un contatto, Telegram Messenger aggiunge un
record alla tabella blocked_users del main database, che contiene
solo un campo (denominato uid), che memorizza il TID dei contatti
bloccati.
● Pertanto, la serie di utenti bloccati può essere ricostruita
selezionando tali record nella tabella contacts i cui TID sono
memorizzati anche nella tabella blocked_users, come è fatto dalla
seguente query SQL:
○ SELECT ∗ FROM contacts WHERE uid IN (SELECT uid FROM blocked_users)
Ricostruzione degli scambi di messaggi
● Telegram organizza i messaggi scambiati dall'utente in finestre di dialogo, ognuna
corrispondente a una specifica chat, (super) gruppo o canale.
● Le informazioni relative alle finestre di dialogo con cui l'utente è stato coinvolto vengono
memorizzate nella tabella dialogs.
○ Ogni record memorizza l'ID della finestra di dialogo (DID), l'ora e la data
dell'ultima operazione eseguita nella finestra di dialogo, il numero di messaggi che
devono ancora essere letti, se la finestra di dialogo è stata bloccata e altre
informazioni meno rilevanti.
● Telegram memorizza un record per ogni messaggio nella tabella messages, è presente
un campo UID dove viene memorizzato DID della finestra di dialogo.
● Pertanto, i messaggi scambiati in una finestra di dialogo con DID xxxx possono essere
identificati selezionando tali record nella tabella messages il cui campo UID contiene il
valore xxxx, come fatto dalla seguente query SQL:
○ SELECT ∗ FROM messages WHERE uid=xxxx
Ricostruzione degli scambi di messaggi
● Questo esempio mostra due finestre di dialogo, corrispondenti ai
DID 77000 e 278291552, e i relativi messaggi.
Identificazione di chat segrete
● Telegram permette di creare chat segrete (end-to-end encrypted).
● Per ogni chat segreta, Telegram memorizza un record nella tabella enc_chats.
○ vengono memorizzate informazioni del tipo: id della chat(campo uid), il suo nome
(campo name) e il TID del partner di chat (campo user).
○ altre informazioni sono codificate nel TDS EncryptedChat memorizzato nel campo
data.
Identificazione di chat segrete
● Per identificare i messaggi scambiati in una determinata chat segreta, è necessario
identificare il record nella tabella dialogs, per poter poi trovare il record corrispondente
nella tabella messages.
● L’analisi ha mostrato che, per questi record, abbiamo dialogs.did = enc_chats.uid << 32,
dove << indica l'operatore di spostamento a sinistra.
● Quindi, i dialoghi corrispondenti alle chat segrete possono essere identificati dalla
seguente query SQL:
○ SELECT ∗ FROM dialogs WHERE did IN (SELECT uid <<32 FROM enc_chats)
Identificazione di chat segrete
● Vediamo un esempio, dove mostriamo un record nelle tabelle enc_chats e il record
corrispondente nella tabella dialogs (notare che 1952104764 << 32 =
8384226119745798144). Decodificando i campi del record enc_chats vediamo che la chat
segreta è stata creata dall'utente il cui TID è 247533163, è stata creato il 24 novembre
2016 ed è stato aggiunto l'utente il cui TID è 281235098.
●
Identificazione di gruppi, supergruppi e canali
● Per ogni gruppo, supergruppo o canale, Telegram memorizza un record nella tabella
chats e un record nella tabella dialogs.
● I record di queste tabelle che corrispondono alla stessa finestra di dialogo sono collegati
tra loro tramite i valori memorizzati nei campi uid e did. In particolare, abbiamo
dialogs.did = -chats.uid. Pertanto, le finestre di dialogo corrispondenti ad un (super)
gruppo o canale possono essere identificati dalla seguente query SQL:
○ SELECT ∗ FROM dialogs WHERE did IN (SELECT −uid FROM chats)
● La tabella chats memorizza l'id di (super) gruppo (campo uid) e il suo nome (campo
name). Ulteriori informazioni sono invece codificate nel TDS di tipo Chat memorizzato
nel campo data(vedere successiva slide). I dati memorizzati in questo TDS consentono di
determinare molte proprietà della finestra di dialogo. In particolare, un dialogo privato
ha username = null, invece il tipo di dialogo può essere determinato correlando i valori
memorizzati nel campo version e nel megagroup come segue:
○ se version=1, allora dialog è un gruppo;
○ se version=0 e megagroup=True, allora dialog è un supergroup;
○ se version=0 and megagroup=False, allora dialog è un canale.
Identificazione di gruppi, supergruppi e canali
Identificazione di gruppi, supergruppi e canali
● La figura rappresenta un estratto
della tabella chats che contiene
quattro record, ognuno
corrispondente a un diverso
(super) gruppo / canale
● Record n. 1 corrisponde a un
gruppo privato (username = null)
(version = 1), che è stato creato
dall'utente locale (creator = True)
il 9 aprile 2017 alle 11:42:15 UTC
(date = 1491738135), e di cui il
titolo è "GroupTest". L'utente è
ancora membro del gruppo (left
= Falso), che ha due partecipanti
(participants_count = 2).
Identificazione di gruppi, supergruppi e canali
● Record n. 2 corrisponde a un
supergruppo pubblico (username =
PublicTestGroup) (version = 0 e
megagroup = True), il cui titolo è
'Telegram Party', l'utente locale ha
aderito (creator = False) il 14 aprile 2017
alle 8:01: 23 UTC (date = 1492156883), e
successivamente ha lasciato (left = True).
Questo supergruppo è associato a una
foto del profilo, memorizzata nel file
421206657 74766.jpg (dimensioni ridotte)
e 421206657 74768.jpg (dimensioni
maggiori), entrambi memorizzati nella
directory cache.
● ...
Ricostruzione della cronologia e del contenuto dei msg
● Le informazioni relative ai messaggi scambiati nelle varie chat, comprese le chat segrete,
sono memorizzate nella tabella messages. Ogni record memorizza il Message Identifier
(MID) univoco e il DID della finestra di dialogo, se il messaggio è stato inviato o meno
(campo send_state), se è stato letto o meno (campo read_state), sia che si tratti di un
messaggio in arrivo o in uscita (campo out), la data dell'ultima modifica del suo stato (campo
date), e il suo contenuto codificato in un TDS di tipo Message memorizzato nel campo data.
Ricostruzione della cronologia e del contenuto dei msg
● I contenuti di tutti i tipi di messaggi vengono codificati nel TDS Message, vale la pena
sottolineare che anche i messaggi che appartengono alle chat segrete vengono
memorizzati nel main database senza essere cifrati.
● La struttura del TDS Message è fatta come segue:
Ricostruzione della cronologia e del contenuto dei msg
● Mentre la decodifica del contenuto di un messaggio testuale è semplice, poiché è
memorizzata come stringa UTF-8 nel campo message, per quelli non testuali la situazione è
più elaborata. In particolare, il TDS MessageMedia, memorizzato nel campo media, viene
istanziato a un TDS diverso in base al suo tipo di contenuto.
● Di seguito, è mostrata l’elenco di tutti i TDS utilizzati per memorizzare i dettagli relativi ai
contenuti non testuali.
Ricostruzione della cronologia e del contenuto dei msg
● Quando un file contenente un'immagine viene inviato o ricevuto, Telegram crea diverse
copie di esso, che differiscono l'una dall'altra nelle loro dimensioni, e le memorizza nella
sottocartella Telegram Images della cartella media o nella cartella cache.
● I dettagli di questi file sono memorizzati nel TDS messageMediaPhoto e in particolare nel
campo sizes, che contiene un elenco di TDS di tipo PhotoSize.
Ricostruzione della cronologia e del contenuto dei msg
● Nel database del mittente, attributo attach_path del TDS Message contiene la path dove è
memorizzato il file che è stato inviato.
● Nell’esempio viene mostrato come decodificare il campo data di un record nella tabella
Messages corrispondente a un'immagine che è stata inviata, insieme alle copie di questo file
che sono state salvate nelle cartelle Telegram Image e cache.
Ricostruzione della cronologia e del contenuto dei msg
● Per i file diversi dalle immagini, Telegram memorizza solo una copia in una delle
sottocartelle della cartella media, in base al suo tipo specifico. In particolare, i file audio, video
e generici vengono memorizzati rispettivamente nella cartella Telegram Audio, Telegram
Video e Telegram Documents.
● Le informazioni relative a questi file sono memorizzate nel TDS messageMediaDocument.
Ricostruzione della cronologia e del contenuto dei msg
● Viene mostrato un esempio su come interpretare le informazioni memorizzate nel TDS
messageMediaDocument di tre record della tabella messages, corrispondenti a un video,
un audio e un file PDF inviato dall’utente.
Ricostruzione della cronologia e del contenuto dei msg
● Oltre ai file, Telegram consente agli utenti di scambiarsi informazioni sui contatti usando
messaggi non testuali. Per questo tipo di messaggi non testuali Telegram utilizza il TDS
messageMediaContact per memorizzare i dettagli relativi al contatto che è stato scambiato.
● Un esempio è mostrato nella Fig. seguente, dove record con mid = 9 corrisponde all'invio di
un contatto il cui numero di telefono è 111222333, e il cui nome e cognome sono
rispettivamente Fake e Contact.
Ricostruzione della cronologia e del contenuto dei msg
● L'ultimo tipo di messaggio non testuale consentito dai trasferimenti di Telegram è
l'informazione di geolocalizzazione.
● Per questo tipo di messaggi non testuali Telegram utilizza un TDS messageMediaVenue o un
TDS messageMediaGeo.
● MessageMediaGeo ha solo un campo geo e viene utilizzato quando vengono inviate solo le
coordinate geografiche, mentre messageMediaVenue ha anche campi title, address,
provider e venue_id e viene utilizzato quando viene trasferita anche una mappa .
Ricostruzione del registro delle chiamate vocali
● L'analisi dei risultati raccolti durante questi esperimenti mostra che i dati memorizzati nel
main database consentono di ricostruire il log delle chiamate vocali in cui l'utente è stato
coinvolto.
● Telegram memorizza un record nella tabella messages, che a sua volta memorizza nel campo
action il TDS messageActionPhoneCall contenente le identità delle parti coinvolte, la durata
della chiamata e, per le chiamate non riuscite, il motivo dell'errore.
● Come si può osservare dalla Tabella seguente, questo TDS memorizza l'identificativo della
chiamata (campo call_id), la sua durata (campo duration) e il motivo della sua cessazione
(campo reason). I TID dei partner coinvolti nella chiamata vengono invece memorizzati nei
campi from_id e to_id del TDS Message per le chiamate in uscita, mentre per le chiamate in
arrivo entrambi questi campi memorizzano il valore del chiamante (poiché il chiamante è
l'utente locale).
Ricostruzione del registro delle chiamate vocali
● Un esempio è mostrato in Fig. seguente, dove mostriamo i record della tabella messages
corrispondenti a quattro chiamate vocali distinte, insieme alle informazioni recuperate dai vari
campi rilevanti del TDS memorizzati nei campi data. Dai dati mostrati in Fig., è facile vedere
che i primi due record corrispondono alle chiamate in uscita verso l'utente il cui TID è
264990279, mentre gli ultimi due corrispondono alle chiamate in arrivo provenienti da
quell'utente.
Trattare con la cancellazione
● Nel tentativo di nascondere le interazioni fatte, l'utente può cancellare varie informazioni dal
main database.
● Nei database SQLite i record eliminati vengono mantenuti nelle cosiddette celle non allocate,
ovvero, lo spazio allocato memorizzato nel file corrispondente al database, da cui in alcuni casi
(in particolare, se SQLite Engine non ha ancora cancellato le tabelle coinvolti), possono essere
recuperati.
● Tuttavia, in generale, il tempo di persistenza di questi record è imprevedibile, in quanto
vengono eliminati in modo permanente quando il database viene sottoposto all’eliminazione,
un'operazione sotto il controllo completo di SQLite engine.
● Pertanto, sebbene la possibilità di recuperare informazioni cancellate esista in teoria, non si
può presumere che - in generale - tale recupero sia possibile per il caso specifico in questione.
Conclusioni
● Il paper dimostra che si è in grado estrarre tutte le informazioni sensibili
lasciate da Telegram Messenger su smartphone Android
○ Se si ha accesso alla device
○ La device con permessi root
○ oppure, senza avere permessi root, se la device ha attivato l’opzione debug USB
● Telegram concentra molta attenzione sulla sicurezza del protocollo,
ma nulla sul client
○ nessuna protezione, i dati sono in chiaro
Grazie per l’attenzione!
Riferimenti: Cosimo Anglano, Massimo Canonico, Marco Guazzone, “Forensic Analysis of Telegram Messenger on Android Smartphones,”
Digital Investigation, Volume 23, December 2017, Pages 31–49.

More Related Content

What's hot

Using PGP for securing the e-mail
Using PGP for securing the e-mailUsing PGP for securing the e-mail
Using PGP for securing the e-maildavidepiccardi
 
Advanced encryption standard (aes)
Advanced encryption standard (aes)Advanced encryption standard (aes)
Advanced encryption standard (aes)farazvirk554
 
Message Authentication Requirement-MAC
Message Authentication Requirement-MACMessage Authentication Requirement-MAC
Message Authentication Requirement-MACSou Jana
 
The des algorithm illustrated
The des algorithm illustratedThe des algorithm illustrated
The des algorithm illustratedNIKKHILK111
 
Network security 10EC832 vtu notes
Network security 10EC832 vtu notesNetwork security 10EC832 vtu notes
Network security 10EC832 vtu notesJayanth Dwijesh H P
 
Explain in detail about a model for network security
Explain in detail about a model for network securityExplain in detail about a model for network security
Explain in detail about a model for network securityPVSaiGanesh
 
PGP S/MIME
PGP S/MIMEPGP S/MIME
PGP S/MIMESou Jana
 
Information and data security public key cryptography and rsa
Information and data security public key cryptography and rsaInformation and data security public key cryptography and rsa
Information and data security public key cryptography and rsaMazin Alwaaly
 
Encryption and Decryption
Encryption and DecryptionEncryption and Decryption
Encryption and DecryptionRajaKrishnan M
 
Microsoft Offical Course 20410C_09
Microsoft Offical Course 20410C_09Microsoft Offical Course 20410C_09
Microsoft Offical Course 20410C_09gameaxt
 
Webinar: MongoDB Schema Design and Performance Implications
Webinar: MongoDB Schema Design and Performance ImplicationsWebinar: MongoDB Schema Design and Performance Implications
Webinar: MongoDB Schema Design and Performance ImplicationsMongoDB
 
OSINT using Twitter & Python
OSINT using Twitter & PythonOSINT using Twitter & Python
OSINT using Twitter & Python37point2
 
Cryptography
CryptographyCryptography
CryptographyAnandKaGe
 
secure file Storage on cloud ppt
secure file Storage on cloud pptsecure file Storage on cloud ppt
secure file Storage on cloud pptNishmithaHc
 
Conventional Encryption NS2
Conventional Encryption NS2Conventional Encryption NS2
Conventional Encryption NS2koolkampus
 

What's hot (19)

Using PGP for securing the e-mail
Using PGP for securing the e-mailUsing PGP for securing the e-mail
Using PGP for securing the e-mail
 
Advanced encryption standard (aes)
Advanced encryption standard (aes)Advanced encryption standard (aes)
Advanced encryption standard (aes)
 
Message Authentication Requirement-MAC
Message Authentication Requirement-MACMessage Authentication Requirement-MAC
Message Authentication Requirement-MAC
 
The des algorithm illustrated
The des algorithm illustratedThe des algorithm illustrated
The des algorithm illustrated
 
Hack and Slash: Secure Coding
Hack and Slash: Secure CodingHack and Slash: Secure Coding
Hack and Slash: Secure Coding
 
Network security 10EC832 vtu notes
Network security 10EC832 vtu notesNetwork security 10EC832 vtu notes
Network security 10EC832 vtu notes
 
Explain in detail about a model for network security
Explain in detail about a model for network securityExplain in detail about a model for network security
Explain in detail about a model for network security
 
PGP S/MIME
PGP S/MIMEPGP S/MIME
PGP S/MIME
 
Kerberos
KerberosKerberos
Kerberos
 
Information and data security public key cryptography and rsa
Information and data security public key cryptography and rsaInformation and data security public key cryptography and rsa
Information and data security public key cryptography and rsa
 
Encryption and Decryption
Encryption and DecryptionEncryption and Decryption
Encryption and Decryption
 
Microsoft Offical Course 20410C_09
Microsoft Offical Course 20410C_09Microsoft Offical Course 20410C_09
Microsoft Offical Course 20410C_09
 
Webinar: MongoDB Schema Design and Performance Implications
Webinar: MongoDB Schema Design and Performance ImplicationsWebinar: MongoDB Schema Design and Performance Implications
Webinar: MongoDB Schema Design and Performance Implications
 
OSINT using Twitter & Python
OSINT using Twitter & PythonOSINT using Twitter & Python
OSINT using Twitter & Python
 
Kerberos protocol
Kerberos protocolKerberos protocol
Kerberos protocol
 
Cryptography
CryptographyCryptography
Cryptography
 
Cryptography
CryptographyCryptography
Cryptography
 
secure file Storage on cloud ppt
secure file Storage on cloud pptsecure file Storage on cloud ppt
secure file Storage on cloud ppt
 
Conventional Encryption NS2
Conventional Encryption NS2Conventional Encryption NS2
Conventional Encryption NS2
 

Similar to Analisi Forense di Telegram Messenger sugli Smartphone Android

Metodologia per la classificazione automatica di commenti su social network tesi
Metodologia per la classificazione automatica di commenti su social network tesiMetodologia per la classificazione automatica di commenti su social network tesi
Metodologia per la classificazione automatica di commenti su social network tesiSimone Maver
 
Il progetto Open Data in Trentino
Il progetto Open Data in TrentinoIl progetto Open Data in Trentino
Il progetto Open Data in Trentinodatitrentinoit
 
Porte aperte nelle app android scoperta diagnosi e valutazione di sicurezza ...
Porte aperte nelle app android scoperta diagnosi e valutazione di sicurezza  ...Porte aperte nelle app android scoperta diagnosi e valutazione di sicurezza  ...
Porte aperte nelle app android scoperta diagnosi e valutazione di sicurezza ...Massimiliano Cristarella
 

Similar to Analisi Forense di Telegram Messenger sugli Smartphone Android (7)

Open Data in Trentino
Open Data in TrentinoOpen Data in Trentino
Open Data in Trentino
 
06 3 struct
06 3 struct06 3 struct
06 3 struct
 
Open Data in Trentino - Corso Trentino School of Management (TSM)
Open Data in Trentino - Corso Trentino School of Management (TSM)Open Data in Trentino - Corso Trentino School of Management (TSM)
Open Data in Trentino - Corso Trentino School of Management (TSM)
 
Metodologia per la classificazione automatica di commenti su social network tesi
Metodologia per la classificazione automatica di commenti su social network tesiMetodologia per la classificazione automatica di commenti su social network tesi
Metodologia per la classificazione automatica di commenti su social network tesi
 
Elaborato WebRTC
Elaborato WebRTCElaborato WebRTC
Elaborato WebRTC
 
Il progetto Open Data in Trentino
Il progetto Open Data in TrentinoIl progetto Open Data in Trentino
Il progetto Open Data in Trentino
 
Porte aperte nelle app android scoperta diagnosi e valutazione di sicurezza ...
Porte aperte nelle app android scoperta diagnosi e valutazione di sicurezza  ...Porte aperte nelle app android scoperta diagnosi e valutazione di sicurezza  ...
Porte aperte nelle app android scoperta diagnosi e valutazione di sicurezza ...
 

Analisi Forense di Telegram Messenger sugli Smartphone Android

  • 1. Analisi Forense di Telegram Messenger sugli Smartphone Android Alina Korniychuk giugno 2018
  • 2. Cos’è Telegram Messenger? ● Client ufficiale di Messaggistica istantanea open source. ● Molto diffuso (200 000 000 utenti attivi al mese).
  • 3. Software per Analisi Forense 1. Cellebrite UFED 2. Micro Systemation 3. Oxygen Forensics 4. Compelson Labs Questi software sono in grado di decodificare i vari dati archiviati da Telegram ma non forniscono alcuna spiegazione su come questa decodifica viene eseguita.
  • 4. Lo scopo del progetto ● Presentare una metodologia di analisi forense per Telegram Messenger. ● Applicare la metodologia ● Confrontare i dati con quelli estratti dal software Cellebrite UFED NB: le debolezze presentate non riguardano il protocollo Telegram, ma l’app client.
  • 5. Cosa riusciamo a estrarre ● Dati dell’account utente ● L'elenco dei contatti ● La cronologia e il contenuto dei messaggi scambiati dagli utenti ● Il contenuto dei file che sono stati inviati o ricevuti ● Le proprietà delle varie chat, gruppi e canali in cui l'utente è stato coinvolto ● Il log delle chiamate vocali fatte o ricevute.
  • 6. Informazioni di interesse investigativo ● Ogni utente è identificato da un id univoco (TID), un numero intero scelto dal server Telegram associato a un numero di telefono. ○ Per ciascun contatto, l’app Telegram memorizza il suo TID, nome utente (se impostato), il numero di telefono e la foto di profilo. ● La cronologia e il contenuto degli scambi i messaggi sono di evidente importanza investigativa. ● Le proprietà del dialogo in cui l’utente è stato coinvolto(chat segrete, gruppi privati, ecc) ● La cronologia delle chiamate vocali (cioè, quando una chiamata è stata eseguita, con chi e per quanto tempo) ha un evidente valore investigativo.
  • 7. Dove prendere i dati di interesse ● Telegram Messenger memorizza vari dati all'interno della memoria del dispositivo, e in particolare sia nelle cartelle del bundle privato dell’app che in quelle accessibili alle altra app: ○ Nelle sottocartelle di data, che è inaccessibile alle altre app e agli utenti standard, ci sono i dati delle chat e preferences ○ Nella cartella media, il cui accesso è invece non soggetto a restrizione, sono presenti i files scambiati ■ immagini, audio, video e documents Vediamo come sono strutturati i dati all’interno della cartella /data.
  • 8. Dove prendere i dati di interesse
  • 9. Dove prendere i dati di interesse ● L’analisi mostra che ce ne sono quattro principali dati che forniscono informazioni rilevanti dal punto di vista forense, in particolare: ○ main database, un database SQLite denominato cache4.db che si trova nella cartella del database e che contiene molte informazioni importanti, cioè l'elenco dei contatti dell'utente, la cronologia degli scambi di messaggi, i contenuti dei messaggi testuali, la posizione in memoria del dispositivo in cui sono memorizzati i contenuti dei messaggi non testuali, e il log delle chiamate vocali; ○ user configuration file, un file XML denominato userconfing.xml collocato nella cartella preferences, che memorizza i dettagli dell'account Telegram usato sul dispositivo; ○ le foto del profilo dell'utente e dei suoi contatti, memorizzati nella cartella cache, che può rivelare informazioni sulla reale identità di contatti dell'utente; ○ le copie dei file inviati o ricevuti dall'utente tramite Telegram Messenger, che sono memorizzati nella cartella media.
  • 10. Come ottenere i dati di interesse ● Telegram Messenger memorizza la maggior parte dei dati che genera in strutture dati complesse, che chiamiamo Telegram Data Structures (TDS), archiviati in formato binario serializzato. ● Pertanto, per recuperare le informazioni di un TDS, è necessario innanzitutto deserializzare, cioè estrarre i vari campi dalla corrispondente sequenza binaria, e poi decodificare. ● La documentazione ufficiale di Telegram fornisce le regole per deserializzare i tipi base. (int, string, etc) ● Per i tipi compositi (strutture dati costituite da un insieme di attributi) la documentazione di cui sopra è, al momento, obsoleta e incompleta. ● L'analisi del codice sorgente ha permesso di determinare la deserializzazione di un tipo composito. ○ deserializzando ricorsivamente i suoi attributi (tipi base) si riesce a deserializzare il tipo composito.
  • 11. Identificazione dei dati dell’account ● Questa informazione è memorizzata nel configuration file dell'utente, e in particolare in uno dei suoi attributi, che è denominato user. ● Questo attributo memorizza un TDS di tipo User, la cui struttura è riportata nella tabella successiva. ● TDS User utilizza altri TDS di tipo UserProfilePhoto e FileLocation. ● La struttura di questi TDS è riportata nella documentazione ufficiale.
  • 12. Identificazione dei dati dell’account
  • 13. Identificazione dei dati dell’account ● In questo esempio viene mostrato TDS user serializzato, memorizzato nel campo user del user configuration file, e i suoi campi dopo che sono stati deserializzati e decodificati.
  • 14. Ricostruzione della lista dei contatti ● Telegram suddivide le informazioni relative a ciascun contatto su due tabelle del main database: ○ i contatti effettivi ○ gli utenti di Telegram che sono noti all’utente locale (ad esempio, quelli che hanno pubblicato un messaggio in un gruppo comune) anche se non appartengono all'elenco dei contatti.
  • 15. Ricostruzione della lista dei contatti ● Ogni record nella tabella contacts memorizza il TID del contatto corrispondente (campo uid) e un valore booleano (campo mutual) che indica se l'utente locale è anche nella lista dei contatti di quel contatto.
  • 16. Ricostruzione della lista dei contatti ● L'elenco dei contatti dell'utente può essere ricostruito selezionando i record nella tabelle users che hanno un record corrispondente nella tabella contacts, come fatto dalla seguente query SQL: ○ SELECT ∗ FROM users WHERE uid IN (SELECT uid FROM contacts)
  • 17. Ricostruzione della lista dei contatti ● Questo esempio mostra come un record nella tabella contacts è collegato al record corrispondente nella tabella users, insieme ad altri due record di quest’ultima tabella che non corrispondono a un contatto.
  • 18. Identificazione dei contatti bloccati ● Telegram consente a un utente di bloccare un contatto. Quando l'utente blocca un contatto, Telegram Messenger aggiunge un record alla tabella blocked_users del main database, che contiene solo un campo (denominato uid), che memorizza il TID dei contatti bloccati. ● Pertanto, la serie di utenti bloccati può essere ricostruita selezionando tali record nella tabella contacts i cui TID sono memorizzati anche nella tabella blocked_users, come è fatto dalla seguente query SQL: ○ SELECT ∗ FROM contacts WHERE uid IN (SELECT uid FROM blocked_users)
  • 19. Ricostruzione degli scambi di messaggi ● Telegram organizza i messaggi scambiati dall'utente in finestre di dialogo, ognuna corrispondente a una specifica chat, (super) gruppo o canale. ● Le informazioni relative alle finestre di dialogo con cui l'utente è stato coinvolto vengono memorizzate nella tabella dialogs. ○ Ogni record memorizza l'ID della finestra di dialogo (DID), l'ora e la data dell'ultima operazione eseguita nella finestra di dialogo, il numero di messaggi che devono ancora essere letti, se la finestra di dialogo è stata bloccata e altre informazioni meno rilevanti. ● Telegram memorizza un record per ogni messaggio nella tabella messages, è presente un campo UID dove viene memorizzato DID della finestra di dialogo. ● Pertanto, i messaggi scambiati in una finestra di dialogo con DID xxxx possono essere identificati selezionando tali record nella tabella messages il cui campo UID contiene il valore xxxx, come fatto dalla seguente query SQL: ○ SELECT ∗ FROM messages WHERE uid=xxxx
  • 20. Ricostruzione degli scambi di messaggi ● Questo esempio mostra due finestre di dialogo, corrispondenti ai DID 77000 e 278291552, e i relativi messaggi.
  • 21. Identificazione di chat segrete ● Telegram permette di creare chat segrete (end-to-end encrypted). ● Per ogni chat segreta, Telegram memorizza un record nella tabella enc_chats. ○ vengono memorizzate informazioni del tipo: id della chat(campo uid), il suo nome (campo name) e il TID del partner di chat (campo user). ○ altre informazioni sono codificate nel TDS EncryptedChat memorizzato nel campo data.
  • 22. Identificazione di chat segrete ● Per identificare i messaggi scambiati in una determinata chat segreta, è necessario identificare il record nella tabella dialogs, per poter poi trovare il record corrispondente nella tabella messages. ● L’analisi ha mostrato che, per questi record, abbiamo dialogs.did = enc_chats.uid << 32, dove << indica l'operatore di spostamento a sinistra. ● Quindi, i dialoghi corrispondenti alle chat segrete possono essere identificati dalla seguente query SQL: ○ SELECT ∗ FROM dialogs WHERE did IN (SELECT uid <<32 FROM enc_chats)
  • 23. Identificazione di chat segrete ● Vediamo un esempio, dove mostriamo un record nelle tabelle enc_chats e il record corrispondente nella tabella dialogs (notare che 1952104764 << 32 = 8384226119745798144). Decodificando i campi del record enc_chats vediamo che la chat segreta è stata creata dall'utente il cui TID è 247533163, è stata creato il 24 novembre 2016 ed è stato aggiunto l'utente il cui TID è 281235098. ●
  • 24. Identificazione di gruppi, supergruppi e canali ● Per ogni gruppo, supergruppo o canale, Telegram memorizza un record nella tabella chats e un record nella tabella dialogs. ● I record di queste tabelle che corrispondono alla stessa finestra di dialogo sono collegati tra loro tramite i valori memorizzati nei campi uid e did. In particolare, abbiamo dialogs.did = -chats.uid. Pertanto, le finestre di dialogo corrispondenti ad un (super) gruppo o canale possono essere identificati dalla seguente query SQL: ○ SELECT ∗ FROM dialogs WHERE did IN (SELECT −uid FROM chats) ● La tabella chats memorizza l'id di (super) gruppo (campo uid) e il suo nome (campo name). Ulteriori informazioni sono invece codificate nel TDS di tipo Chat memorizzato nel campo data(vedere successiva slide). I dati memorizzati in questo TDS consentono di determinare molte proprietà della finestra di dialogo. In particolare, un dialogo privato ha username = null, invece il tipo di dialogo può essere determinato correlando i valori memorizzati nel campo version e nel megagroup come segue: ○ se version=1, allora dialog è un gruppo; ○ se version=0 e megagroup=True, allora dialog è un supergroup; ○ se version=0 and megagroup=False, allora dialog è un canale.
  • 25. Identificazione di gruppi, supergruppi e canali
  • 26. Identificazione di gruppi, supergruppi e canali ● La figura rappresenta un estratto della tabella chats che contiene quattro record, ognuno corrispondente a un diverso (super) gruppo / canale ● Record n. 1 corrisponde a un gruppo privato (username = null) (version = 1), che è stato creato dall'utente locale (creator = True) il 9 aprile 2017 alle 11:42:15 UTC (date = 1491738135), e di cui il titolo è "GroupTest". L'utente è ancora membro del gruppo (left = Falso), che ha due partecipanti (participants_count = 2).
  • 27. Identificazione di gruppi, supergruppi e canali ● Record n. 2 corrisponde a un supergruppo pubblico (username = PublicTestGroup) (version = 0 e megagroup = True), il cui titolo è 'Telegram Party', l'utente locale ha aderito (creator = False) il 14 aprile 2017 alle 8:01: 23 UTC (date = 1492156883), e successivamente ha lasciato (left = True). Questo supergruppo è associato a una foto del profilo, memorizzata nel file 421206657 74766.jpg (dimensioni ridotte) e 421206657 74768.jpg (dimensioni maggiori), entrambi memorizzati nella directory cache. ● ...
  • 28. Ricostruzione della cronologia e del contenuto dei msg ● Le informazioni relative ai messaggi scambiati nelle varie chat, comprese le chat segrete, sono memorizzate nella tabella messages. Ogni record memorizza il Message Identifier (MID) univoco e il DID della finestra di dialogo, se il messaggio è stato inviato o meno (campo send_state), se è stato letto o meno (campo read_state), sia che si tratti di un messaggio in arrivo o in uscita (campo out), la data dell'ultima modifica del suo stato (campo date), e il suo contenuto codificato in un TDS di tipo Message memorizzato nel campo data.
  • 29. Ricostruzione della cronologia e del contenuto dei msg ● I contenuti di tutti i tipi di messaggi vengono codificati nel TDS Message, vale la pena sottolineare che anche i messaggi che appartengono alle chat segrete vengono memorizzati nel main database senza essere cifrati. ● La struttura del TDS Message è fatta come segue:
  • 30. Ricostruzione della cronologia e del contenuto dei msg ● Mentre la decodifica del contenuto di un messaggio testuale è semplice, poiché è memorizzata come stringa UTF-8 nel campo message, per quelli non testuali la situazione è più elaborata. In particolare, il TDS MessageMedia, memorizzato nel campo media, viene istanziato a un TDS diverso in base al suo tipo di contenuto. ● Di seguito, è mostrata l’elenco di tutti i TDS utilizzati per memorizzare i dettagli relativi ai contenuti non testuali.
  • 31. Ricostruzione della cronologia e del contenuto dei msg ● Quando un file contenente un'immagine viene inviato o ricevuto, Telegram crea diverse copie di esso, che differiscono l'una dall'altra nelle loro dimensioni, e le memorizza nella sottocartella Telegram Images della cartella media o nella cartella cache. ● I dettagli di questi file sono memorizzati nel TDS messageMediaPhoto e in particolare nel campo sizes, che contiene un elenco di TDS di tipo PhotoSize.
  • 32. Ricostruzione della cronologia e del contenuto dei msg ● Nel database del mittente, attributo attach_path del TDS Message contiene la path dove è memorizzato il file che è stato inviato. ● Nell’esempio viene mostrato come decodificare il campo data di un record nella tabella Messages corrispondente a un'immagine che è stata inviata, insieme alle copie di questo file che sono state salvate nelle cartelle Telegram Image e cache.
  • 33. Ricostruzione della cronologia e del contenuto dei msg ● Per i file diversi dalle immagini, Telegram memorizza solo una copia in una delle sottocartelle della cartella media, in base al suo tipo specifico. In particolare, i file audio, video e generici vengono memorizzati rispettivamente nella cartella Telegram Audio, Telegram Video e Telegram Documents. ● Le informazioni relative a questi file sono memorizzate nel TDS messageMediaDocument.
  • 34. Ricostruzione della cronologia e del contenuto dei msg ● Viene mostrato un esempio su come interpretare le informazioni memorizzate nel TDS messageMediaDocument di tre record della tabella messages, corrispondenti a un video, un audio e un file PDF inviato dall’utente.
  • 35. Ricostruzione della cronologia e del contenuto dei msg ● Oltre ai file, Telegram consente agli utenti di scambiarsi informazioni sui contatti usando messaggi non testuali. Per questo tipo di messaggi non testuali Telegram utilizza il TDS messageMediaContact per memorizzare i dettagli relativi al contatto che è stato scambiato. ● Un esempio è mostrato nella Fig. seguente, dove record con mid = 9 corrisponde all'invio di un contatto il cui numero di telefono è 111222333, e il cui nome e cognome sono rispettivamente Fake e Contact.
  • 36. Ricostruzione della cronologia e del contenuto dei msg ● L'ultimo tipo di messaggio non testuale consentito dai trasferimenti di Telegram è l'informazione di geolocalizzazione. ● Per questo tipo di messaggi non testuali Telegram utilizza un TDS messageMediaVenue o un TDS messageMediaGeo. ● MessageMediaGeo ha solo un campo geo e viene utilizzato quando vengono inviate solo le coordinate geografiche, mentre messageMediaVenue ha anche campi title, address, provider e venue_id e viene utilizzato quando viene trasferita anche una mappa .
  • 37. Ricostruzione del registro delle chiamate vocali ● L'analisi dei risultati raccolti durante questi esperimenti mostra che i dati memorizzati nel main database consentono di ricostruire il log delle chiamate vocali in cui l'utente è stato coinvolto. ● Telegram memorizza un record nella tabella messages, che a sua volta memorizza nel campo action il TDS messageActionPhoneCall contenente le identità delle parti coinvolte, la durata della chiamata e, per le chiamate non riuscite, il motivo dell'errore. ● Come si può osservare dalla Tabella seguente, questo TDS memorizza l'identificativo della chiamata (campo call_id), la sua durata (campo duration) e il motivo della sua cessazione (campo reason). I TID dei partner coinvolti nella chiamata vengono invece memorizzati nei campi from_id e to_id del TDS Message per le chiamate in uscita, mentre per le chiamate in arrivo entrambi questi campi memorizzano il valore del chiamante (poiché il chiamante è l'utente locale).
  • 38. Ricostruzione del registro delle chiamate vocali ● Un esempio è mostrato in Fig. seguente, dove mostriamo i record della tabella messages corrispondenti a quattro chiamate vocali distinte, insieme alle informazioni recuperate dai vari campi rilevanti del TDS memorizzati nei campi data. Dai dati mostrati in Fig., è facile vedere che i primi due record corrispondono alle chiamate in uscita verso l'utente il cui TID è 264990279, mentre gli ultimi due corrispondono alle chiamate in arrivo provenienti da quell'utente.
  • 39. Trattare con la cancellazione ● Nel tentativo di nascondere le interazioni fatte, l'utente può cancellare varie informazioni dal main database. ● Nei database SQLite i record eliminati vengono mantenuti nelle cosiddette celle non allocate, ovvero, lo spazio allocato memorizzato nel file corrispondente al database, da cui in alcuni casi (in particolare, se SQLite Engine non ha ancora cancellato le tabelle coinvolti), possono essere recuperati. ● Tuttavia, in generale, il tempo di persistenza di questi record è imprevedibile, in quanto vengono eliminati in modo permanente quando il database viene sottoposto all’eliminazione, un'operazione sotto il controllo completo di SQLite engine. ● Pertanto, sebbene la possibilità di recuperare informazioni cancellate esista in teoria, non si può presumere che - in generale - tale recupero sia possibile per il caso specifico in questione.
  • 40. Conclusioni ● Il paper dimostra che si è in grado estrarre tutte le informazioni sensibili lasciate da Telegram Messenger su smartphone Android ○ Se si ha accesso alla device ○ La device con permessi root ○ oppure, senza avere permessi root, se la device ha attivato l’opzione debug USB ● Telegram concentra molta attenzione sulla sicurezza del protocollo, ma nulla sul client ○ nessuna protezione, i dati sono in chiaro
  • 41. Grazie per l’attenzione! Riferimenti: Cosimo Anglano, Massimo Canonico, Marco Guazzone, “Forensic Analysis of Telegram Messenger on Android Smartphones,” Digital Investigation, Volume 23, December 2017, Pages 31–49.