1.0.2. SQLite forensics. Il database Free piu' diffuso al mondo



Похожие документы
SQLite Forensics. Il database Free piu' diffuso al mondo

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

MagiCum S.r.l. Progetto Inno-School

Una metodologia di progettazione di applicazioni web centrate sui dati

Corso di Laboratorio di Basi di Dati

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Lezione V. Aula Multimediale - sabato 29/03/2008

Volumi di riferimento

TIMESHARK: Uno strumento per la visualizzazione e l analisi delle supertimelines. Relatore: Federico Grattirio

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Lezione 9. Applicazioni tradizionali

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Dispensa di database Access

Access. P a r t e p r i m a

Al giorno d oggi, i sistemi per la gestione di database

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

POSTECERT POST CERTIFICATA GUIDA ALL USO DELLA WEBMAIL

Strumenti informatici per la Lettura. una guida alle risorse, ai dispositivi, ai formati

DBMS (Data Base Management System)

ITI M. FARADAY Programmazione modulare a.s

Architetture Informatiche. Dal Mainframe al Personal Computer

Architetture Informatiche. Dal Mainframe al Personal Computer

SOGo: sostituire Microsoft Exchange con software Open Source. Giovanni Bechis

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Esercitazione 05. Sommario. Packet Filtering [ ICMP ] Esercitazione Descrizione generale. Angelo Di Iorio (Paolo Marinelli)

19. LA PROGRAMMAZIONE LATO SERVER

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Corso sul linguaggio SQL

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Cosa è un foglio elettronico

Structured Query Language parte 1

Lezione 1 Introduzione

Il web server Apache Lezione n. 3. Introduzione

2104 volume III Programmazione

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

Informatica B. Contenuti. Introduzione alle Basi di Dati e ai DBMS. Introduzione a dati e basi dati DBMS Modello dei dati

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

Istruzioni operative riservate ai Clienti titolari del nuovo internet banking

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Introduzione a phpmyadmin

Come usare P-touch Transfer Manager

Sistemi Informativi e Basi di Dati

PROGRAMMA DI CLASSE 5AI

Reti di Calcolatori. Il Livello delle Applicazioni

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Corso App modulo Android. Antonio Gallo

Corso di Informatica

Corso di Informatica Generale 1 IN1. Linguaggio SQL

Organizzazione degli archivi

Installazione e caratteristiche generali 1

DBMS: MySQL CORSO DI BASI DI DATI 2014/2015

Introduzione Ai Data Bases. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni

Capitoli 8 e 9. SQL embedded. Applicazioni tradizionali Applicazioni Internet. Sistemi di basi di dati Raghu Ramakrishnan, Johannes Gehrke

PostgreSQL. Il database Open Source piu' avanzato

AscoCollabora Manuale Utente. Release 1.3

Indice. Indice Premessa e scopo del documento Ambiente operativo Architettura di sistema... 5

Esempio Cookie Policy

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

icloud Forensics .e privacy dei nostri dati? Milano, 21/6/2012 Convegno E-Privacy Mattia Epifani

P A D. Private A Distanza.

Corso di PHP. Prerequisiti. 1 - Introduzione

Report sulle statistiche di accesso al sito 01 gennaio - 31 luglio 2015

Progetto LearnIT PL/08/LLP-LdV/TOI/140001

User Tools: DataBase Manager

BASE DI DATI: introduzione. Informatica 5BSA Febbraio 2015

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

PostgreSQL 8.4. Associazione Italiana PostgreSQL Users Group ConfSL 2009 Speaker's Corner Bologna, 13 Giugno 2009

Guida Google Cloud Print

DATABASE.

Tool. Basi di Dati e Sistemi Informativi Prof. Marco Di Felice Dott.sa Sara Zuppiroli A.A

Informativa estesa sull utilizzo dei cookie

Gui Gu d i a d ra r p a i p d i a V d o a d f a one Int fone In e t r e net rnet Box Key Mini

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

PHP e Structured Query Language

Linee di evoluzione dei Database

Manuale Knowledge Base

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

Dropbox di classe. É un servizio internet fornito gratuitamente (funzioni base).

SurfCop. Informazioni sul prodotto

IL FITOFOR: UNO STRUMENTO PER LA GESTIONE DELLE INFORMAZIONI FITOSANITARIE. Marino Vignoli, Elisa Moneti, M. Miozzo DREAM - Italia

Progettaz. e sviluppo Data Base

Data Warehousing (DW)

Cookie Policy per

UN PROGRAMMA APPLICATIVO: ACCESS Access è un programma del pacchetto Office che permette di realizzare database

Транскрипт:

1.0.2 SQLite forensics Il database Free piu' diffuso al mondo

