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