Te pique lo que te pique, analiza un SQLite

Post on 13-Jun-2015

1.547 views 4 download

description

RootedCon

Transcript of Te pique lo que te pique, analiza un SQLite

Te pique lo que te pique, analiza un SQLite

Alejandro Ramos

www.SecurityByDefault.com

INTRODUCCIÓN

• Base de datos relacional (RDBMS) open source

• Creado en el año 2000 por Dwayne Richard Hipp

• No funciona en el modo tradicional cliente/servidor. Es un único fichero embebido.

• Desarrollado para optimizar espacio.

• Ampliamente usado en móviles, también en aplicaciones como Firefox, Chrome, Adobe Air, Dropbox o Skype

Desde una perspectiva forense

• Existen Páginas libres / espacio libre en páginas.

• Rollback journal.

– Cambios directamente en el fichero original.

– Copia del original en fichero “-journal”

– Se aplican los cambios si todo es correcto.

• Versión 3.7.0 > Write Ahead Log (WAL)

– Invierte el proceso.

– Cambios en WAL “-wal”, original no se modifica

• VACUUM: recompone la base de datos == “desfragmenta”.

Cabecera

100 primeros bytes del fichero. Los más relevantes:

• Los datos se almacenan en una estructura denominada “B-Tree” (común en bbdd y sistemas de ficheros)

• Se componen de:

– Páginas libres: hojas y troncales.

– Páginas de tablas: hojas e interiores.

– Páginas de índices: hojas e interiores.

– Páginas de Overflow

Estructura del SQLite

Páginas libres

• Páginas que conteníaninformación de la basede datos y han sidomarcadas como libres.Por ej, tras un DELETE.

• Gran parte de losdatos permanece enel fichero

• Identifican el número de celdas en la página

• Donde comienza la primera celda.

Espacio libre = desde el fin de cabecera hasta el comienzo de la primera celda.

Cabecera de las páginas

Celdas en páginas• Cada celda representa un registro de una tabla

• Una celda puede no entrar en una sola página, produciendo una nueva página “overflow”.

• En las páginas libres, las celdas están intactas.

• En el resto, las celdas eliminadas pierden el tamaño del payload y cabecera.

– No es posible saber donde empieza y acaba el dato de forma estructurada.

… En definitiva …

Una base de datos SQLite mantiene los datos sin eliminar (siempre y cuando no se haga un vacuum) en:

– Páginas de tabla e índices: espacio libre entre la cabecera y el comienzo de celdas.

– También el espacio libre entre celdas, si se ha modificado y reducido el tamaño de un celda.

– Páginas libres y troncales: prácticamente enteras menos la cabecera.

– Páginas Overflow: desde que termina la celda hasta el final.

Ejemplo

Dumplite: consolidated.dbRegistros de Freelist

dumplite: Skype (main.db)Dump Hexa

Recover Messages: WhatsAppPara el usuario final

www.recovermessages.com

GRACIAS

Alejandro Ramos – SecurityByDefault.com

Twitter: @aramosf