Argomenti trattati Presentazione SQLite Utilizzo di SQLite Introduzione Interfaccia client SQL SQLite forensics Carving Principali applicazioni SQL: esempi pratici

Obiettivi Fornire una conoscenza di base su SQLite dal punto di vista architetturale e funzionale Presentare le principali caratteristiche dell'sql di SQLite Fornire una panoramica sulle basi dati SQLite usate dai piu' comuni programmi (eg. Skype, Firefox, Chrome,...) e di come analizzarle in ambito forensics

Argomenti non trattati Internals Data types Strutture dati interne (file format, WAL,...) Versioni ed evoluzione Programmazione di applicazioni Interfacce di programmazione Sviluppo su Android, iphone, Windows Phone Un esempio completo in C language

SQLite SQLite e' DBMS relazionale piu' installato al mondo. SQLite e' un software di pubblico dominio. I suoi principali punti di forza sono: Free! Gratis e distribuito con una licenza molto, molto libera (public domain) Falcilmente integrabile nelle applicazioni Robustezza ed integrita' dei dati Presente praticamente su ogni smartphone, su ogni MAC, sulla maggioranza dei PC, disponibile su tutti i sistemi operativi, utilizzato da centinaia di programmi,... Un ottimo e completo SQL utilizzabile direttamente e con i piu' diffusi linguaggi di programmazione

Diffusione SQLite e' utilizzato da: Tutti i cellulari Android ed iphone Programmi diffusissimi (stima > 70% PC): Firefox, Chrome, Skype, Thunderbird, Dropbox,... I piu' recenti cellulari Symbian Tutti i sistemi MAC OS X e Solaris 10 Molti lettori MP3... Si stima un utilizzo superiore a 500.000.000 installazioni

Architettura L'architettura di SQLite e' semplice. Un database SQLite e' costituito da un solo fle. Non c'e' nessun programma, thread o processo. Per accedere a SQLite un'applicazione deve semplicemente utilizzare la libreria disponibile come software di pubblico dominio. Il formato del fle e' defnito in modo preciso dalle specifche ed inizia con stringa: SQLite format 3\0. Il formato e' binary compatible su TUTTE le piattaforme. Sono disponibili diversi programmi per accedere in modo semplice ai dati.

SQL SQLite supporta lo standard ANSI SQL92 in modo praticamente completo (sono pochissimi sono i costrutti non implementati). SQLite e' semplice da utilizzare da linea di comando: $ sqlite3 my.db SELECT dept.location, count(*), sum(salary) from emp, dept where emp.deptno=dept.deptno group by dept.location order by 3 desc limit 10; ^D

GUI

GUI

scalpel.conf Il carving di un DB SQLite e' molto semplice! I primi 16 byte contengono la scritta: SQLite format3 #------------------------------------------------------------------- #------------------------------------------------------------------- # SQLITE DATABASE FILES # SQLITE DATABASE FILES #------------------------------------------------------------------- #------------------------------------------------------------------- # # # SQLite # SQLite sqlitedb y 20000000000 \x53\x51\x4c\x69\x74\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x33 sqlitedb y 20000000000 \x53\x51\x4c\x69\x74\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x33 # # # # # #

SQL (DDL) I comandi di DDL sono SQL Standard (eg. create table) SQLite utilizza 5 differenti Storage Class: NULL, INTEGER, REAL, TEXT, BLOB Non c'e' un formato per le date che vengono memorizzate come testo (eg. ISO8601: YYYY-MM-DD HH:MM:SS.SSS) o come numerico (eg. secondi da Epoch) Sono presenti gli indici (B-tree) Sono presenti le viste (not updatable) E' disponibile una (una!) tabella di data dictionary: sqlite_master

SQL (DML) DML: Data Manipulation Language sqlite> select date('now'), sqlite_version(), sqlite_source_id(), sqlite_compileoption_get(0), sqlite_compileoption_get(1); 2012-02-07 3.7.6 2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7 ENABLE_COLUMN_METADATA ENABLE_FTS3 SQLite=# select * from sqlite_master;... SQLite=# insert... ; update... ; delete...;

SQL (funzioni) SQLiteQL ha un insieme molto ampio di operatori, funzioni e clausole: Operatori: AND, OR, NOT, BETWEEN,IN, IS, =, >=,... Funzioni su stringhe, date: LENGTH, UPPER, LOWER, QUOTE,... RANDOM, ROUND,... DATE, STRFTIME,... Funzioni di gruppo: COUNT(), SUM(), AVG(), HAVING,...

SQLite nei programmi

