UNIVERSITÀ DEGLI STUDI DI TORINO SCUOLA DI SCIENZE DELLA NATURA CORSO DI LAUREA IN INFORMATICA ANNO ACCADEMICO 2012/2013 RELAZIONE DI TIROCINIO Analisi forense ed estrazione di elementi probatori da evidenze digitali Relatore Esterno Dr. Paolo Dal Checco Relatore Interno Prof. Viviana Bono Candidato Matteo Ghigo Abstract This document describes the topics I learnt and the activities I performed during the stage which ends my Italian three-year University Degree in Computer Science, specialising in Computer and Networks. The stage took place at HQ of the "Digital Forensics Bureau" Consulting Firm in Grugliasco, near Turin, Italy. Once learnt the basis of computer forensincs and observed the issues that may arise during a digital investigation, I began developing a software designed to automate the main stages of the investigation, helping the analyst to focus on information gathering rather than on repetitive operations. The main tasks of the analysis are: extraction of data from forensic images, deleted files recovery and analysis of email archives (if any) aimed at turning original messages into human readable format. The extraction of data is performed by collecting files from the allocated space and splitting them into folders, according to their format. The deleted file recovery takes place by recovering and carving out structured data from the unallocated space of the forensic image. As for email messages - the task that took most of my efforts - I focused on analysing and parsing three most common file formats, namely PST (Outlook), DBX (Outlook Express) and MSF (Thunderbird), allowing the analyst to browse through collected email archives via a comfortable GUI. Upon completion, the data extraction process issues a .CSV file containing useful information drawn from the files founds in the analysed forensic image. A log file is the output of the deleted files analysis and extraction. As for email processing, I developed an HTML graphical user interface similar to a traditional email client, which can be used by investigators to browse through email archives and read messages regardless of their original format. The software, which I named "Ermès", makes use of some third-party Open Source libraries and tools to parse data structures and access data in forensic images in read-only mode, thus preserving the chain of custody of evidences. The tools and libraries the developed software depends on are distributed under Open Source licenses, as well as Ermès itself. Python was the programming language chosen for the development of the software, since Python applications are efficient and facilitate further integration and development. In conclusion, the software aims to simplify the process of forensic analysis. In fact, the minimal and clean graphical user interface allows the user to set the parameters of interest and run the analysis and extraction by automating repetitive tasks. The ease of use of the software and variety of gathered information make Ermès an innovative tool, useful for computer forensics experts and analysts. Indice 1 Motivazioni 3 2 Descrizione dei requisiti 2.1 Posizionamento . . . . . . . . . . . . . . . . . 2.1.1 Formulazione del problema . . . . . . . 2.1.2 Proposte ed opportunità . . . . . . . . 2.1.3 Alternative e concorrenza . . . . . . . 2.2 Descrizioni delle parti interessate . . . . . . . 2.2.1 Riepilogo delle parti interessate . . . . 2.2.2 Compatibilità . . . . . . . . . . . . . . 2.2.3 Gli strumenti e l’ambiente di sviluppo . . . . . . . . 5 5 5 6 6 7 7 7 7 . . . . . . . . . . 9 9 9 10 10 14 16 17 18 18 19 . . . . . 20 20 21 23 26 27 3 Estrazione dei file d’interesse e recupero 3.1 Estrazione dei file d’interesse . . . . . . 3.1.1 Input . . . . . . . . . . . . . . . . 3.1.2 Strumenti utilizzati . . . . . . . . 3.1.3 Il codice . . . . . . . . . . . . . . 3.1.4 Output . . . . . . . . . . . . . . . 3.2 Recupero dei file cancellati - carving - . . 3.2.1 Strumenti utilizzati . . . . . . . . 3.2.2 Input . . . . . . . . . . . . . . . . 3.2.3 Il codice . . . . . . . . . . . . . . 3.2.4 Output . . . . . . . . . . . . . . . 4 Analisi delle mail 4.1 La posta elettronica . . . . . . . . . . . 4.1.1 Analisi di un header di una mail 4.1.2 Analisi del body di una mail . . 4.2 Analisi delle mail da parte di Ermès . . 4.2.1 Gli archivi dbx . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dei file cancellati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 4.2.3 4.2.4 Gli archivi msf . . . . . . . . . . . . . . . . . . . . . . . . Gli archivi pst . . . . . . . . . . . . . . . . . . . . . . . . . Report dell’estrazione delle mail . . . . . . . . . . . . . . . 32 38 43 5 L’interfaccia grafica 47 6 Conclusioni 52 7 Gli sviluppi futuri 54 8 Ringraziamenti 55 Bibliografia 56 Sitografia 57 2 Capitolo 1 Motivazioni L’informatica è una scienza che ha il compito di analizzare e studiare l’informazione e come questa può essere implementata attraverso l’uso di strumenti elettronici. La computer forensics, ambito di competenza di questa trattazione, è quella scienza che si occupa della conservazione e del trattamento di quei dati che dovranno essere valutati in un processo giuridico. Durante il mio percorso di studi non ho avuto modo di approfondire tale argomento pertanto ho deciso di effettuare uno stage per la tesi presso la Di.Fo.B., il più grande studio italiano del settore. La DiFoB offre servizi di consulenze di parte nei procedimenti civili o penali sia per il Pubblico Ministero, sia per i Giudici in ambito istituzionale. Le consulenze possono vertere su computer forensics analysis, mobile forensics analysis, recupero di file cancellati, OSINT anlaysis1 , audio forensics, image and video forensics, mog 231/01, supporto tecnico per la salvaguardia dei dati aziendali. Il ruolo dell’informatico forense è quindi di fondamentale importanza poichè dalle sue analisi dipendono le sorti delle sentenze. Deve conoscere a fondo i sistemi operativi, la tecnologia con cui son costruiti i dispositivi informatici in analisi e soprattutto deve conoscere tutti quei programmi che possono contenere dati di interesse da analizzare. La continua evoluzione dei dispositivi informatici crea una forte dinamicità nei lavori con la necessità di aggiornamenti quotidiani. Le nozioni da conoscere sono tantissime, spesso per singoli modelli di computer devono essere fatte particolari tipi di analisi affinchè siano estratti il maggior numero di dati in un determinato arco temporale. Alcuni software forensi sono meglio compatibili con certi modelli di dispositivi mentre altri effettuano analisi 1 Open Source INTelligence, è l’attività di raccolta di informazioni mediante la consultazione di fonti di pubblico accesso. Nella fattispecie vengono cercate tutte le informazioni di un untente presenti in rete mettendole successivamente in correlazione per formare così un identikit tendente ad una vera e propria identità digitale. 3 di medio-alto livello su una vasta gamma di apparecchi elettronici. La forensics si impara sicuramente sul campo con l’esperienza ma è comunque necessario aggiornarsi continuamente ed avere solide basi teoriche alle spalle. Attualmente l’informatica forense gode di lavoro continuo poichè qualsiasi procedimento penale o civile ha sempre coinvolte persone che dispongono di un telefono cellulare o di un personal computer e spesso all’interno di questi oggetti vi sono le vere prove che possono accusare o scagionare un imputato. Nel 1979 Hans Jonas scriveva: “la tecnologia assume una rilevanza etica in virtù della centralità ora occupata nella finalità umana soggettiva” 2 . Questo pensiero è sin da subito per il filosofo uno spunto di riflessione sull’impatto della tecnologia nel tempo che termina con le seguenti parole “è il futuro indefinito, molto più che non lo spazio contemporaneo dell’azione, a costituire l’orizzonte rilevante della responsabilità”. Così il filosofo tedesco di origine ebraica invita il genere umano a riflettere sulla tecnologia, sul suo impatto sia tra gli altri uomini sia sullo spazio circostante. Secondo quest’uomo dopo le due grandi guerre mondiali del XX secolo il bilanciamento tra coscienza e sviluppo tecnologico è venuto meno. La necessità di un senso di responsabilità è fondamentale visto il progresso tecnologico a cui siamo arrivati. La tecnologia mette sempre più a rischio la civiltà umana e spesso distrugge la natura. È quindi necessario, secondo il filosofo, elaborare una nuova etica della responsabilità profondamente diversa dalle morali tradizionali. Il pensiero di Jonas deve essere anche di spunto per un analista forense, conoscitore della tecnica (tèchne) e della tecnologia (tèchne-loghìa), affinchè corrette ed esaustive analisi dei dati permettano di assegnare la giusta sentenza a chi la responsabilità non l’ha voluta utilizzare. 2 Hans Jonas, Il principio responsabilità. Un’etica per la civiltà tecnologica, Torino, Einaudi, 1990, capitolo 1, p. 13-14 4 Capitolo 2 Descrizione dei requisiti In questa trattazione sarà possibile comprendere ed approfondire le specifiche, le possibilità di utilizzo e le potenzialità del software da me ideato e sviluppato durante lo stage. Il software in questione prende il nome di Ermès. Codesto programma effettua in modo automatizzato le tre principali analisi compiute da un informatico forense: estrazione dei dati, recupero dei file cancellati ed analisi delle mail. 2.1 2.1.1 Posizionamento Formulazione del problema L’era tecnologica in cui siamo profondamente immersi ci porta ad essere continuamente a contatto diretto o indiretto con dispositivi elettronici. A livello giudiziario e legale è oramai diventato impossibile non tenere conto dei ruoli e degli effetti che tali dispositivi possono avere all’interno di un’inchiesta. I dispositivi elettronici dotati di memoria possono immagazzinare dati importanti, spesso fondamentali per la corretta formulazione della sentenza. Sempre più avvengono truffe o misfatti incentrati sul commercio elettronico o sul furto d’identità tramite internet. I molti contesti in cui sono coinvolti queste tipologie di manufatti tecnologici portano alla necessità di doverli analizzare in modo preciso ed accurato affinchè le informazioni estrapolate possano essere utilizzate in sede giudiziaria. Il corretto trattamento dei dati digitali è l’oggetto degli studi dell’informatica forense. I dati vengono analizzati attraverso precise ed accurate tecniche mantendone lo stato inalterato. La necessità di nuovi strumenti non viene mai meno poichè la tecnologia è in con5 tinua evoluzione e spesso certi software non vengono aggiornati rischiando così di diventare obsoleti. E’ inoltre utile poter disporre di software precisi e capaci di effettuare diversi tipi di analisi affinchè possano essere utilizzati in contesti diversi. 2.1.2 Proposte ed opportunità I software forensi, Ermès nello specifico, si pongono l’obiettivo di analizzare i file all’interno di un’immagine forense senza alterarne lo stato. I metadati non devono subire variazioni nemmeno dalla visita di un software forense. Ho cercato di far distinguere Ermès per la sua semplicità di utilizzo, studiata per essere alla portata di tutti, capace di produrre documenti ricchi di risultati di facile consultazione. Partendo dalla fase di estrazione fino alla processazione delle mail Ermès procede in modo autonomo. Senza passaggi intermedi il programma estrae i file filtrandoli secondo i propri interessi, recupera i file cancellati ed analizza le mail. Uno dei primi obbiettivi che mi sono preposto è stato quello di tentare di migliorare le analisi forensi. Nel momento in cui vengono richieste le informazioni all’utente queste sono espresse in modo chiaro e conciso. Ogni preferenza dell’analista sarà poi tradotta dal software con le precise azioni sull’immagine forense del reperto. Ogni file presente nell’immagine verrà analizzato e se sarà tra i formati ricercati verrà anche estratto. L’implementazione del programma non esclude alcun file d’interesse: ogni singolo file viene analizzato prima di essere estratto per le successive analisi. 2.1.3 Alternative e concorrenza Attualmente sul mercato non è disponibile alcune software open source che esegua tutte queste operazioni. Sono disponibili software che effettuano singole operazioni. Ho deciso quindi di avvalermi dell’utilizzo di alcuni di questi software di cui ho utilizzato solo le loro migliori caratteristiche. Laddove erano presenti delle lacune le ho colmate andando quindi ad arricchire l’analisi ed il numero di informazioni disponibili all’utente. 6 2.2 2.2.1 Descrizioni delle parti interessate Riepilogo delle parti interessate Si vuole proporre al mondo dell’open source un nuovo tool che abbia un target di utilizzo del settore ma non necessariamente con conoscenze informatiche di altissimo livello. Le poche ed intuitive fasi di input del programma lo rendono facilmente fruibile e pertanto aperto ad un ampio bacino di utilizzatori. Parti sicuramente interessate possono essere di vario genere: dalle forze dell’ordine alle agenzie investigative, dai liberi professionisti che effettuano consulenze forensi agli utenti privati. 2.2.2 Compatibilità Per ora l’ambiente di utilizzo è limitato ai sistemi operativi Linux ma la speranza è che in futuro lo si possa ampliare. La scelta è stata dettata dall’ampia gamma di strumenti che questa famiglia di sistemi operativi è in grado di fornire. Le interazioni a basso livello col sistema operativo direttamente a linea di comando mediante l’uso del terminale hanno giocato un ruolo fondamentale nello sviluppo. Questo genere di operazioni ha aumentato considerevolmente le prestazioni aiutando così a migliorare l’efficienza e la produttività del programma stesso. 2.2.3 Gli strumenti e l’ambiente di sviluppo Il linguaggio di programmazione da me scelto per l’implementazione di Ermès è stato Python. Le motivazioni di questa scelta risiedono nelle grandi oppurtunità fornite da questo linguaggio, anch’esso cresciuto grazie all’open source, e la possibilità di dialogare direttamente col sistema operativo. Pyhton non è un linguaggio compilato ma bensì un linguaggio interpretato: ogni singola istruzione viene tradotta in linguaggio macchina al momento dell’esecuzione del programma stesso. Questa sua caratteristica ha fatto sì che moltissime persone creassero molti loro programmi, detti moduli, facilmente integrabili ai propri programmi. Come per ogni linguaggio di programmazione moderno Python dispone di una vasta gamma di librerie ricche di funzionalità. Per quanto riguarda le documentazioni invece ho fatto due scelte: per i documenti di cui era necessaria una semplice visione tabellare ho usato un documento in formato Comma-Separated Values (CSV) mentre per documenti di maggior complessità ho voluto creare delle pagine html facilmente navigabili. 7 L’ambiente di sviluppo scelto è stato DEFT1 , una distribuzione italiana GNU/linux per usi legali legati alla Computer Forensics ed alla sicurezza informatica. Caratteristica peculiare e di fondamentale importanza è il suo utilizzo: essa può usare la RAM per essere eseguita. Durante l’accensione del computer, al momento del boot del sistema operativo, DEFT si sostituisce al sistema operativo principale della macchina. DEFT dispone di una serie di strumenti già preinstallati utili per eseguire analisi forensi. Grazie ad esso è possibile effettuare immagini forensi, estrazione di dati, analisi telefoniche, recupero di file cancellati, analisi delle reti, recupero di password, OSINT Analisys, database Analysis, generazione di timeline e molto altro ancora. Il programma è stato quindi redatto su semplici fogli di testo e poi testato su questa distribuzione. 1 http://www.deftlinux.net/ 8 Capitolo 3 Estrazione dei file d’interesse e recupero dei file cancellati 3.1 Estrazione dei file d’interesse Nella prima fase di un’analisi forense è necessario poter estrapolare i dati dall’immagine forense del reperto. L’immagine forense contiene tutti i dati del reperto ma questi non sono immediatamente visibili. L’immagine forense, se non montata, non è nemmeno navigabile. Nella prima fase quindi mi son preoccupato di far sì che Ermès estraesse tutti i dati oppure solo quelli che l’utente desiderava. La fase di estrazione è un processo molto delicato poichè è fondamentale non modificare in alcun modo i metadati. Sin dal primo istante il dato diventa il baricentro e il software lavora su di esso con la massima attenzione. 3.1.1 Input Inizialmente l’analista possiede l’immagine forense del reperto da analizzare. Come da procedura non si effettua mai l’intera analisi sul vero reperto ma su un’immagine di esso. Un’immagine forense è una copia bit a bit del dispositivo di memoria del reperto. Durante la generazione della stessa vengono copiati, bit dopo bit, ogni singolo settore, anche quelli non allocati. Ermès prende in input al momento due tipi di immagini Forensi: il formato Raw DD oppure il formato Expert Witness Format EWF. 9 3.1.2 Strumenti utilizzati Per poter estrarre i dati da un’immagine forense per prima cosa è necessario montarla. Montare un immagine significa crearne una struttura navigabile fatta di cartelle e sottocartelle così da rendere possibile l’accesso ai file. Per le immagini RAW è stato usato il comando di terminale mount. La versione utilizzata è la 2.20.1 Per le immagini EWF è stato usato il comando di terminale xmount. La versione utilizzata è la 0.5.0 Le fasi di estrazione dati e generazione report sono avvenute tramite le librerie fornite da Python. 3.1.3 Il codice Come accennato nel paragrafo precedente la prima azione effettuata in questa fase è il mounting dell’immagine. Questo processo è diverso a seconda dei formati. Nel caso del formato RAW dd attraverso il comando mount, con gli opportuni parametri, si crea in automatico la struttura ad albero necessaria come input all’estrazione vera e propria. Nel caso di immagini in formato EWF si effettua prima un xmount per ottenere un immagine in formato raw e successivamente si effettua un mount come sopra. Il primo comando, per montare un immagine in formato ewf è il seguente: xmount in ewf [nameImage] [outputF older] (3.1) Il primo e secondo parametro [- -in ewf ] indicano rispettivamente che verrà passata in input al comando un’immagine forense e quindi bisogna specificarne il formato. Il terzo parametro [nameImage] indica il path dell’immagine forense (per montare un immagine ewf si passa il path del file .E01) Il quarto ed ultimo parametro [outputFolder] indica la locazione dove verrà inserita l’immagine in formato raw. Una volta ottenuta la nuova immagine si procede con il montaggio vero e proprio attraverso il seguente commando: mount o ro, loop, show_sys_f iles, streams_interf ace = windows, of f set = $((length)) [locationImage] [locationDestination] (3.2) dove: 10 • -o ro ! l’immagine viene montata in sola lettura • loop ! questa opzione determina che il file di output sia un dispositivo a blocchi simile ad una memoria di massa. Grazie a ciò si crea la struttura ad albero navigabile. • Show_sys_files ! permette di visualizzare i file di sistema • Streams_interface=windows ! considera anche gli Alternate Data Streams ovvero dei flussi alternativi dei dati non normalmente visibili in modalità standard. Un file possiede quindi un suo flusso principale (quello che vediamo normalmente quando navighiamo tra le cartelle del nostro computer) e poi opzionalmente dei flussi secondari non immediatamente raggiungibili: gli ADS. Spesso in questi flussi secondari vengono nascoste informazioni di piccole o grandi dimensioni proprio perchè la loro presenza è quasi del tutto impercettibile: all’aggiunta di uno stream alternato viene modificata la data di ultima modifica del file ma non cambia la grandezza del file. • offset=length ! per montare la/le partizione/i è necessario fornire il punto dove inizia la partizione. Nella fattispecie si indica un offset rispetto all’immagine. L’offset si calcola moltiplicando la grandezza di un singolo settore con il numero del primo settore di collocazione della partizione. Il risultato è un intero positivo espresso in byte che deve essere inserito al posto di length. Tutte le informazioni per calcolare questo offset le si possono trovare digitando sul terminale il commando mmls nameImage.dd • locationImage ! path dell’immagine in format RAW • locationDestination ! nome della cartella che conterrà l’output del mount Una volta montate tutte le partizioni saranno presenti sul computer una serie di cartelle dove ognuna ha al suo interno la partizione montata. Contemporaneamente all’estrazione viene creato un file con estensione .csv che man mano terrà traccia dei file estratti con una serie di informazioni per ognuno di essi. Nello specifico il file .csv presenta le seguenti colonne: • Original path ! nome completo comprensivo di path assoluto dove è collocato il file nell’immagine montata • Actual path ! nome completo comprensivo di path assoluto dove è collocato il file dopo l’estrazione 11 • Date and hour creation ! data ed ora di creazione del file • Date and hour Access ! data ed ora dell’ultimo accesso • Date and hour Last modify ! data ed ora dell’ultima modifica Il campo Actual path risponde all’esigenza di estrarre più file aventi lo stesso nome ma collocati in cartelle differenti. Attraverso il campo Original path è possibile risalire al nome originale ed alla precisa collocazione nell’immagine forense montata. Sono presenti inoltre due colonne opzionali: • Md5 ! calcola l’md5 del file • Block start ! indica il blocco di partenza del file all’interno dell’immagine forense. Le ultime due colonne sono definite opzionali perchè l’utente, in fase di scelta della tipologia di analisi da fare, può scegliere se includere una delle due informazioni nel report, oppure tutte due, oppure nessuna di esse. L’opzionalità di quest’ultime è data dai tempi di esecuzione: il calcolo dell’md5 su un file molto grande può richiedere molto tempo. L’md5 viene calcolato con una funzione apposita di Python mentre per il calcolo del primo blocco viene usato il commando ifind della suite Sleutkit1 . Sistemato il file di report in formato csv il programma procede con l’estrazione dei file attraverso la funzione copyF ile(f rom, to, dictonaryExtension, partition, mode) (3.3) copyFile () è una funzione che ha come parametri • La partizione montata che fungerà da input per l’estrazione • La cartella di destinazione dove risiederanno tutti i files estratti • Un dizionario contenente tutto l’elenco delle estensioni dei file desiderati • la partizione in fase di estrazione • la modalità di elaborazione a seconda delle opzioni selezionate dall’utente. Di default questo campo vale zero e non sono aggiunte opzioni. 1 Sleuthkit è un progetto di investigazione digitale open Source dove la figura di riferimento è Brian Carrier. Per maggiori informazioni http://www.sleuthkit.org/ 12 Questo metodo ha il compito di scorrere tutto l’albero delle cartelle e, quando trova una cartella richiama la stessa funzione sulla cartella altrimenti, se è un file, chiama un’altra funzione: copyExtension () . La copyExtension () viene chiamata solo se il file possiede un’estensione che l’utente gradisce estrarre. Attraverso dictonaryExtension, opportunamente settato nell’interfaccia grafica durante la fase di compilazione dei dati di analisi, viene ricercata l’estensione del file corrente. Se il file ha un’estensione che corrisponde ad una voce del dizionario allora la copyExtension viene richiamata su quel file altrimenti si passa al file successivo. Esiste inoltre una terza modalità dove l’utente sceglie di voler estrapolare tutto il contenuto dell’immagine forense e quindi il dizionario dispone di una sola entry: “ all : all ”. Questa entry viene riconosciuta dal programma di estrazione e come conseguenza la funzione copyExtension () viene chiamata su ogni file. La sua sintassi è la seguente: copyExtension(src, dest, extension, partition, mode) (3.4) I parametri sono gli stessi tranne il terzo, extension, che non è un dizionario ma una stringa contenente l’estensione del file che si andrà ad estrarre. Il file viene estratto solo perchè possiede un’estensione che si trova all’interno del dizionario passato in parametro alla copyFile (). La copyExtension () si occupa di effettuare realmente l’estrazione. In questo contesto l’estrazione consiste in una copia particolare che mantiene intatti i metadati dell’originale. La cartella di destinazione è una cartella che conterrà solo file con quella determinata estensione. Per prima cosa viene controllato se esiste già un file con il medesimo nome. Se viene trovato un file avente il medesimo nome allora lo si copia cambiandogli il nome. La traccia del cambio nome è presente all’interno del report. Se non si trova alcun file con il nome identico allora lo si copia direttamente. La funzione di copia utilizzata è la copy2 () di Python che non va a modificarne i metadati. Se l’utente sceglie di cercare file in formato msf allora viene copiata tutta la cartella dove questo file è presente, poichè in fase di processazione delle mail il modulo di analisi necessiterà dell’intera cartella di origine. È possibile, in rari casi, che vi siano dei file danneggiati che non riescono ad essere copiati interamente. Questi file vengono copiati parzialmente e nel report segnalati. 13 3.1.4 Output Ribadendo il concetto presente nelle righe precedenti l’output di questa fase sono: • un file csv che tiene traccia di tutto ciò che è stato estratto • una cartella dal nome extraction la quale contiene al suo interno tante sottocartelle quante sono le partizioni dell’immagine forense. Ognuna di queste cartelle ha come prefisso PartitionExtracted a cui viene concatenato un numero intero positivo incrementale che parte da 1. All’interno di ognuna di queste cartelle di estrazioni di partizione è possibile trovare delle sottocartelle dove ognuna ha il nome di un’estensione di file. Ogni sottocartella contiene solo file della stessa estensione. Nel caso in cui l’immagine forense sia in formato EWF allora vi è anche una terza cartella dentro la main directory ed ha il nome xmount, la quale contiene l’immagine in formato raw. 14 15 3.2 Recupero dei file cancellati - carving - In una analisi forense i file cancellati spesso sono più importanti rispetto a quelli non cancellati. I dati, grazie al file system, sono organizzati e memorizzati in modo ordinato all’interno della memoria secondaria. Un file system possiede memorizzato dentro di sé una serie di informazioni tra cui il numero dei blocchi2 di un disco e i blocchi liberi con le rispettive locazioni. Nello specifico, le strutture presenti sempre in un file system di interesse per questa trattazione sono il blocco dei volumi, le strutture delle directory ed i blocchi di controllo dei file. Il blocco dei volumi (volume control block) ha dentro di sé tutte le informazioni relative al volume o alla partizione. Proprio qui sono presenti informazioni sul numero dei blocchi del disco, la loro grandezza, i blocchi liberi con i puntatori ad essi. Nei file system Solaris questa sezione prende il nome di superblocco mentre nell’attuale file system utilizzato da windows, NTFS, si chiama tabella principale dei file (master file table). Le strutture delle directory per Solaris, corrispondono una lista di nomi di file a cui è associato un inode mentre in ntfs queste informazioni sono contenute all’interno della master file table. I blocchi di controllo dei file contengono dettagli sui file tra cui i permessi di accesso, i proprietari, le dimensioni e le locazioni dei blocchi di dati. In Solaris i blocchi di dati sono gli inode mentre in ntfs anche questi dati sono memorizzati nella tabella principale dei file. Tutte queste strutture sono memorizzate nelle prime aree del disco in modo che siano facilmente accessibili. L’accesso ad un file non avviene quindi in modo diretto ma si passa tramite queste strutture che possiedono i puntatori ai blocchi contenenti i dati. Adottare questa tecnica risponde all’esigenza di risolvere problemi di efficienza: se per cercare un file fosse necessario leggere ogni singolo blocco del disco le velocità si ridurrebbero drasticamente. Per ogni file invece è presente o un inode o una entry nella master file table quindi il tempo di ricerca di esso è pari al numero di file presenti nel file system (⇥n). 2 I dischi sono formati da una serie di piatti paralleli che hanno le medesime sembianze dei CD. Entrambe le superfici dei piatti sono ricoperte da materiale magnetico ed è possibile memorizzarvi informazioni. A fianco alle testine vi è un braccio di lettura da cui fuoriescono una serie di testine, una per ogni lato dei dischi,che hanno il compito di leggere/scrivere i dati. La superficie dei dischi è suddivisa logicamente in tracce circolari che a loro volta son suddivise in settori. Ad alto livello però, quando si vuole effettuare una scrittura, non si ragiona in termine di settori ma di blocchi. Il blocco è l’unità minima di trasferimento ed è solitamente grande 512 byte. Un disco corrisponde ad una serie di blocchi logici i quali sono composti da una serie di settori consecutivi. Una cartella è considerata anch’essa un file ma con proprietà differenti. Dentro il file che corrisponde ad una cartella vi saranno i puntatori ai singoli file che sono al suo interno. 16 Il file system possiede inoltre un meccanismo di gestione dello spazio libero attraverso l’utilizzo del vettore di bit grande tanti bit quanti sono i blocchi del disco. Se l’n-esimo bit vale 1 il blocco n del disco è libero, se l’n-esimo bit vale 0 il blocco n è occupato. Quando un file viene memorizzato sul disco si cercano i blocchi ad 1 all’interno del vettore, se ne scelgono tanti quanti sono necessari a seconda del metodo di allocazione prestabilito per quel file system e si scrive in quei blocchi. I blocchi utilizzati per la scrittura avranno il loro bit nel vettore dei bit a 0. Se invece si decide di cancellare un file si aggiorna solamente il vettore dei bit, convertendo tutti i bit dei blocchi dei file da 0 a 1. In altre parole quando ci si accinge a cancellare un file in realtà si elimina un puntatore al file, non il file. La cancellazione del solo puntatore ha la conseguenza che il file risulta irraggiungibile dal file system e in futuro verrà sovrascritto in caso di successive allocazioni. Il principio di cancellazione standard è efficiente nei tempi ma non adatto se davvero si desidera non lasciare tracce dei file non più d’interesse. Il processo di cancellazione completa dei dati prende il nome di wiping. Col wiping oltre a cancellare il puntatore viene cancellato anche il file. Nello specifico ogni singolo blocco del file viene sovrascritto con una serie di zero consecutivi di modo che qualsiasi analisi successiva non possa risalire al file originale. I sistemi operativi non eseguono normalmente il wiping dei file per questioni di efficienza. Sono però oramai disponibili su mercato moltissimi software gratuiti che effettuano questa operazione. L’utilizzo scorretto o con superficialità di questi ultimi può causare danni irreversibili. Un programma che analizza file cancellati va a cercare all’interno del disco tutti gli spazi allocati privi di puntatore alla tabella di allocazione e tenta di recuperarli. Alle volte sono presenti solo porzioni di file poichè se un file è diviso in blocchi è possibile che parte di essi siano stati sovrascritti da nuove allocazioni. 3.2.1 Strumenti utilizzati Il programma utilizzato per effettuare questa fase di analisi è PhotoRec, un software free open source multipiattaforma sviluppato da Christophe Grenier in grado di analizzare un dispositivo di memoria non in base al file system, ma andando a scansionare settore per settore alla ricerca di file cancellati. La ricerca è basata sugli header delle estensioni dei file che conosce e, se ne trova uno allora tenta il recupero blocco dopo blocco. Giunto alla fine verifica la consistenza e salva il file. PhotoRec accede ai dati sempre solo in sola lettura per preservare i metadati. 17 La versione utilizzata è la 6.13 rilasciata nel novembre 2011 ed è inoltre uno dei tool preinstallati nella distribuzione DEFT. 3.2.2 Input Per effettuare il carving dei dati di un immagine forense è necessaria l’immagine stessa. 3.2.3 Il codice In questa fase viene impostata una chiamata a terminale di Photorec dove l’obiettivo è di far effettuare un analisi dello spazio libero all’interno dell’immagine forense, alla ricerca di tutti i file recuperabili. La funzione che effettua tale operazione è la seguente: photorec /debug /log /logname carving.log /d [destinationAnalisys] carving /cmd [F orensicsImage] f reespace, search (3.5) dove: • /debug ! attiva la modalità di debug • /log ! rilascia un file di log con il risultato dell’analisi • /logname carving.log ! il file di log avrà il nome “carving.log” • /d destinationAnalisys carving ! indica il path assoluto della cartella contenente i file estratti. Questi file vengono posizionati in sottocartelle. Ogni sottocartella avrà come nome il prefesso “carving” a cui è concatenato un numero intero positivo che si incrementa di volta in volta. Si parte da 1. Viene anteposto un punto ( “.” ) all’intero positivo. (es: carving.1 carving.2 ecc.) • /cmd ! permette di eseguire in modo automatico l’analisi • forensicsImage ! contiene il path dell’immagine forense su cui si effettuerà carving • freespace ! specifica che la ricerca dei file è solo da effettuarsi nello spazio libero • search ! avvia l’analisi 18 3.2.4 Output Il risultato finale del carving è una cartella di nome carving con all’interno una serie di sottocartelle ed il file di log con tutte le informazioni sull’analisi appena effettuata. Ogni sottocartella contiene i file recuperati. I file recuperati non possiedono più il nome originale. Vengono automaticamente rinominati da Photorec. 19 Capitolo 4 Analisi delle mail Il fulcro del progetto Ermès consiste nella parte relativa all’analisi delle email. L’internazionalizzazione delle comunicazioni e degli affari ha portato la società a modificare le modalità di comunicazione optando verso la propagazione di informazioni in digitale mediante la rete internet. Lo strumento in rete analogo al servizio postale è la posta elettronica. 4.1 La posta elettronica Ogni Internet Service Provider (ISP) o altri fornitori di servizi online permettono agli utenti privati e di pubbliche imprese di aprirsi una propria casella di posta elettronica dove poter inviare e ricevere messaggi, anche allegati. La posta elettronica è consultabile in due modalità: • Nel sito internet di riferimento ! stiamo quindi parlando di webmail • All’interno di un programma client di posta elettronica che, settato opportunamente, scarica da internet la posta di uno o più account. A livello forense è difficile recuperare delle email se l’utente consulta la posta solo online perchè le mail rimangono nella rete e non vengono scaricate sul computer. Con un colpo di fortuna si potrebbero recuperare delle tracce di alcune mail visionate attraverso l’analisi della cache del browser. Nel secondo caso invece tutto l’archivio di posta viene scaricato sul computer al momento della configurazione dell’account. Periodicamente il client di posta effettua controlli per verificare la presenza di nuovi messaggi in arrivo. In questo caso la Computer forensic può intervenire effettuando analisi sugli archivi, cercando di estrapolare la maggior parte dei dati possibile. 20 I numerosi formati di posta attualmente utilizzati, tenendo anche conto della possibilità di visualizzare le proprie mail sui telefonini e tablet, rendono ostiche le procedure di mail analisys. Pensare ad un’analisi standard è un’utopia poichè ogni formato è organizzato nella propria maniera, ottimizzato per funzionare al meglio nei client di posta proprietari. All’inizio del progetto ho effettuato numerose riflessioni riguardo la possibilità di uniformare il più possibile ogni singola analisi. La prima riflessione che è affiorata è stata la seguente: ogni client di posta si scambia il medesimo “oggetto” e questo oggetto è la mail. Ogni client di posta organizza quindi stessi contenuti in modalità differenti. Una mail è composta da un header, un body contenente il corpo del messaggio ed eventualmente degli allegati. Il cuore delle analisi di una mail viene fatta nella prima delle tre componenti. L’header è una sezione della mail che contiene una serie di intestazioni che servono a controllare l’invio del messaggio oltre a tenere uno storico del percorso effettuato prima dell’arrivo al destinatario. 4.1.1 Analisi di un header di una mail Un header di una mail si presenta nel seguente modo1 : Delivered-To: [email protected] Received: by 10.218.111.222 with SMTP id m78zs52525wei; Wed, 16 Jun 2010 10:39:19 -0700 (PDT) Received: by 10.216.91.7 with SMTP id g7mr996235wef.93.1276709959223; Wed, 16 Jun 2010 10:39:19 -0700 (PDT) Return-Path: <[email protected]> Received: from mrqout1.tiscali.it (mrqout1-sorbs.tiscali.it [195.115.228.3]) by mx.google.com with ESMTP id x45si7853472weq.196.2010.06.16.10.39.18; Wed, 16 Jun 2010 10:39:19 -0700 (PDT) Received-SPF: pass (google.com: domain of [email protected] designates 195.145.188.7as permitted sender) client-ip=195.115.228.3; Authentication-Results: mx.google.com; spf=pass (google.com: domain of [email protected] designates 195.145.188.7as permitted sender) [email protected] 1 Collaborazione alla redazione del Capitolo 9, “il decisivo ruolo probatorio della documentazione extracontabile digitale nella ricostruzione dell’ipotesi di esterovestizione”, in “ Esterovestizione societaria. Disciplina tributaria e profili tecnico-operativi”, AA.VV., Sacchetto C. (a cura di), Giappichelli Editore, Torino, 2013, pp. 215-237 21 Received: from [10.23.116.88] by mrq-1 with esmtp (Exim) id 1OOwLh-0002kI-My; Wed, 16 Jun 2010 19:24:25 +0200 Received: from ps23 (10.39.75.93) by mail-8.mail.tiscali.sys (8.0.031) id 4BF3B10F009F2F83 for [email protected]; Wed, 16 Jun 2010 19:24:25 +0200 Message-ID: <27243525.49621276709064749.JavaMail.defaultUser@defaultHost> Date: Wed, 16 Jun 2010 19:24:22 +0200 (CEST) From: [email protected] <[email protected]> Reply-To: [email protected] <[email protected]> To: [email protected] Cc: <[email protected]> Subject: I: Riepilogo situazione aziendale MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=----=_Part_3112_30806331.1276709062485 xOriginalSenderIP: 95.236.201.23 X-Priority: 1 X-MSMail-Priority: High X-Mailer: Microsoft Outlook Express 6.00.2900.5843 Disposition-Notification-To: [email protected] [email protected] X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 Un header va letto dal basso verso l’alto. Partendo dalle informazioni principali, risalendo verso la cima dell’header è quindi possibile ricostruire tutto il percorso fatto dalla mail prima di giungere al destinatario. Le righe che evidenziano questo percorso sono quelle che iniziano con la parola chiave Received. Tra parentesi tonde ( ) e quadre [ ] si trovano gli indirizzi IP che forniscono ulteriori informazioni sulle locazioni geografiche del computer/server. Dopo il blocco di informazioni contrassegnate dalla parola “Received” sono presenti altri campi fornitori di informazioni differenti: • From - fornisce l’infomazione della casella di posta del mittente. • To - indica il destinatario. • Cc - destinatari in copia carbone [per conoscenza]. 22 • Bcc - destinatari in copia carbone nascosta. • Date - data ed ora al momento dell’invio. • Subject - oggetto del messaggio. • Importance o X-priority - priorità del messaggio [ se c’è il valore 1 ! alta priorità, 2 ! media priorità, 3 ! normale priorità ]. • X-Mailer - programma usato per inviare la mail. (se si usa una webmail questo campo non è presente). Altra riga da tenere in considerazione è quella preceduta dalla parola Mime. Il Mime (Multipurpose Internet Mail Extensions) è un protocollo definito per il trasferimento e l’interpretazione dei dati non codificati in ASCII. Il Mime si occupa anche del trasferimento di allegati in qualsiasi formato, ad esempio file audio, file video, file testo di qualsiasi formato. 4.1.2 Analisi del body di una mail Subito dopo l’header di un messaggio viene inserito il body. Il body corrisponde al testo del messaggio. Spesso troviamo testi con delle immagini o dei piccoli video. Tutto ciò è possibile grazie al linguaggio html. Andando infatti a visionare un esempio di body: Content-Type: multipart/mixed; boundary=047d7b2e109170ca5b04e42b6de6 --047d7b2e109170ca5b04e42b6de6 Content-Type: multipart/alternative; boundary=047d7b2e109170ca5604e42b6de4 --047d7b2e109170ca5604e42b6de4 Content-Type: text/plain; charset=ISO-8859-1 ecco i dati di mio padre (compilati da lui apposta per te ) --047d7b2e109170ca5604e42b6de4 Content-Type: text/html; charset=ISO-8859-1 <div dir=“ltr”> ecco i dati di mio padre (compilati da lui apposta per te) 23 <br></div> --047d7b2e109170ca5604e42b6de4 --047d7b2e109170ca5b04e42b6de6 Content-Type: application/pdf; name=“tessera_sanitaria.pdf” Content-Disposition: attachment; filename=“tessera_sanitaria.pdf” Content-Transfer-Encoding: base64 X-Attachment-Id: 2fa57bb50712ddcd_0.1 JVBERi0xLjQNJeLjz9MNCjEgMCBvYmoNCjw8L1cGUgL1BhZ2VzQovU mVzb3VyY2VzIDMgMCBSDQovTWkaWFCb3ggWzACA1OTUuMjcNiA4 NDEuODg5OF0NCi9Db3VudCAxDQovS2lkQ0KLcyBddSWNCAwIFJDQo +Pg0KZW5kb2JqDQoyIDAgb2JqDQo8PC9DYXGluZXMgAwIFINCi9QWd lcyAxIDAgUg0KL01ldGFkYXRhIDggMCBSDQovTwMzI3NjggMyNY4IDFD QovVmlld2VyUHJlZmVyZW5jZXMgPDwvQ2VuVyV2luZG93IHRdWUNCi9 0Rpc3BsYXlEb2NUaXRsZSBmYWxzZQ0KLpdFdpbmRvdyBmWxzZQ060 ovSGlkZVRvb2xiYXIgZmFsc2UNCi9IaWR2luZG93VUkgZmFc2UNCi9Ob2 gL1VzZU5vbmUNCi9QcmludEFyZWEgNyb3BCb3gNCi9QcmldFNjYWxpb mcgL0FwcERlZmF1bHQNCi9WaWVXJlYSAvQ3JvcEJveAKL1ZpZS4tDQo +Pg0KL1BhNlIC9Vc2VOb25lDQoGFnZUxheW91dCAvT2lQ29sdW1uDQo ... --047d7b2e109170ca5b04e42b6de6Il messaggio di posta elettronica in formato standard utilizza solo la codifica ASCII a 7 bit. Il MIME, oltre a permettere l’invio di allegati, permette l’invio di mail testuali con delle formattazioni personalizzate, in lingue diverse dall’inglese quindi aventi caratteri accentati oppure anche usando una modalità decorata da tag html. Nella prima riga, attraverso l’opzione Content-Type: multipart/mixed; si evidenzia che questa mail conterrà diverse parti aventi però componenti separate. Ogni componente avrà a sua volta una propria intestazione con un suo Content-type ed altre opzioni. Per poter delimitare una parte dall’altra si usa una stringa univoca che è dichiarata subito dopo il Content-type nel modo seguente: boundary=[stringa] Ad ogni occorrenza della stringa a cui viene anteposto “--” inizia una nuova parte del messaggio. Ad ogni occorrenza di “ - - stringa - ” si delimita la fine di quella sottoparte e l’inesistenza di un’altra nuova. All’interno di una parte possono esserci delle sottoparti, proprio come nell’esempio soprastante. Il meccanismo di suddivisione in sottoparti è il medesimo. 24 Il grafico esemplificativo evidenzia come la mail contenga una parte con il testo del messaggio ed un altra con l’allegato. La parte contenente il messaggio è a sua volta suddivisa in due sottoparti. Dando uno sguardo a tutto l’esempio si nota che la frase “ecco i dati di mio padre (compilati da lui apposta per te )” compare due volte. Se visualizzassimo questa mail la frase comparirebbe solo una volta. La dichiarazione del Content-Type alla riga 3 è multipart/alternative, ciò significa che lo stesso messaggio è stato composto in modalità diverse. A seconda di come sono implementate le impostazioni di visualizzazione dei messaggi dei client di posta la mail sarà visualizzata in una modalità piuttosto che un’altra. Non è l’utente che effettua queste operazioni ma sono i client di posta che lo fanno per questioni di retrocompatibilità con vecchi software oppure per migliorare la visualizzazione da smartphone o tablet. Nella seconda parte del body del messaggio è presente l’allegato. Un allegato è per forza un documento non in formato ASCII pertanto necessita di essere convertito per poter essere trasferito. Questo strumento deve anche essere presente nel destinatario e deve saper ricostruire il file uguale all’originale. Mime si occupa proprio di ciò, convertendo qualsiasi tipo allegato. I formati in cui converte sono diversi, basta che contengano solo caratteri ASCII. Nelle immagini, video e file audio il formato utilizzato è la base64 che consiste in una trasformazione in cui ogni gruppo di 24 bit (3 byte) viene trasformato in quattro caratteri (4 byte). Per poter istruire il Mime del destinatario alla 25 ricostruzione del file, vengono poste prima dell’allegato una serie di intestazioni con diverse informazioni: • Content-type ! indica la tipologia di file • Name ! nome dell’allegato • Content-Transfer-Encoding ! indica la codifica di trasferimento. • Z-Attachment-id ! id univoco dell’allegato. 4.2 Analisi delle mail da parte di Ermès Dopo un’attenta analisi sono giunto alla conclusione che tutte le mail dispongono di un formato standard anche se molto variegato. Andando ad analizzare i metodi di archiviazione dei vari formati di posta elettronica nessuno di essi modifica e salva nei suoi archivi le mail modificando la struttura del messaggio. In nessun formato di mail analizzato vengono effettuate modifiche a runtime della struttura del messaggio per permetterne l’invio. Ho quindi potuto convenire che è possibile riuscire a creare un software di analisi delle mail dove per ogni formato la modalità di estrazione delle informazioni tende ad essere il più similare possibile. Nei prossimi capitoli verranno dettagliate le modalità di analisi da me scelte ed implementate per i tre formati che attualmente Ermès supporta: dbx - msf - pst. 26 4.2.1 Gli archivi dbx Il formato di posta dbx è stato creato per il client di posta Outlook Express sviluppato da Microsoft. I sistemi operativi che hanno preinstallato questo client sono Windows98, Windows 2000, Windows Millenium e Windows XP. In Windows 95 l’installazione era facoltativa. Negli anni in cui questi sistemi operativi sono entrati nel mercato, l’informatica si è diffusa a macchia d’olio. Grazie alle loro interfacce user friendly anche coloro che non possedevano conoscenze informatiche avanzate cominciarono ad acquistare i computer. Ad oggi, nei paesi ad alto tasso di sviluppo, si registra che per ogni famiglia vi siano almeno 1-2 computer. Anche se quei sistemi operativi oggi sono superati da altre nuove versioni, la loro vastissima diffusione li rende ancora presenti nelle case e nelle aziende, soprattutto per quanto riguarda Windows XP. Durante un’analisi risulta quindi fondamentale avere uno strumento di acquisizione ed elaborazione di file dbx. La probabilità di trovare un computer con uno dei sistemi operativi sopra elencati è alta, soprattutto nelle aziende dove gli upgrade sono costosi e gli investimenti in software sono spesso agli ultimi posti nell’elenco delle spese prioritarie. 4.2.1.1 Strumenti utilizzati Per l’estrapolazione delle mail da un archivio in formato dbx ho scelto di utilizzare UnDBX, un tool di estrazione e recupero di messaggi cancellati di Outlook Express. Il padre del progetto è Avi Rozen2 e la versione utilizzata è la 0.20 del novembre 2011. Un archivio dbx contiene una serie di file in formato eml, uno per ogni mail. UnDBX estrae ogni singola mail e poi le inserisce in una cartella avente lo stesso nome dell’archivio. Il processo di parsificazione dei messaggi ottenuti dopo l’estrazione madiante l’UnDBX è stato da me sviluppato. 4.2.1.2 Input Se nell’immagine forense sono presenti degli archivi in formato dbx, durante la precedente fase di estrazione questi file sono stati estratti e riposti all’interno di una cartella dal nome “dbx”, la quale si trova all’interno di un’altra cartella denominata “extraction”. Questa fase vuole quindi in input la cartella di estrazione del progetto già iniziato e la cartella dove salvare i risultati dell’analisi. 2 [email protected] 27 4.2.1.3 Il codice Ogni partizione estratta verrà analizzata. Se nella partizione è presente la cartella “dbx” allora procede, altrimenti non esegue nulla. Viene creata una nuova cartella nella directory principale del progetto dal nome “MailAnalisys” e al suo interno si crea un’altra cartella contenente il nome della partizione in analisi. All’interno di questa cartella si crea una cartella denominata “dbx”. La memorizzazione delle informazioni riguardanti le mail avviene in tre dizionari annidati. I dizionari sono delle strutture dati simili alle tabelle di hash in cui è possibile salvare un coppia <chiave, valore>. Non possono esserci due coppie con chiavi uguali. L’annidamento avviene nel modo seguente: nel dizionario più esterno le chiavi non sono dizionari, mentre i valori sono a loro volta dei dizionari. Il dizionario più esterno possiede le coppie <nome partizione : dizionario degli archivi dbx >. Il dizionario degli archivi dbx possiede le coppie <nome archivio dbx : dizionario file eml >. Il dizionario dei file eml, ovvero di tutte le mail presenti nell’archivio dbx possiede le coppie <numero mail : dati della mail >. È quello più interno. Dopo aver analizzato le partizioni, attraverso la funzione processPartitonDbxFolder () si analizzano gli archivi dbx. Per ogni archivio viene chiamata la funzione undbx che ha la seguente sintassi: undbx [f ile.dbx] [destinationF older] 28 (4.1) • File.dbx corrisponde al path assoluto dell’archivio dbx • destinationFolder corrisponde al path assoluto della cartella contenente le mail estratte. Si ricorda che l’output della funzione undbx è una cartella avente come nome lo stesso nome del file dbx, come contenuto tutte le mail presenti nell’archivio ognuna in formato .eml. Per ogni archivio dbx viene chiamata la funzione processDbxPostUndbx () che avrà come parametro la cartella destinazione dell’istruzione undbx del file dbx Nella processDbxPostUndbx () si analizza ogni singola mail, ognuna in formato eml. Per ogni mail si costruisce un array avente i seguenti elementi posti nell’ordine sottoelencato: • Mittente • Destinaratio • Data e ora • Oggetto • Testo • Path del file .eml • Path degli allegati (un path di un allegato per ogni cella dell’array) Il terzo dizionario, quello più interno, avrà come chiave un numero incrementale identificativo univoco della mail, come valore l’array contenente i dati sopra elencati. Per l’analisi delle mail è stato utilizzato il modulo email di Python. Andando a lavorare sul file eml per prima cosa viene rinominato, assegnando come nome un numero intero positivo incrementale per risolvere problemi di codifica. Successivamente verrà spiegato il perchè di questa scelta. Subito dopo viene estratto il testo, sia quello standard sia quello in html. Successivamente vengono estratti, nella rispettiva codifica, mittente destinatario, data ed oggetto. Questi ultimi quattro vengono inseriti uno in coda all’altro all’interno dell’array. Subito dopo viene inserito il messaggio ed il path del file eml. Giunti a questo punto, rimane l’analisi degli allegati. Per ogni allegato si crea un file e si scrive dentro di esso la sequenza di dati, decodificandoli dal formato in cui si trovano: base64, usato oramai quasi per tutti gli allegati. Ecco l’istruzione: out.write(base64.b64decode(message.get_payload())) 29 (4.2) Ogni file ha quindi il seguente nome: nome f ile eml00 __00 stringa univoca che contraddistingue il f ile00 .00 estensione (es : 1661__58d4c21f ef 47 4666 9506 bbf e2d230505.pdf ) Terminata l’analisi dei file eml termina la funzione processDbxPostUndbx () e si passa all’archivio successivo. Terminati anche gli archivi di quella partizione si passa alla partizione successiva. Man mano che l’analisi procede il dizionario si riempie di dati. Una volta analizzate tutte le partizioni si arriva alla fase finale. Se dopo l’analisi vi è un dizionario contente almeno una mail, viene creato un nuovo file JSON dal nome “ElencoMailDBX.json” e tutto il dizionario viene memorizzato al suo interno. JSON (JavaScript Object Notation) è un formato adatto per lo scambio di dati nelle applicazioni client-server. Nella fattispecie linguaggi come Javascript, Ajax e Jquery riconoscono questi file e, se ben formati, possono leggerli e manipolarli. I dizionari Python, all’interno di un file JSON diventano array associativi. Il file json in questo progetto sono il ponte che collega la parte di back-end di analisi in Python con la visualizzazione delle mail in formato html. Generato il file json viene creata una cartella dentro MailAnalisys dal nome “Report” dove dentro vengono inseriti una serie di file presi direttamente dai file di configurazione di Ermès. Questi file serviranno per la corretta e gradevole visualizzazione delle mail. Infine, il file ElencoMailDBX.json viene spostato all’interno della cartella Report. 4.2.1.4 Output L’output di questa fase è una cartella contenente un file dal nome “Report.html”. Una volta aperto il file sarà possibile visionare le mail come se si fosse su un client di posta. Grazie a Javascript il file JSON viene analizzato rendendo facile ed agevole l’estrapolazione dei dati. Già nella fase di scrittura all’interno di un file json ma anche comunque per poterlo leggere è fondamentale che questo sia ben formato, cioè deve contenere caratteri codificati solo in utf-8. Le lettere accentate, ad esempio non possono essere inserite. Mentre tutto ciò che concerne i dati delle mail sono stati codificati automaticamente, proprio per non avere caratteri non validi, i nomi delle mail e degli allegati son stati controllati manualmente. Il controllo manuale si è trasformato in una ridenominazione automatica di tutti i file così da mantenere l’efficienza. I meccanismi di ridenominazione sono stati spiegati precedentemente. Per quanto riguarda l’interfaccia grafica e la modalità di navigazione all’interno di essa, è 30 stato dedicato un capitolo a parte. Con questo grafico è possibile notare come si evolve il progetto dopo l’analisi degli archivi dbx. 31 4.2.2 Gli archivi msf Nel dicembre 2004 Mozilla Foundation3 rilasciò le versione stabile 1.0 di un client di posta totalmente free: Thunderbird. Grazie al successo del browser Firefox, anche Thunderbird cominciò ad essere utilizzato dagli utenti, soprattutto da coloro che nutrivano risentimenti nei confronti di Microsoft e il suo Outlook Express. Mozilla Foundation è un associazione no-profit che da sempre ha avuto come obiettivo l’innovazione tecnologica aperta a tutti. Anche se Outlook Express è un software gratuito, per averlo era necessario acquistare un computer con sistema operativo Windows, unica piattaforma compatibile. Thunderbird invece è un client multipiattaforma, installabile su qualsiasi sistema operativo. 4.2.2.1 La metodologia di archiviazione di Thunderbird Siccome non ho trovato software che analizzassero in modo esaustivo gli archivi di posta Thunderbird ho deciso di implementare io da zero uno script di estrazione e parsificazione atto a questo utilizzo. Per poter quindi comprendere come ho implementato tale modulo, è fondamentale avere chiaro come Thunderbird archivia i messaggi e come strutta l’account di posta. L’archiviazione delle mail in Thunderbird è molto diversa rispetto ai dbx visti precedentemente. Se si decidesse di installare Thunderbird sul proprio pc, dopo le operazione di setting dei parametri del proprio account e il download dell’archivio, verrebbe creata una directory principale e al suo interno sarebbero presenti una serie di file in una configurazione simile a quella mostrata dall’immagine. 3 http://www.mozilla.org/en-US/ 32 I file di estensione msf possiedono il formato proprietario di Thunderbird. È ben noto a tutti che le cartelle principali presenti in una casella di posta elettronica sono: Posta in Arrivo, Posta in uscita, Posta Inviata, Bozze, Posta cancellata e Spam. L’utente può inoltre crearsi delle proprie cartelle dove organizzare al meglio messaggi e non avere la cartella della posta in arrivo intasata da messaggi appartenenti ad argomenti differenti. Ognuno dei file con estensione msf rappresenta proprio l’insieme di queste due classi di cartelle. Andando ad aprire uno dei file in formato msf, con grande stupore, non si troveranno delle mail ma diverse stringhe che appaiono essere parametri di configurazione. Se dentro un file msf non son presenti le mail per come sono state presentate all’inizio del capitolo, allora si può supporre che questi parametri corrispondano ad indici, i quali puntano a tutte le mail presenti nella cartella. Dove sono quindi le mail? Tra i vari file presenti nella cartella uno di essi, “Inbox”, è privo di estensione. Andando a vedere le proprietà del file si scopre che possiede l’estensione mbox, un formato standard per l’archiviazione di mail. Aprendolo è possibile trovare proprio tutte le mail, concatenate una dopo l’altra. Occorre notare che nell’immagine relativa alla struttura dei file in msf è presente una cartella dal nome [Gmail].sbd ed un file msf con lo stesso nome: [Gmail].msf. Questi due file raccontano parte della storia dell’account qui presente. L’account, essendo di google, prima di essere stato importato in Thunderbird era utilizzato nel client online di Google, Gmail per l’appunto. Dentro questa cartella infatti 33 vi sono a loro volta una serie di file in formato msf, le cartelle principali standard del web client Gmail [quelle standard di tutti i client di posta già elencate sopra]. Nella directory principale è presente ancora un file con estensione .dat. Questo file contiene parametri di configurazioni standard non inerenti alla struttura dell’account. 4.2.2.2 Input Durante la fase di estrazione, quando il programma incontrava un file in formato msf, non procedeva all’estrazione del singolo msf. In quel caso veniva estratta tutta la cartella laddove era contenuto il file. Le motivazioni nascono dal fatto che il file in formato mbox non ha lo stesso nome dell’account di posta (della directory principale). È cosa certa che dove vi è un file msf vi è anche un file in formato mbox contenente tutte le mail. L’unico caso in cui ciò è falso è nelle sottocartelle della directory principale dell’account. Dentro di essa vi sono solo file in formato msf. In questa fase l’input richiesto è il path della cartella di estrazione, come per il caso dell’analisi degli archivi dbx. 4.2.2.3 Il codice Dopo un’analisi del numero di partizioni estratte, per ognuna di esse si verifica la presenza di una cartella denominata “msf”. L’analisi proseguirà solo nelle partizioni dove questa cartella è presente. Anche per questa analisi verrà utilizzato un dizionario Python dove al suo interno sono annidati altri due dizionari. Si ricorda che il primo dizionario, il piu esterno, contiene le coppie <partizione, dizionario delle cartelle contenenti file msf>. Nel secondo dizionario sono presenti le coppie <nome dell’account msf, dizionario delle mail>. Nel terzo dizionario, quello più interno, sono presenti le coppie <numero mail, dati della mail>. Ogni sottocartella dentro la cartella msf viene analizzata dalla funzione processPartitionMSFFolder () che vuole due parametri: Il primo è il path della cartella msf della partizione, il secondo è il path della cartella dove destinare l’output dell’analisi. La funzione processPartitionMSFFolder () ha solo il compito di cercare il file mbox. Se il file viene trovato allora sarà chiamata la funzione processMboxfile () che vuole anch’essa due parametri: il primo è il path del file mbox, il secondo è il path della cartella di destinazione dell’analisi, identico al secondo parametro della processPartitionMSFFolder (). 34 Nella processPartitionMSFFolder () avviene effettivamente l’analisi delle mail. Le mail si trovano tutte all’interno del file mbox per poterle analizzare una ad una è necessario spacchettare l’archivio, così da processare una mail per volta. Tutte le mail archiviate da Thunderbird hanno una prima parte comune: From - [data ed ora] X-Mozilla-Status: [numero] X-Mozilla-Status2: [numero] Ogni qual volta nel file mbox compare la stringa ad inizio riga “From - ” inizia una nuova mail. Per separare ogni mail è stata utilizzata una struttura dati ad hoc: un array dove per ogni cella è presente una ed una sola mail tutta intera. Una volta ottenuto l’array si passa all’analisi di ognuna di esse. L’analisi è praticamente la stessa fatta nel caso dei file dbx, cioè per prima cosa si estrapola il testo nei suoi formati alternativi, poi si procede alla ricerca di mittente, destinatario, data ed ora ed infine viene cercato l’oggetto. Viene sempre utilizzato il modulo email di Python. Tutti i dati sono concatenati in un unico array ed il testo della mail si trova sempre al fondo per ora. Nell’analisi dei dbx, nella cella dell’arrray dei dati della singola mail, dopo il testo viene inserito il path della mail. Nel nostro caso le mail si trovano tutte nella stesso file mbox e, se si mettesse il path di questo archivio si incontrerebbero successivamente una serie di problemi: Sarebbe difficile aprirlo date le sue dimensione e sarebbe difficile ricercare la mail in mezzo ad altre centinaia o migliaia. A costo di occupare più spazio sul disco, per ogni mail, viene creato un nuovo file in formato mbox che contenga solo la mail analizzata. Per ogni mail analizzata vi sarà un corrispettivo file in formato mbox, ed il suo path sarà inserito nell’array dopo il testo del messaggio. Questo è il codice che esegue tali operazioni: pathSingleM ail = dest + str(numM ail) +00 .mbox00 with open(pathSingleM ail,00 w00 )assingleM ail : singleM ail.write(listOf M ail[numM ail 1]) singleM ail.close() arrayDati.append(pathSingleM ail) (4.3) I dati non ancora analizzati sono gli allegati. Anch’essi sono disposti allo stesso modo e necessitano di essere convertiti nella loro codifica di origine ed inseriti dentro ad un file con la giusta estensione. Per maggiori delucidazioni è possibile leggere la parte di estrazione degli allegati nell’analisi degli archivi dbx. 35 Terminate le tre analisi (ricerca partizione - ricerca mbox- analisi mail), se tutto è andato a buon fine, allora il rispettivo dizionario viene aggiornato. Terminata l’analisi delle partizioni il dizionario è completo. Se questo è vuoto allora non erano presenti alcuni file msf e quindi l’analisi termina, altrimenti il dizionario viene inserito all’interno di un file JSON dal nome “elencoMailMsf”. Come per i dbx viene creata una cartella “Report” (se questa fosse già presente i file doppi vengono sovrascritti) ed infine il file json viene spostato in questa cartella. Nel grafico della pagina successiva si evidenzia nuovamente l’avanzamento del progetto. 4.2.2.4 Output L’output di questa fase è un file in formato html dal nome “report.html”. Nella cartella MailAnalisys è possibile trovare una cartella denominata “Report” con il file all’interno. Attraverso il file html è possibile visionare sia le mail provenienti da archivi dbx sia provenienti da archivi msf. In questa versione, tutte le mail provenienti dal formato msf si trovano raggruppate secondo il loro archivio di provenienza, non divise per cartelle. Con la prossima versione si cercherà di studiare a fondo questi file affinchè si possa migliorare il software. 36 37 4.2.3 Gli archivi pst Visto il successo avuto da Outlook Express, vista la diffusione in larga scala del sevizio di scambio di mail tra gli utenti, Microsoft lanciò sul mercato Outlook, una versione nuova del software. Uno dei primi cambiamenti fu proprio il formato dell’archiviazione delle mail: da archvi dbx si passò ad archivi in formato PST (Personal Storage Table). Mentre un archivio dbx poteva arrivare fino ad una capienza massima di 2 Gb, nei pst non vi sono limiti di capacità. Il servizio Outlook inoltre possiede caratteristiche innovative, quali il dialogo con Microsoft Exchange e quindi la gestione delle rubriche. Microsoft Exchange è un prodotto di target aziendale studiato per la messaggistica aziendale. L’idea di migrare un software da un semplice uso di scambio mail ad un sofisticato metodo di gestione delle comunicazione e degli impegni di molti utenti ha rivoluzionato il concetto di archivio di messaggi di posta elettronica. Oltre alla gestione dei contatti, Microsoft Outlook gestisce il calendario, l’agenda delle attività e le note personali. Ora Outlook non è più compreso nella suite di un sistema operativo Microsoft. È incorporato nella suite Microsoft Office. 4.2.3.1 Strumenti utilizzati Per analizzare gli archivi pst ho deciso di utilizzare una libreria esterna: ReadPST versione 0.6.54 L’istruzione della readpst per l’estrazione dei dati dei file pst è la seguente: Readpst rSD [P ath P st F ile] [path destination F older] (4.4) Dove le opzioni • r ! per fare un analisi all’interno del file • S ! stabilisce l’output dell’estrazione. Per ogni file viene generata una cartella dove all’interno vi sono tanti file in formato MHTML quante sono le mail analizzate. A questi file viene assegnato come nome un numero incrementale da 1 in poi. I file MHTML non contengono gli allegati perchè questi vengono automaticamente estratti dalla funzione readpst. Agli allegati viene assegnato come nome il numero di mail a cui appartengono e poi viene concatenato il nome originale dell’allegato. • D ! recupera anche le mail cancellate presenti nell’archivio 38 Come per gli archivi dbx, ho utilizzato una libreria esterna per estrapolare le mail mentre il parsificatore l’ho interamente sviluppato io. 4.2.3.2 Input Anche in questo caso, come per gli altri archivi, la funzione vuole due input: la cartella di estrazione della prima fase e la cartella del progetto. 4.2.3.3 Il codice L’analisi preliminare che viene fatta avviene attraverso la ricerca della presenza della cartella denominata “pst” all’interno delle cartelle di estrazione delle partizioni. Anche per i pst vengono usati tre dizionari annidati per salvare i dati. Siccome in questa analisi è possibile tenere traccia della divisione in cartelle delle mail, le coppie dei dizionari sono diverse. Il primo dizionario contiene le coppie <nome dell’archivio pst, dizionario delle cartelle dell’archivio >. Il secondo dizionario contiene le coppie <nome della cartella, dizionario delle mail contenute in quella cartella >. Il terzo dizionario, il più interno, contiene le coppie <nome della mail, dati della mail >. Se sono stati estratti degli archivi pst nella fase di estrazione allora viene chiamata la funzione mailLab () che vuole come parametri la cartella pst di quella partizione e la cartella destinazione di salvataggio. La struttura di salvataggio delle mail è analoga ai due casi precedenti cioè dentro la cartella mailAnalisys vengono create tante cartelle quante sono le partizioni e dentro di esse vi sarà la cartella “pst” con i dati salvati in modo ordinato. La funzione mailLab () si occupa di eseguire il comando da terminale della readpst per ogni archivio pst. L’output di destinazione possiede come main directory la cartella pst, poi per ogni archivio vi è una sottocartella avente lo stesso nome. Dentro ognuna di queste cartelle vi è la main directory originale dell’archivio e ancora all’interno troviamo le varie suddivisioni in cartelle dell’archivio. Dentro queste ultime cartelle sarà possibile trovare le mail e tutti gli allegati. 39 Dopo l’esecuzione della readpst viene analizzato il messaggio di output e vengono salvati tutti i dati riguardanti l’estrazione. Per ogni archivio dove all’interno vi sono delle mail, viene chiamata la funzione mailLab2 () che prende come parametri il nome della cartella dell’archivio, il numero di mail presenti al suo interno e la cartella genitore (quella con il nome dell’archivio pst). La funzione mailLab2 () si occupa di estrapolare tutti i dati dalle mail. Come già detto nella parte introduttiva gli archivi pst non contengono solo mail ma anche ad esempio i contatti. Questo analizzatore riesce anche ad analizzare i contatti. Se l’archivio pst ha il nome “contatti” allora l’analisi sarà diversa. Per ogni contatto di un file e dentro di essi vi sono le informazioni. Per ogni file viene estrapolato il nome ed il numero di telefono. Per tutti gli altri archivi si tenta l’estrazione delle mail. Le mail, come già detto, si trovano una ad una dentro il rispettivo file mhtml - mime html - un formato di archiviazione dati multimediale. Ognuno di questi file è sottoposto ad analisi mediante il modulo email di Python dove si tenta di estrarre mittente, destinatario, data e ora, oggetto e testo. Tutti questi dati vengono posti all’interno di un array. Successivamente viene inserito anche il path del file mhtml per permettere la consultazione dell’originale in caso di necessità. Rimangono solamente gli allegati. Questa volta non è necessario cercarli all’interno del file mhtml. Essi sono già stati estratti dalla readpst pertanto sono presenti tra i file della cartella in analisi. Ricordando che ogni allegato ha come prima parte del nome il nome della mail a cui fa riferimento, trovarli tutti è abbastanza semplice grazie ai comandi del terminale. Il comando usato è il seguente: ls [this directory] | grep ˆ[ ] 40 (4.5) Si richiede di listare tutti i file contenuti nella cartella ma di estrarre solo quelli che iniziano (ˆ) con il numero della mail [i] a cui è concatenato il trattino. Ad ogni nome corrisponde un allegato, quindi viene costruito il suo path ed inserito in un array di supporto. Questo array, infine, verrà inserito come ultimo elemento dell’array dei dati della mail. Se in ogni fase tutto precede bene e vengono trovati dei dati, i dizionari rispettivi vengono aggiornati. Anche in questo caso il dizionario Python funge da strumento per creare un file json ben formato: elencoMailPST.json. In fase conclusiva il json viene creato e, se non ancora presente, costruita tutta la struttura della cartella contenente i file di configurazione per il report. 4.2.3.4 Output L’output è un report in html che permette la navigazione all’interno delle varie caselle di posta estratte. È possibile consultare la versione originale della mail così come è anche possibile visionare gli allegati. Se precedentemente erano state fatte analisi di altri archivi di altri formati questi saranno presenti prima o dopo gli archivi pst. Ogni tipologia di archivio è graficamente distinguibile dagli altri. Il consueto grafico di fine capitolo aiuta a riepilogare lo stato del progetto al termine della seguente fase. 41 42 4.2.4 Report dell’estrazione delle mail Dopo un’accurata analisi delle mail l’utente ha possibilità di visualizzare il risultato andando ad aprire il report in formato html. Attraverso le funzioni Javascript di manipolazione degli oggetti json è possibile recuperare tutte le informazioni ordinate nei file generati durante le fasi di mail analysis. I layout grafici che ho creato sono stati fatti sia con CSS 2 ma soprattutto con la libreria Bootstrap4 versione 2.3.2 sviluppata da Marc Otto (@mdo) e Jacob (@fat). Bootsrap non è solo una libreria che fornisce pezzi di codice di elementi grafici, offre anche una serie di layout animati grazie all’integrazione di Javascript. A questa tipologia di report ho deciso di applicare un layout grafico molto simile ai client di posta di successo. Nella parte sinistra sono presenti le cartelle e gli archivi analizzati, nella parte in alto a destra è possibile visionare l’elenco delle mail mentre in quella in basso è possibile visionare la singola mail selezionata. All’atto di apertura del report vengono analizzati i file json e successivamente caricati nella colonna di sinistra tutti i file presenti all’interno. Una barra di attesa invita l’utente ad aspettare a proseguire fino a che tutti gli archivi non vengono caricati. In seguito viene riportato il caso d’uso dettagliato. 4 http://www.getbootstrap.com/2.3.2/ 43 Nome caso d’uso: VisualizzaArchiviAnalizzati Portata: Sistema Livello: Obiettivo Analista Attore Principale: analista Parti Interessate: analista forense - forze dell’ordine - informatico generico Pre-condizioni: È stata fatta un’analisi forense con il software Ermès, sono stati trovati archivi in formato pst e/o dbx e/o msf. Garanzie di successo: viene visualizzato l’output dell’analisi Dopo aver caricato tutti gli archivi l’utente è libero di scegliere l’archivio di interesse e verrà visualizzato il suo contenuto. Il suo caso d’uso dettagliato: Nome caso d’uso: VisualizzaContenutoArchivio Portata: Sistema Livello: Obiettivo Analista Attore Principale: analista Parti Interessate: analista forense - forze dell’ordine - informatico generico Pre-condizioni:essere all’interno del file di report ed aver visualizzato gli archivi analizzati dal software Ermès. 44 Per ogni contenuto contenuto di ogni archivio, è possibile visualizzare ogni singolo elemento, che siano mail o che siano contatti personali. Ecco il caso d’uso: Nome caso d’uso: VisualizzaDettagliElemento Portata: Sistema Livello: Obiettivo Analista Attore Principale: analista Parti Interessate: analista forense - forze dell’ordine - informatico generico Pre-condizioni:Vi è un archivio mail o contatti non vuoto Nella fattispecie per le mail vi è una intestazione dove vengono riassunti mittente, destinatario, data ed ora, oggetto, mail originale ed eventuali allegati. L’analista può scegliere di non limitarsi a visualizzare le mail ma anche gli allegati e la mail originale presente nell’archivio. Ecco il caso d’uso: Nome caso d’uso: VisualizzaComponentiAggiuntivi Portata: Sistema Livello: Obiettivo Analista Attore Principale: analista Parti Interessate: analista forense - forze dell’ordine - informatico generico Pre-condizioni:Vi è un archivio mail o contatti non vuoto e si sta visualizzando un singolo elemento 45 46 Capitolo 5 L’interfaccia grafica Diversi software di informatica forense sono utilizzabili dagli utenti mediante il terminale, a linea di comando. L’utilizzo del terminale è un prerequisito limitato ad un gruppo di persone aventi una cospicua conoscenza dell’informatica. Visto però che il mio obiettivo era quello di poter permettere al maggior numero di persone possibile di utilizzare il mio software, ho provveduto a creare un’interfaccia grafica semplice ed intuitiva. Grazie ad essa l’analista potrà sin da subito prendere confidenza col programma e in poche e semplici interazioni riuscirà ad avviare l’analisi. L’unico punto di comunicazione tra l’utente, l’analista, ed il software è l’interfaccia grafica. Per facilitare l’apprendimento e l’interazione, l’interfaccia possiede una sola schermata con unicamente le informazioni necessarie alla corretta esecuzione delle analisi. L’use case diagram dell’analista mostra sin da subito quali sono le operazioni che può effettuare Per visualizzare l’interfaccia grafica è necessario aprire una nuova finestra del terminale, passare in modalità root (attraverso il comando sudo su) e poi lanciare il modulo di Python Ermes_gui.py 47 Affinchè l’analisi possa iniziare, devono essere soddisfatte tre condizioni: 1. Deve essere indicato il path dell’immagine forense 2. Deve essere indicata la cartella di destinazione laddove verranno salvati tutti i dati 3. È obbligatorio selezionare almeno un files di interesse da analizzare Per prima cosa è necessario inserire l’immagine forense. All’atto dell’inserimento viene chiamato il metodo SelectForensicsImage (). Eccone il caso d’uso: Nome caso d’uso: SelectForensicsImage Portata: Sistema Livello: Obiettivo Analista Attore Principale: analista Parti Interessate: analista forense - forze dell’ordine - informatico generico 48 Dopo aver selezionato l’immagine forense è necessario selezionare la cartella di destinazione. Anche in questo caso la gestione è monitorata dal caso d’uso selectDestinationFolder (). Viene fornita un piccola interfaccia pop-up dove è possibile scorrere l’albero del proprio sistema e scegliere la destinazione la cartella desiderata. Immediatamente dopo viene fornita la possibilità di selezionare alcune analisi opzionali: nel primo riquadro viene richiesto se si desidera calcolare l’md5 di ogni file e se è gradito il calcolo del numero del blocco di partenza del file all’interno dell’immagine forense. Il corretto settaggio di questi parametri è gestito dalla selectAdditionaInfo (). Accanto a queste due opzioni è possibile scegliere se effettuare il carving del disco. Questa operazione, di default non è inclusa. Se si sceglie di effettuare il carving la funzione chiamata è lookInfoCarving () che cambierà il parametro atto all’avvio di questa fase di analisi. L’operazione di carving è molto lunga pertanto deve essere l’utente a scegliere di sua spontanea volontà se farla o meno. L’ultima parte da compilare è quella relativa alle estensioni, cioè è richiesto di inserire le estensioni dei file d’interesse desiderati. Per permettere l’e49 strazione totale di tutta l’immagine si può subito premere in corrispondenza della checkbox “all the files into the image”. Come conseguenza tutte le checkbox elencanti i singoli formati di maggior interesse vengono disabilitate poichè la selezione fatta comprende già questi formati. Se non si è interessati a tutti i file dentro l’immagine forense, si procede con la selezione uno a uno dei file desiderati tra le checkbox a disposizione. All’atto di selezione di un estensione viene chiamato il metodo OptionExtensionExtraction () che l’aggiunge ad un dizionario sintatticamente uguale a quello delle estensioni della prima fase d’analisi. Se viene tolto il check da una delle checkbox allora anche il dizionario perde quella voce. Una volta compilato tutto con un semplice click sul pulsante “Analize” l’analisi inizia. Per non permettere interferenze con l’analisi in corso quest’ultimo bottone viene disabilitato e per poterlo riavviare si dovrà eseguire nuovamente il programma da capo. Un box sottostante tiene traccia dello stato dell’analisi corrente e, una volta terminata, lo segnala. Il caso d’uso StartAnalysis riassume quanto detto precedentemente: Nome caso d’uso: StartAnalysis Portata: Sistema Livello: Obiettivo Analista Attore Principale: analista Parti Interessate: analista forense - forze dell’ordine - informatico generico 50 Nello specifico il sistema effettua chiamate a terminale dei vari moduli separati che si occuperanno di effettuare le varie fasi dell’analisi ampiamente trattate precedentemente. Ogni chiamata ha la sua serie di parametri, necessari al corretto settaggio dell’input di quell’analisi specifica. Terminata l’analisi, è importante che venga premuto il tasto “Close” così da permettere di smontare correttamente le immagini. 51 Capitolo 6 Conclusioni Ermès, il software da me realizzato, può davvero risultare assai utile in tutti quei contesti laddove sia necessaria un’analisi dei dati di un computer, un server, un nas, una chiavetta usb o una memory card. I punti di forza del programma sono la catalogazione dei file per formato, la ricerca dei file cancellati e l’analisi delle mail. In un’indagine non è strettamente detto che tutte tre siano necessarie contemporaneamente ma solitamente sono azioni che rispecchiano la metodologia standard di analisi di un analista forense. In caso di analisi preliminari questo programma può risultare assai utile poichè è in grado di effettuare in modo automatico un’analisi globale con un grado di completezza tale da poter far capacitare subito l’utilizzatore riguardo la quantità di dati presenti nell’immagine forense, il sistema di scambio di mail utilizzato e quali mail nello specifico venivano scambiate. Ad oggi sono riuscito a far estrapolare ad Ermès qualsiasi file all’interno di un’immagine forense oppure solo quelli di interesse dell’utente. Ogni file estratto viene catalogato in un documento visualizzabile successivamente. Mi sono anche occupato di far ricercare ad Ermès i file cancellati in una fase di analisi separata. La parte per cui ho impiegato maggiori sforzi riguarda l’analisi delle mail. Attualmente i tre formati di archivi di posta che ho analizzato sono dbx, pst e msf. Vengono analizzati i file estrapolati dalla fase di estrazione. Sono esclusi gli archivi recuperati durante la fase di carving. Negli archivi di mail in formato pst, grazie al software ReadPST che ho utilizzato per l’estrazione, son riuscito a ricostruire la struttura originale delle cartelle all’interno dell’account di posta. Sono inoltre riuscito a recuperare i contatti della rubrica dell’account e a crearne una lista. Se si è alla ricerca di un numero telefonico e questo è all’interno della rubrica, sarà possibile visualizzarlo assieme ai dati del contatto nel report delle 52 mail. Nei formati dbx ed msf, al momento, vengono analizzati tutti i file singolarmente estraendo le mail e raggruppandole archivio per archivio. 53 Capitolo 7 Gli sviluppi futuri Di fronte a questo progetto si è generato un entusiasmo tale da non far terminare il progetto con questa tesi anzi, sarà immediatamente ripreso, rivisto ed ampliato. Le collaborazioni saranno importanti per portare nuove idee e nuove strategie per analisi sempre più precise ed efficienti. Siccome questo programma utilizza moduli esterni per eseguire piccole fasi di analisi non si escludono future integrazioni con nuovi programmi. Se esiste già un software open source che effettua bene una parte dell’analisi che si vuole inserire nel proprio progetto non è saggio risviluppare un modulo che effettua le medesime azioni. Si considera una scelta più utile quella di usare direttamente quel modulo e di integrarlo. Ciò che risulta davvero importante e necessita di essere sviluppato con meticolosità in questo contesto sono gli output visibili all’utente. I report di analisi e le interfacce di navigazione dovranno essere continuamente migliorate da chi sviluppa Ermès e sarà praticamente impossibile trovare programmi esterni integrabili. La ricerca di visualizzazioni user-friendly ma comunque complete è uno degli obiettivi di questo progetto. Lavorando sodo su questo obiettivo sarà possibile allargare il bacino di utenti che usufruirà del programma. L’obiettivo finale che vorrei raggiungere è quello di avere un semplice strumento ma comunque completo, capace di analizzare il maggior numero di formati di mail possibile e che sia in grado di essere integrato mano mano con nuovi script relativi ai singoli archivi di posta analizzabili. Un software può diventare grande solo se ci sono diverse menti che lo hanno pensato e sviluppato. L’evoluzione delle tecnologie e dei sistemi operativi obbligherà ad effettuare aggiornamenti continui al programma. Sarà importate avere una panoramica completa sulle ultime uscite su mercato di dispositivi, programmi e sistemi operativi. 54 Capitolo 8 Ringraziamenti Le persone da ringraziare sono sempre molte: spero di ricordare di tutti senza fare torti ad alcuno. Andando a ritroso i miei primi ringraziamenti vanno al Dr. Paolo Dal Checco che ha saputo darmi i consigli giusti per non andare fuori strada durante l’ideazione del software e la redirezione della tesi. Ringrazio inoltre il Dr. Giuseppe Dezzani e i miei colleghi Ivano, Stefano ed in particolar modo Sebastiano che, ai primi approcci con Python, mi ha fornito numerosi consigli sulla programmazione agile in questo linguaggio. Ringrazio inoltre Monica e Cristina, per aver sopportato i miei continui andirivieni in ufficio. Ringrazio la professoressa Viviana Bono, il mio relatore interno, per il supporto al seguente progetto e le rifiniture alla relazione. Altri ringraziamenti vanno a Mattia con cui ho condiviso moltissimi momenti in università e assieme abbiamo preparato numerosi esami. Ringrazio l’amico Stefano per avermi fatto da supporto intellettuale alla lettura di questa trattazione. Ringrazio anche gli avvocati Camillo Sacchetto e Fabio Montalcini. Grazie a loro ho avuto la possibilià di misurarmi nel mondo accademico prima della laurea sia facendo piccole lezioni davanti ad un cospicuo pubblico, sia mediante la partecipazione alla scrittura di un manuale. Un grazie speciale va ad Alessandra, punto di riferimento, con cui quest’anno ho condiviso tantissimi momenti di studio nei posti, nei momenti e nelle condizioni più variegate. Uno dei ringraziamenti più grandi va ai miei genitori. Durante i periodi degli esami e lezioni/stage, la mia tensione era alta ed a volte poteva sfociare in nervosismo che loro hanno compreso e capito con grande pazienza. Li ringrazio inoltre per l’aiuto concreto durante tutto il periodo degli studi. Senza di loro, con lavori saltuari, non sarei riuscito a permettermi questo titolo di studio. Ringrazio infine il dottor Bruno Ramondetti per avermi aiutato a ritrovare e percorrere la strada giusta per inseguire al meglio il mio obiettivo. 55 Bibliografia [1] Lutz Marc, Learning Pythton - 4th edition, Sebastopol (USA), O’Reilly, 2009 [2] Silberschatz - Galvin - Gagne - Sistemi operativi. Concetti ed esempi. Ottava edizione, Milano, Pearson, 2009 [3] Ghirardini Andrea, Faggioli Gabriele, Computer Forensics, Milano, Apogeo, 2009 56 Sitografia [1] http://docs.python.it/paper-a4/ref.pdf [2] http://infohost.nmt.edu/tcc/help/pubs/tkinter.pdf [3] http://linuxdidattica.org/docs/altre_scuole/msm_p/txs_01.html [4] http://it.diveintopython.net/xml_processing/command_line_arguments.html [5] http://wwwcdf.pd.infn.it/ [6] http://code.google.com/p/undbx/ [7] http://www.cgsecurity.org/wiki/PhotoRec [8] http://www.five-ten-sg.com/libpst/rn01re01.html [9] http://docs.python.org/2.7/ [10] http://api.jquery.com/jQuery.getJSON/ 57