Pages - Menu

lunes, 29 de septiembre de 2014

Android Forensics: Descubriendo Cuentas de Usuario

Resulta que, como ya comenté en post anteriores, el principio de Locard sigue estando presente en la informática forense, el cual viene a decir que cuando dos objetos entran en contacto siempre se queda residuos (dicho bástamente ;) )

El caso es que si lo aplicamos a la informática forense y, partiendo de esa base, hay mucha probabilidad de encontrar evidencias cuando analicemos un dispositivo.

En este post vengo a mostraros CÓMO es posible identificar las cuentas de usuarios que han existido en un terminal (al menos en el mio) tras hacer una restauración de fábrica.

En ocasiones, y en los terminales Android, es muy común el hacer el típio "Resturar de fábrica" que básicamente lo que estamos haciendo es un Wipe al sistema, borrando todos los datos de usuario, cache de programas, aplicaciones, etc...

Dicho esto, recientemente lo hice en mi terminal, algo antiguo si, pero funcional, hablo de una Samsung Galaxy S GT i9000 el cual está rooteado y con una rom modificadad, CynanogenMod para ser más exacto.

Casi todos la información relativa al usuario y aplicaciones se almacenan en la partición de "Datos". Cuando hacemos un "Retore Default" o "Retaurar de fábrica" el proceso es bastante rápido, lo que me llevo a pensar que en algún lado tendría que hacer una "ligera" copia de los datos de usuario.

Al final, Android es un Unix y como bien sabéis el almacenamiento físico está unido al sistema a través de unos ficheros especiales (controladores) llamados nodos (device nodes). 
Estos nodos nos proporcionan acceso al dispositivo en bruto y a sus particiones, por lo tanto si un nodo de dispositivo es direccionado (cargado o montado por el sistema) nos lleva a pensar que todo el contenido del mismo es accesible por software (en este caso ADB), eso si como root, de ahí la importancia de tener el dispositivo "rooteado".

Podría estar hablando largo y tendido del tema de nodos, pero no es el caso, así que no me andaré más por las ramas.

El escenario es: Dispositivo Android recien restaurado de fábrica. Terminal rooteado y con acceso al mismo por adb.

El primer paso, al conectar el terminal al equipo es comprobar su conectividad, para ello:

$adb devices
List of devices attached
393320C3387D00EC    device


Observamos que el terminal está montado y es accesible por adb.
Lo siguiente que debemos hacer, y como he comentado antes, es acceder al mismo como usuario "root"

$adb root
$adb shell >> abrimos una sesión de terminal en el dispositivo

Ya tenemos nuestra consola abierta.
Vamos a ver qué particiones tenemos montado en el terminal, aqui he de decir que dependerá si nuestro dispositivo está basado en MTD (Memory Technology Device) o en EMMC (Embedded Multimedia Card), las particiones están montadas en /proc/mtd o /proc/emmc/ dependiendo de lo anterior:

root@GT-I9000:/dev/block # cat /proc/mtd                                    
dev:    size   erasesize  name
mtd0: 00780000 00040000 "boot"
mtd1: 00780000 00040000 "recovery"
mtd2: 1a600000 00040000 "datadata"
mtd3: 01180000 00040000 "cache"
mtd4: 00c80000 00040000 "efs"
mtd5: 01000000 00040000 "radio"
mtd6: 00b00000 00040000 "reservoir"


Mi Terminal está basado en MTD, así que me queda comprobar qué tipo de particiones corresponde a qué:

root@GT-I9000:/dev/block # cat /proc/partitions                             
major minor  #blocks  name

  31        0       7680 mtdblock0
  31        1       7680 mtdblock1
  31        2     432128 mtdblock2
  31        3      17920 mtdblock3
  31        4      12800 mtdblock4
  31        5      16384 mtdblock5
  31        6      11264 mtdblock6
 253        0      72804 zram0
 179        0    8028160 mmcblk0
 179        1    6062048 mmcblk0p1
 179        2    1966080 mmcblk0p2
 179        8   15622144 mmcblk1
 179        9   15618048 mmcblk1p1
 254        0     614400 dm-0
 254        1    1347584 dm-1


Llegados a este punto seguro que estáis diciendo, "UFFFFF no me entero de ná ;)", es fácil, lo que hemos hecho es preguntar qué particiones está montando el sistema al arrancar (/proc/mtd/) y luego le pregunto qué nodo es el que ha montado (/proc/partitions), mejor así no?? :D

Aqui es donde entra un poco la picaresca del analista, por decirlo de alguna forma, si somos observadores vemos que mtd1 > monta la partición de recovery y este a su vez monta el mtdblock1 pero... ¡¡¡ El terminal tiene una tarjeta SD !!!!!
Sin pegas, también está montada como mmcblk0p1

Menudo rollo no? La de vueltas que estoy dando, y ahora cuál analizo???

Todo va a depender un poco de cómo esté funcionando el almacenamiento y salvaguarda de los datos en el terminal, pero si que tenemos en claro que el recovery ha podido usar mtdblock1 como mmcblk0p1

Ya tenemos "lo gordo" localizado, ahora nos queda buscar información del usuario/s que han existido. Todos sabemos que cualquier terminal con SO Android ha de tener una cuenta de gmail
Así que vamos a buscarla ;)

$cd /dev/block
$strings mtdblock1 | egrep -o 'account="?.{1,25}@gmail.com"?'
 
Pues no me ha devuelto nada, vamos a probar con la MMC
 
root@GT-I9000:/dev/block # strings mmcblk0p1 | egrep -o 'account="?.{1,25}@gmail.com"?'>
account=*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com

Voila!!!! 
YA SABEMOS QUÉ USUARIO HA USADO SU CUENTA DE GMAIL EN ESTE TERMINAL

Pero me surge una pregunta, y si cambio la búsqueda y en vez de account busco password?

Os lo dejo para vosotros :)

No hay comentarios:

Publicar un comentario