Firefox Firefox utilizza una dozzina di database SQLite. Il piu' interessante e' il database places.sqlite che contiene una dozzina di tabelle tra cui il log delle URL visitate Su Windows XP: C:\Documents and Settings\%user\Application Data\Mozilla\Firefox\Profiles\%profile.default\ - Windows Vista: C:\Users\%user\AppData\Roaming\Mozilla\Firefox\Profiles\ %profile.default\

Firefox Ultimi siti visitati con Firefox Ultimi siti visitati con Firefox SELECT datetime(moz_historyvisits.visit_date/1000000,'unixepoch') as data, SELECT datetime(moz_historyvisits.visit_date/1000000,'unixepoch') as data, moz_places.url moz_places.url FROM moz_places, moz_historyvisits FROM moz_places, moz_historyvisits WHERE moz_places.id = moz_historyvisits.place_id WHERE moz_places.id = moz_historyvisits.place_id ORDER BY 1 desc ORDER BY 1 desc LIMIT 20 OFFSET 0 LIMIT 20 OFFSET 0 Siti piu' visitati con Firefox Siti piu' visitati con Firefox SELECT moz_places.url, visit_count SELECT moz_places.url, visit_count FROM moz_places FROM moz_places ORDER BY visit_count desc ORDER BY visit_count desc LIMIT 20 LIMIT 20

Chrome Chrome utilizza diversi database SQLite tra cui il piu' significativo e' History che contiene gli accessi alle pagine web. Le tabelle piu' interessanti sono ulrs, visits e downloads. Su Windows XP: C:\Documents and Settings\%user\Application Data\Google\Chrome\default\ - Windows Vista: C:\Users\ %user\appdata\local\google\chrome\default\...

Chrome Siti visitati con Chrome Siti visitati con Chrome SELECT datetime((visit_time-11644473600000000)/1000000,'unixepoch', 'localtime') SELECT datetime((visit_time-11644473600000000)/1000000,'unixepoch', 'localtime') as data, as data, urls.url, urls.title as titolo urls.url, urls.title as titolo FROM urls, visits FROM urls, visits WHERE urls.id = visits.url WHERE urls.id = visits.url ORDER BY 1 desc ORDER BY 1 desc LIMIT 20 OFFSET 0 LIMIT 20 OFFSET 0

Safari Safari e' il diffuso browser sviluppato Apple. Il file di database e' Cache.db e contiene 5 tabelle. Su Mac OS X: /Users/%user/Library/Caches/com.apple.Safari.

Safari Siti visitati con Safari Siti visitati con Safari SELECT cfurl_cache_response.time_stamp as data, SELECT cfurl_cache_response.time_stamp as data, cfurl_cache_response.request_key as url cfurl_cache_response.request_key as url FROM cfurl_cache_response FROM cfurl_cache_response ORDER BY 1 desc ORDER BY 1 desc LIMIT 20 OFFSET 0 LIMIT 20 OFFSET 0 Pagine richieste con Safari Pagine richieste con Safari SELECT cfurl_cache_response.time_stamp as data, SELECT cfurl_cache_response.time_stamp as data, cfurl_cache_response.request_key as url, cfurl_cache_response.request_key as url, cfurl_cache_blob_data.receiver_data as contenuto cfurl_cache_blob_data.receiver_data as contenuto FROM cfurl_cache_blob_data, cfurl_cache_response FROM cfurl_cache_blob_data, cfurl_cache_response WHERE cfurl_cache_blob_data.entry_id=cfurl_cache_response.entry_id WHERE cfurl_cache_blob_data.entry_id=cfurl_cache_response.entry_id ORDER BY 1 desc ORDER BY 1 desc LIMIT 20 OFFSET 0 LIMIT 20 OFFSET 0

Skype Skype mantiene i propri dati sul database file main.db che contiene una decina di tabelle. Su MS Windows il database di Skype si trova in C:\Documents and Settings\%profile\Application Data\Skype\%skype_user, con l'eccezione di Vista and 2008 dove il file e' in C:\Documents and Settings\%profile\AppData\Roaming\Skype\%skype_user. Su Mac OS X: /Users/%user/Library/Application Support/Skype/%skype_user.

Skype Chiamate skype-to-phone (tutte) e skype-to-skype (solo se OK) Chiamate skype-to-phone (tutte) e skype-to-skype (solo se OK) SELECT identity as chiamante, guid, call_duration/60 as durata_minuti, SELECT identity as chiamante, guid, call_duration/60 as durata_minuti, strftime('%y-%m-%d %H:%M:%S', start_timestamp,'unixepoch','localtime') strftime('%y-%m-%d %H:%M:%S', start_timestamp,'unixepoch','localtime') as inizio_chiamata as inizio_chiamata FROM CallMembers FROM CallMembers ORDER BY id ORDER BY id Chiamate skype-to-skype (tutte) Chiamate skype-to-skype (tutte) SELECT host_identity as chiamante, current_video_audience as destinazione, SELECT host_identity as chiamante, current_video_audience as destinazione, duration/60 as durata_minuti, duration/60 as durata_minuti, strftime('%y-%m-%d %H:%M:%S', begin_timestamp,'unixepoch','localtime') strftime('%y-%m-%d %H:%M:%S', begin_timestamp,'unixepoch','localtime') as inizio_chiamata as inizio_chiamata FROM Calls FROM Calls ORDER BY id ORDER BY id

