lunes, 12 de noviembre de 2012

[Hack] Android Facebook Disclosure & Como robar una cuenta

Hace tiempo que venia pensando como podría ser el funcionamiento de la aplicación móvil de facebook. Me intrigaba como la aplicación obtenía los datos de una consulta web. Es decir, el navegador envía una consulta y el servidor devuelve una respuesta con el contenido del archivo html que luego interpreta y muestra. Básicamente siempre se envía una consulta, quizá algo diferente en AJAX pero internamente es el mismo proceso. Entonces ¿Como la aplicación recibía la información y la almacena para luego mostrarla? no me refiero a la conexión ya que es cuestión de sockets, sino al almacenamiento de cookies, datos etc.

Basándome que android tiene una ruta general para almacenar los datos del móvil, y que utiliza SQLite (un psudomotor de base de datos con estructura, metadatos y datos en un solo archivo)  para almacenar toda la información, decidí  realizar el mismo procedimiento que en la entrada de whatsapp http://gonzac-studios.blogspot.com.ar/2012/03/hack-obtener-mensajes-de-whatsapp.html :

Utilizo el Android Terminal Emulator para abrir una terminal o consola y así acceder a los directorios del sistema y usatilizar algunos comandos de linux.
A diferencia de con whatsapp, los archivos base de datos de facebook tienen restringido copiar o mover los archivos. Es decir que si nos posicionamos en la carpeta donde se encuentran los archivos para copiarlos o al revés, posicionados desde la tarjeta de memoria. No se nos permitirá aunque seamos superusuarios.

La primera falla está en que el sistema no bloquea la manipulación de la carpeta, entonces uno puede copiar la carpeta con sus archivos en su interior. Ya sea utilizando copia recursiva, o copiando solo la carpeta base de datos de facebook.
Como no sabia exactamente donde buscar, lo que hice en una primer instancia fue utilizar copiado recursivo donde antiguamente encontré la base de datos de whatsapp. De esta forma copie todos los datos de la carpeta "/data/data" para luego analizar con mas detenimiento cada carpeta.


Dentro de esta carpeta existe una llamada "com.facebook.katana" y dentro de la misma otra llamada "databases". En esta ultima el segundo fallo; facebook no encripta los datos.
¿Que se guarda en ellas? Dentro hay 3 archivos, el mas interesante es el "fb.db". Al igual que con whatsapp, utilizo el SQLite Manager para abrir la base de datos y ¡Eureka!. 
La aplicación facebook hace una consulta al servidor, en primer lugar enviando el usuario y la contraseña para luego obtener una sesión y todos los datos que necesita para visualizar. Es decir, el servidor envía las notificaciones, noticias, mensajes, información de contactos, etc. Las almacena y guarda para luego tener un fácil acceso a ellas. 
-Datos de amigos de facebook

-Información de amigos, para agregar a la agenda

-Historial de chat

-Contactos con los que se ha conversado

Un usuario o aplicación maliciosa que tenga acceso al móvil  roba esta base de datos y puede tener acceso a la información que se registró en el momento. Si bien es peligroso por la cantidad de información, existe un fallo gravisimo en la forma en que se conecta.

¿Como robar una cuenta de facebook?
El tercer fallo y el mas grave, es que para mantener la sesión iniciada en el móvil, la aplicación almacena las credenciales del usuario.


 Obviamente no se revela la contraseña, pero esta no es necesaria para iniciar sesión. La base de datos puede ser usada para ser leída por la aplicación móvil como una sesión ya iniciada. Veamos un ejemplo:
-En primer lugar no tiene que haber ninguna sesion iniciada
-En la tarjeta de memoria con la base de datos "fb.db" que un atacante robó previamente de un teléfono móvil. Utiliza el Android Terminal Emulator, copiando el archivo a la carpeta de facebook y forzando su reemplazo con el comando 
cp fb.db /data/data/com.facebook.katana/databases/fb.db -f
-Ahora al abrir nuevamente la aplicación, entrará directamente a la cuenta de facebook robada

---------------
Quizás con un poco de estudio, se pueda crear una aplicación para robar los datos, generar una credencial valida o romper el sistema de generación de identificaciones. Digo... son solo unas ideas.