Seconda parte concernente l’analisi forense della più veloce applicazione di messaggistica sul mercato, Telegram. Questa seconda parte è dedicata ad Android.
Con la versione 4.8.11 – ultima release attualmente scaricabile da Play store alla data di stesura dell’articolo – arrivano su Telegram numerose altre funzioni interessanti: possibilità di selezionare una chat come letta/non letta premendo su di essa; anteprima della conversazione con un determinato contatto premendo la foto profilo nella lista chat; possibilità, scrivendo un messaggio, di inserimento di un URL cliccabile e annullamento dei messaggi non ancora inviati.
Telegram è, come già illustrato nell’articolo precedente, un’applicazione di messaggistica istantanea sicura con il vantaggio di essere disponibile su iOS, Android e Windows Phone, ma anche in una versione Web; vi sono applicazioni anche per MacOS, Windows e Linux. Quindi è possibile utilizzare Telegram comodamente su quasi tutte le piattaforme possibili e immaginabili.
Per chi volesse approfondire la conoscenza di Telegram per Android, può consultare il sito https://github.com/DrKLO/Telegram, dove troverà i sorgenti dell’applicazione e le istruzioni per crearne una propria dalle caratteristiche similari.
Le caratteristiche dell’applicazione sono state già descritte nell’articolo su iOS; quindi darò dei cenni qualora vi siano delle evidenti discrepanze.
Ad esempio: una peculiarità che differenzia le ‘chat segrete’ di iOS da Android è la possibilità del primo di effettuare screenshot all’interno della chat che vengono comunque notificate all’interlocutore; su Android ciò non è possibile – a meno di determinati accorgimenti: l’impostazione del PIN o di una password prima dell’inizio della chat consente di effettuare screenshot -; senza tale accorgimento, si riceverà il messaggio evidenziato in fig.1:
Come ribadito innumerevoli volte, il primo passo per effettuare l’analisi forense di un’app consiste nel comprenderne le funzionalità al fine di rilevarne quelle di interesse prettamente investigativo, analizzandole e identificando quelle che possano portare informazioni dirimenti nella varie indagini e cioè:
Come già noto, vi sono alcuni software forensi in grado di decifrare le evidenze archiviate da Telegram – Oxygen Forensics Detective, Magnet Axiom, Belkasoft Evidence Center solo per citarne alcuni -, ma gli stessi non forniscono alcuna spiegazione su come questa decodifica venga eseguita, né tantomeno alcun ausilio su come utilizzare i vari elementi estratti al fine di ricostruire completamente le attività dell’utente.
Pertanto, alla luce di quanto sopra, è praticamente impossibile valutare la completezza e la correttezza dei risultati generati.
Nonostante la fama di instant messenger più sicuro, Telegram non crittografa i file di database pertinenti memorizzati sul dispositivo. Pertanto, l’analisi forense di Telegram sul dispositivo Android può effettuarsi senza grossi problemi, il routing potrebbe rappresentare l’unica difficoltà.
Vediamo in dettaglio la posizione degli artefatti di Telegram all’interno del dispositivo. Parliamo di un dispositivo rootato, dato che tutte le informazioni non sono disponibili agli utenti cosiddetti “standard”:
I dati principali di Telegram per Android sono memorizzati:
La gestione della struttura dati di Telegram non è, purtroppo, così semplice: la maggior parte dei dati vengono memorizzati in strutture complesse chiamate Telegram Data Structures (TDS)[3].
Le TDS vengono archiviate in un formato binario[4], in cui i loro campi sono memorizzati come una sequenza di byte in cui ognuno di essi appare in una determinata posizione. Pertanto, per recuperare le informazioni memorizzate in una TDS, è prima necessario estrarre i suoi vari campi dalla corrispondente sequenza binaria e quindi decodificare ognuno di essi. Per eseguire i passaggi precedenti, la struttura e lo schema di serializzazione delle TDS devono essere note.
Per chi volesse approfondire gli argomenti, consiglio di consultare la documentazione ufficiale sul sito https://core.telegram.org/.
La prima verifica da effettuare in fase di analisi è la determinazione dell’account Telegram utilizzato sullo smartphone in esame; tale informazione è contenuta nel file di configurazione utente, denominato userconfing.xml e in particolare in uno dei suoi attributi, che è denominato user:
<string name=”user“>w/QTLn8cAADY02YRfRPG/B2Vj7oGQ29zaW1vAAhkZSBQaW50bwAAAAZjb29zNjAADDM5MzQ3NDQ5 NzY0OQAAAMjYWdWppzEb2NNmEXaQ1lMEAAAAPgqgGQAAAADYsQAADd9GifTG2fR2kNZTBAAAAD4K oBkAAAAA2rEAAOOdFl0wC/+iSTm57eIGSVs= </string>.
Questo attributo memorizza una TDS di tipo User, la cui struttura è riportata nella documentazione ufficiale[5] e a sua volta utilizza altre TDS di tipo UserProfilePhoto[6] e FileLocation[7].
Estraendo i campi e decodificando si ottiene la funzione di deserializzazione che è contenuta nei sorgenti dell’app e qui sono riportati solo i dati essenziali ricavati:
First name: Cosimo
Last name: de Pinto
Full name: Cosimo de Pinto
User name: coos60
Phone number: 39347XXXXXX
User picture: 429918782_45528
Status: Online
Expires: 13/07/2018 20:09:06
UID: 291951576
Analizziamo ora il contenuto del database cache4.db. Esso si compone di 41 tabelle (nella versione in esame) come evidenziato in fig. 5:
Le informazioni relative ai contatti sono memorizzate nella tabella users, riprodotta in fig.6:
La tabella contiene il campo UserID (uid), il campo name (nome) con l’eventuale nickname, il campo status (data e ora codificata secondo “Epoch Unix Timestamp”, ovvero il numero di secondi passati dal 01/01/1970 alle 00:00:00 per indicare l’ultimo cambio di stato dell’utente) e il campo data in formato BLOB[8], contenente le informazioni sull’utente. Dette informazioni non si esauriscono con il contenuto della tabella suddetta, ma sono presenti anche nelle tabelle user_contacts_v7 (userID, nome e cognome) e user_phones_v7 (userID, numero di telefono e il flag cancellato). La colonna deleted, mostrata in fig.7, può contenere valori 0/1: 0 per utente ancora nei contatti e 1 per utente cancellato.
Con una semplice query SQL siamo in grado di visualizzare anche un address book esaustivo:
SELECT us.uid, us.key, us.fname, us.sname, up.phone, up.sphone, up.deleted FROM user_contacts_v7 as us LEFT JOIN user_phones_v7 as up ON us.key = up.key WHERE 1;
Il risultato è mostrato in fig. 8:
Come già accennato, Telegram fornisce vari tipi di finestre di dialogo consentendo ai suoi utenti di scambiare messaggi testuali e non:
Come già evidenziato, le tabelle di maggiore interesse investigativo sono tre: user_phones_v7, user_contacts_v7 e messages, ma è di fondamentale importanza conoscere anche il contenuto della tabella dialogs – cfr. fig.9 -. Telegram memorizza in questa tabella i dialoghi in cui l’utente è stato coinvolto. Ogni conversazione è identificata in modo univoco da un numero intero contenuto nel campo DID (Dialog Identifier), viene evidenziata la data e l’ora dell’ultima operazione eseguita (date), il numero di messaggi che devono ancora essere letti (unread_count_i) e altre informazioni meno rilevanti. Per identificare i messaggi scambiati, Telegram memorizza nella tabella messages un record per ogni messaggio che è stato inviato o ricevuto e nel campo UID il DID della tabella dialogs: una semplice query SQL potrà chiarire meglio quanto esplicitato:
SELECT messages.* FROM messages WHERE uid IN (SELECT did FROM dialogs);
il risultato in Fig.10:
Prendendo come esempio il valore del campo DID della fig. 9 pari a 3455600518787760128 – in seguito spiegherò il motivo della scelta – e identificandolo nella fig. 10 nel campo uid, possiamo notare la quantità di messaggi scambiati con detto utente. Questi messaggi, vedremo in seguito, fanno parte di una chat segreta. Si distinguono per la lunghezza dell’Uid (19 cifre) ma anche per i primi 4 byte presenti nel campo data pari a 0xFa555555 – fig. 11, diverso da 0xF6A1199E del messaggio di sistema – fig.12 – e da 0x3DB4F944 – fig. 13 – per un normale messaggio:
Per ogni chat segreta – in fig.16 una chat segreta decodificata -, Telegram memorizza un record nella tabella enc_chats assieme ad altre varie informazioni quali il suo uid (campo uid), il suo nome (campo name) e il TID (Telegram ID Account) dell’utente che ha creato la chat (campo admin_id), la data di creazione (key_date) e il TID dell’utente che si è unito alla chat dopo la creazione (campo user).
Onde identificare invece, le chat regolari, è possibile selezionare i record della tabella dialogs il cui campo conteneva uno dei valori memorizzati nel campo uid della tabella users; ad esempio, ritrovare un qualsiasi utente di Telegram con cui l’utente locale ha scambiato messaggi con una semplice query SQL – il risultato in fig. 15 – :
SELECT dialogs.* FROM dialogs WHERE did IN (SELECT uid FROM users);
Quelle di interesse investigativo, users, enc_chat, user_phones_v7, user_contacts_v7, dialogs e messages, possono essere messe in relazione tra loro con semplici query sql e ricostruire la cronologia delle chat, come già ampiamente documentato.
Cercare di comprendere il funzionamento delle app che possono essere di ausilio all’estrazione e all’analisi delle evidenze non è certamente tempo perso anche perché, i meccanismi delle app di IM sono molto simili tra loro.
Sempre valido il mio consiglio nel testare accuratamente gli strumenti con cui si approcciano le acquisizioni e le analisi in ambito forense. Anche le proprie deduzioni e test, se supportati da prove ripetibili di laboratorio, possono costituire un ottimo strumento per alleviare le “sofferenze”.
A volte è proprio questo che fa la differenza.
A cura di: Cosimo de Pinto
Nel panorama odierno della sicurezza informatica, la protezione degli endpoint rappresenta un obiettivo imprescindibile per…
I numeri dell’evento Oltre 1000 ospiti, 42 relatori, 20 interventi tematici e 5 Tavole Rotonde:…
Group-IB è un fornitore, con sede a Singapore, di sistemi ad elevata attendibilità per il…
Le interazioni di natura digitale, su rete pubblica o all’interno di reti private, hanno assunto…
La Commissione Europea ha di recente ricordato come “Artificial intelligence (AI) is not science fiction;…
Di seguito il programma della Cyber Crime Conference 2024, che avrà luogo a Roma nei…