Skype Chat Skype Chat Skype SELECT author as chiamante, chatname, body_xml as messaggio, SELECT author as chiamante, chatname, body_xml as messaggio, strftime('%y-%m-%d %H:%M:%S', timestamp,'unixepoch','localtime') as strftime('%y-%m-%d %H:%M:%S', timestamp,'unixepoch','localtime') as inizio_chiamata inizio_chiamata FROM messages FROM messages ORDER BY timestamp ORDER BY timestamp

Apple iphone I sistemi operativi della Apple utilizzano in modo estensivo il database SQLite. ios, il sistema operativo dell' iphone non fa eccezione. Tra i molti DB interessanti: sms.db, consolidated.db (ios >= 4),... Sul DB consolidated.db vi sono state polemiche ed e' stata emessa un patch specifica per rimuovere parte dei dati storici, ma l'informazione era gia' presente da tempo!

Apple iphone SMS SMS SELECT ROWID, case flags when 2 then 'Ricevuto' when 3 then 'Inviato' SELECT ROWID, case flags when 2 then 'Ricevuto' when 3 then 'Inviato' when 33 then 'Fail' when 129 then '*Del' else 'Unkn' end as tipo, when 33 then 'Fail' when 129 then '*Del' else 'Unkn' end as tipo, address as numero_tel, datetime(date,'unixepoch','localtime') as data, address as numero_tel, datetime(date,'unixepoch','localtime') as data, text as messaggio text as messaggio FROM message FROM message Dove sei stato? Dove sei stato? SELECT datetime(timestamp+978307200,'unixepoch','localtime') as Time, SELECT datetime(timestamp+978307200,'unixepoch','localtime') as Time, Latitude, Longitude, 'WiFi' as Source Latitude, Longitude, 'WiFi' as Source FROM WifLocation FROM WifLocation UNION UNION SELECT datetime(timestamp+978307200,'unixepoch','localtime') as Time, SELECT datetime(timestamp+978307200,'unixepoch','localtime') as Time, Latitude, Longitude, 'Cell' as Source Latitude, Longitude, 'Cell' as Source FROM CellLocation FROM CellLocation ORDER BY 1; ORDER BY 1;

Android Android utilizza SQLite su molteplici applicazioni. Ad esempio: contacts.db accounts.db im.db media.db mms.db sms.db telephony.db settings.db maps.db...

Android SMS SMS SELECT datetime(date/1000,'unixepoch','localtime') as data, address as indirizzo, SELECT datetime(date/1000,'unixepoch','localtime') as data, address as indirizzo, subject as soggetto, body as testo subject as soggetto, body as testo FROM sms FROM sms ORDER BY date desc ORDER BY date desc Statistica chiamate Statistica chiamate SELECT number as numero, number_key as chiave, SELECT number as numero, number_key as chiave, count(*) as numero, sum(duration) as durata, count(*) as numero, sum(duration) as durata, min(datetime(date/1000,'unixepoch','localtime')) as prima_chiamata, min(datetime(date/1000,'unixepoch','localtime')) as prima_chiamata, max(datetime(date/1000,'unixepoch','localtime')) as ultima_chiamata max(datetime(date/1000,'unixepoch','localtime')) as ultima_chiamata FROM calls FROM calls GROUP BY number, number_key GROUP BY number, number_key ORDER BY 3 DESC ORDER BY 3 DESC LIMIT 20 LIMIT 20

Qualcosa in piu'... Agendo direttamente in SQL possono essere evidenziate in modo molto semplice tutte le cancellazioni logiche (eg. iphone SMS). I dispositivi Mobile usano una versione di SQLite compilata senza l'autovacuum ==> e' possibile recuperare anche i dati cancellati analizzando la struttura binaria del file di database. Vi sono alcuni programmi (a pagamento) che consentono l'analisi dei record cancellati. In ogni caso la struttura di un database SQLite e' completamente documentata ed e' relativamente semplice da analizzare in binario con un hexdump o simili...

Varie ed eventuali Domande e risposte Link utili http://www.sqlite.org/ Sito ufficiale SQLite http://www.xenialab.it/meo/web/index1.htm Non ufficiale ma c'e' molta documentazione... in italiano! by meo bogliolo