Executable Is a SQLite Database

Código y bases de datos en una pantalla de computadora
Código y bases de datos en una pantalla de computadora

Qué significa realmente "Executable Is a SQLite Database"

Hace poco estaba explorando algunos binarios del sistema y me sorprendió descubrir que varios archivos ejecutables contienen bases de datos SQLite completamente funcionales. No es una abstracción ni una capa superior — SQLite está integrado directamente en el ejecutable.

Cómo funciona

SQLite es una biblioteca de base de datos embebida que se puede ligar en cualquier programa. Cuando un compilador o empaquetador incluye los archivos de SQLite en un ejecutable, el resultado es un archivo que tanto tiene código máquina como una base de datos completa con tablas, índices y datos. Puedes acceder a la base de datos usando la herramienta `sqlite3` y el archivo ejecutable mismo.

Ejemplo práctico

Supongamos que tienes un ejecutable llamado `app`. Puedes intentar extraer su componente SQLite así:

sqlite3 app ".tables"

Si el ejecutable contiene una base de datos SQLite, este comando listará las tablas incrustadas. Puedes luego consultar datos específicos con consultas SQL normales:

sqlite3 app "SELECT * FROM metadata;"

Implicaciones de seguridad

Este descubrimiento tiene importantes implicaciones de seguridad. Los atacantes podrían ocultar payloads maliciosos dentro de ejecutables legítimos, aprovechando el formato SQLite para almacenar código ofuscado o datos de exfiltración. Por otro lado, los investigadores de seguridad pueden usar esta técnica para extraer indicadores de compromiso de muestras de malware sin necesidad de desensamblar el código completo.

Casos de uso legítimos

Los desarrolladores pueden incrustar metadatos, licencias de configuración o datos de inicialización directamente en los ejecutables, eliminando la necesidad de archivos de configuración externos. Esto es particularmente útil para software distribuido de una sola archivo (single-file apps) donde la portabilidad es crítica.

Cómo detectar si un ejecutable tiene SQLite

La forma más fácil de comprobar es buscar la firma de SQLite (la cadena de bytes "SQLite format 3") dentro del archivo binario:

strings app | grep -i "SQLite format"

Si encuentra esta cadena, el ejecutable contiene una base de datos SQLite embebida.

Conclusión

La próxima vez que esté trabajando con un ejecutable grande, tómese un momento para inspeccionar su estructura interna. Podría descubrir datos valiosos ocultos a la vista, ya sea para investigación de seguridad, recuperación de datos o simplemente por curiosidad. La frontière entre código ejecutable y base de datos es más borrosa de lo que pensábamos.

¿Has encontrado alguna vez bases de datos SQLite ocultas en ejecutables? ¡Comparte tu experiencia en los comentarios!