venerdì 20 aprile 2012

Network Forensics Puzzle Contest #2

Ho completato anche questo secondo contest appoggiandomi ad una soluzione già fornita, perchè ancora non mi muovo bene nei forensics contest e perchè ho ancora problemi con python... La soluzione che ho sfruttato per aiutarmi si trova a questo indirizzo... E' di un certo Jeremy Rossi... Per imparare python non c'è miglior cosa da fare che sfruttarlo...

Così è stato... La prima funzione l'ho trovata su stackoverflow.com... Converte in base64 risolvendomi alcuni problemi che io avevo a convertire... La seconda funzione, effettua delle operazioni preliminari, come creare la cartella per i file vari e verificare che non esista già, nel caso la trovasse già esce dallo script e chiede di cancellare la cartella... Ed infine crea i file estratti con tcpflow...

La terza funzione è quella che più interessa, perchè è quella che estrae le informazioni da ogni file creato con tcpflow...

Provo a descriverlo in righe... Nella riga 36 creo il file che conterrà tutte le informazioni necessarie, con wb gli do anche i permessi di scrittura... Nella riga 37 inserisco un for per effettuare le seguenti operazioni su tutti i file presenti nella directory scelta come directory di lavoro... Riga 38 e 39 scrivono informazioni generiche nel file, la riga 40 invece è un refuso... Passiamo alla riga 41, dove leggo le righe che compongono ogni file presente nella directory... E per ogni riga che si trova in a, faccio un controllo con un if/in... Cioè nella riga 42, se trovi nell'elemento all'i-esima posizione della lista le parole "AUTH LOGIN" allora riportami i dati nel file di report... Ma non riporto i dati i-esimi, ma gli i-esimi più 1 e più 2 decodificati dalla base64... Questo perchè ho notato che il codice smtp 334 corrisponde alla codifica base64, quindi mi interessa decodificare i due elementi successivi per avere le credenziali di accesso al server smtp...

Gli if successi fanno la stessa cosa del primo, cioè controllano che la stringa sia contenuta nell'i-esimo elemento della lista... Discorso diverso per l'ultimo if... Se è vero che DATA è contenuto nell'i-esimo elemento, allora trasforma la lista in string con riga 52, tenendo solo i dati che vanno dall'i-esimo più uno elemento fino al penultimo elemento... E qui entra in gioco il modulo email di python... Infatti nella riga 53 prendiamo la stringa b e la trasformiamo in un elemento mail.. E per ogni parte di questo msg, con walk() facciamo appunto la lettura dell'email, andiamo a verificare che ci siano dati per noi interessanti...

Nella riga 55 metto un if per cercare i dati 'text/plain', cioè il messaggio della mail... e con una sola riga, grazie al modulo email, riesco ad estrarre delle informazioni necessarie... E successivamente le scrivo nel file di report...

Nella riga 58 invece vado a cercare eventuali allegati... Infatti get_filename() ci permette di ricavare il nome dell'allegato, e se esiste( con l'if controllo che non sia None, altrimenti salto) mi salvo l'allegato nella directory, e scrivo il suo nome nel file di report... In più calcolo l'md5 hash e salvo il risultato dentro al file di report...

Il file salvato ha estensione docx, ma con file da terminale mi dice che è un file zip... L'ho rinominato ed estratto infine, per ottenere l'immagine che mi diceva il luogo dell'incontro... E ne ho calcolato l'md5 sempre da terminale con md5sum... Non ho inserito questa parte dentro allo script, anche perchè renderla automatica penso sia difficilino per me... E con queste informazioni si può rispondere a tutte le domande, sia grazie al file di report che agli ultimi 2 comandi...

Nessun commento: