Incident Response, Security and Forensics"

.

miércoles, 16 de septiembre de 2009

Análisis forenses a dispositivos ANDROID (I)


Hola lectores,

Vamos a ver en los siguientes post como realizar un análisis forense a un dispositivo HTC DREAM con ANDROID

¿QUE ES ANDROID?


Android
es un sistema operativo para dispositivos móviles basado en el kernel 6.2 de Linux. Actualmente se ha convertido en una plataforma que permite el desarrollo de aplicaciones por terceros a través de la SDK que proporciona Google de forma gratuita.

La mayoría del código fuente de Android ha sido publicado bajo licencia de Software Apache.

Las características internas que se compone son:

  • Framework de aplicaciones: permite reuso y reemplazo de componentes.
  • Máquina virtual Dalvik, optimizada para dispositivos móviles.
  • Navegador integrado Webkit.
  • SQLite como base de datos
En cuanto a soporte a medios destacaría lo siguiente:
  • Soporte para audio MPEG4, H.264, MP3, OGG, AAC, AMR, JPG, PNG, GIF
  • Telefonía GSM
  • Bluetooth, EDGE, 3G, y WiFi (dependiente del hardware)
  • Cámara,GPS, brújula y acelerómetro
  • Pantalla táctil
  • Market, aplicación que permite que los desarrolladores pongan sus aplicaciones, gratuitas o de pago, en el mercado a través de esta aplicación accesible desde todos los teléfonos con Android.

Además de esto, puedes acceder desde tu móvil programando diferentes utilidades y herramientas.

NOTA: El Kernel de Linux viene sin acceso al root, es decir no podremos instalar (a priorí) ninguna aplicación ni manejar ficheros protegidos por el sistema.

El Móvil que vamos a análizar es un HTC DREAM como el de la siguiente imágen:

ACCESO A DATOS

Para acceder al dispositivo desde Windows o Linux hay que seguir los siguientes pasos, ya que no es trivial ni sencillo, es decir, no es como nos tienen acostumbrados al Plug & Play.

Drivers en Windows:

1.- Descargamos y descomprimimos el SDK desde aquí, ya que para Windows se encuentra el controlador dentro de la carpeta 'tools' 'USB_i32'

2.- Una vez tengamos el driver, conectamos el teléfono al ordenador por USB y cuando desde el teléfono nos pregunte si queremos activar el USB le decimos que sí.

3.- Windows nos avisará de que ha encontrado un nuevo Hardware y que deberemos instalar sus drivers. Cuando nos pregunte si queremos usar Windows Update para encontrar el controlador adecuado debemos decir No porque sencillamente no lo encontrará y decir que deseamos instalar el controlador manualmente.

4.- Cuando hayamos hecho esto nos dirigimos hacia la carpeta donde se encuentra el driver que hemos descargado y descomprimido. Una vez seleccionado reiniciamos el ordenador

Drivers en Linux:

Inicia como root los siguientes pasos:

1.- Crea el archivo /etc/udev/rules.d/50-android.rules con el siguiente comando:

touch /etc/udev/rules.d/50-android.rules

2.- Editamos el archivo con el siguiente comando:

"vi /etc/udev/rules.d/50-android.rules” y añadimos a la primera linea lo siguiente:

SUBSYSTEM==”usb”, SYSFS{idVendor}==”0bb4″, MODE=”0666″

Dependiendo de la distribución habría que seguir los mismos pasos y quizas no funcione. Si esto es así
habría que poner la siguiente:

SUBSYSTEM==”usb_device”, SYSFS{idVendor}==”0bb4″, MODE=”0666″

3.- Una vez hecho esto ya solo nos quedará asignarle los permisos necesarios con el siguiente comando:

chmod a+rx /etc/udev/rules.d/50-android.rules

4.- Descarga el SDK desde aquí.

Accediendo a los datos en modo usuario

El SDK es una de las herramientas más importantes para el acceso a datos ya que nos permite acceder por USB al dispositivo, siempre y cuando tengamos montados los controladores.

Dentro del SDK hay una carpeta llamada 'tools' con los comandos más importantes. En nuestro análisis vamos a utilizar algunos.

El funcionamiento es similar a Windows que Linux, veamos algunas pantallas y sus comandos asociados.

adb devices: Muestra los dispositivos conectados, en este caso vemos HT947NG01526



adb bugreport: Muestra por pantalla el informe de errores. Importante para el análisis. En este caso lo desvío a fichero para su posterior análisis



adb Shell: Permite actuar con el sistema de ficheros



Cabe pensar que al tener un kernel basado en Linux, todo va a ser mas sencillo, se dispara la imaginación y ya veo que conectandome al dispositivo voy a poner un servidor ssh, ftp e inclusive un netcat con objeto de utilizar el comando dd para realizar una copia bit a bit del sistema operativo del móvil.

Nada más lejos de la realidad, veamos como en la siguiente pantalla, no me deja hacer prácticamente nada de nada. Por su puesto cambie de ruta sin conseguir el objetivo propuesto



Tras esto decido ver el sistema de ficheros y los puntos de montaje



Veo que /dev/block/mtdblock3 (5 y4) contienen el sistema de ficheros yaffs2 y realiza los montajes del sistema y datos, mientras que mmcblk0p1 se refiere a la tarjeta SD CARD de alamacenamiento de datos. Cual fué la sorpresa al ver que no me permite escibir ni utilizar el montaje de SDCARD.

Sigamos con el análisis, vamos a ver como establece el sistema operativo las unidades.



Es decir crea en /dev/mtd estos dispositivos, intento sin exito el comando 'remount' con los parámetros de lectura y escritura. Nada de nada.

Desesperado busco por los distintos foros de Google developers, me encuentro con una entrada que indican que existe un bug que permite hacerte root en los kernel inferiores a los 2.6.30, una vez comprobado satisfactoriamente la versión en el móvil HTC (2.6.25-890662e5 - herbert@and18-2) veo una posibilidad para obtener una imágen forense.

CYANOGEN

Una de las cosas buenas que tiene Android es que al ser Linux es algo más facil la manipulación del boot loader.

Como sabeis el objetivo de Boot loader es cargar parte del nucleo (kernel) del sistema operativo en memoria y ejecutarlo. A partir de cargarse, el Bootloader toma el control y se encarga de cargar el resto del sistema operativo.

Bien pues esto es lo que han hecho los chicos del proyecto de CYANOGEN crear un boot loader modificado que aprovecha el bug del kernel para convertirse en root.

Actualmente las imágenes que se han liberado, son tan buenas que permiten arrancar un sistema boot con multiples aplicaciones que podemos utilizar antes del arranque del sistema operativo.

Entre las aplicaciones que se utilizan són:

  • Backup-Restore de todo el dispositivo utilizando Nandroid 2.2
  • E2FSProgs con soporte de ficheros ext4
  • GNU Parted (Versión en línea de comandos)
  • FSCK para sistemas de ficheros EXT
  • Varios scripts, como upgrade_fs (convertidor a ext3), Establecimiento de permisos, etc
  • Kernel mejorado Cyanogen
  • Acceso en modo root a una consola de comandos

Por lo tanto ya tenemos una via de acceso al dispositivo. Vamos a cambiar el boot loader por uno de CYANOGEN.

¡¡EMPEZAMOS!!

Primero vamos a poner el móvil HTC en modo FASTBOOT. Para ello se consigue pulsando los botones de apagado + botón cámara; El dispositivo se iniciará en este modo (ver los droides haciendo skate-board ;-))



Fastboot es el protocolo utilizado para actualizar el sistema de archivos Flash en los móviles Android desde un PC a través de cable USB. Támbien permite utilizar imágenes de particiones sin firmar.

Si utilizamos Windows disponemos dentro de la carpeta 'tools'
del SDK el binario fastboot compilado, en el caso de Linux no viene en el SDK, pero podemos descargarnos la utilidad compilada desde aquí.

A continuación me descargo el bootloader modificado desde aquí, o bien desde la página de Google developers . Una vez realizada estas opciones procedo a ejecutar el comando fastboot tal y como se ve en la pantalla siguiente:



Cuando aparece en la consola linux el mensaje 'OKAY' , el móvil se reinicia con el nuevo boot y aparece la siguiente pantalla con sus utilidades.



El primer paso que vamos a utilizar para la obtención del dispositivo es utilizando NANDROID, ya que genera las imágenes necesarias para el posterior análisis forense.



Esta imágen la realiza copiando los resultados a la tarjeta SDCARD para su posterior montaje desde el puesto Windows o Linux.

Una vez realizado el Backup, procedemos a reiniciar el dispositivo (reboot en el menú) en el cual el móvil volverá a su estado original con la boot loader que tenia anteriormente.

Tras estos pasos, en el móvil activamos la conexión USB para acceder desde Windows o Linux a los datos de la tarjeta.



Ahora desde nuestro PC tenemos acceso a los datos creados por la aplicación NANDROID



Como podemos apreciar disponemos de unos ficheros 'img' que contienen toda la información del móvil.

En el siguiente post analizaremos estos ficheros para obtener información como SMS's, llamadas, números de teléfono, etc.

8 comentarios:

Este comentario ha sido eliminado por el autor.

Hola Pedro:

Un post muy interesante. Sin ser un gran conocedor de la investigación forense, me surgen un par de dudas:

- Entiendo que la instalación del boot loader de CYANOGEN modifica de manera permanente el dispositivo, y que posteriormente lo vuelve a dejar en el mismo estado en que estaba deshaciendo los cambios. "Una vez realizado el Backup, procedemos a reiniciar el dispositivo (reboot en el menú) en el cual el móvil volverá a su estado original con la boot loader que tenia anteriormente." ¿Es así, o la modificación solo permanece hasta el siguiente reboot (en RAM, por ejemplo)? ¿En caso que sea permanente, no compromete eso el análisis?

- ¿No hay forma de extraer una imagen del dispositivo, usando la funcionalidad del FastBoot, sin tener que instalar nada? Entiendo que el modo FastBoot debe permitir acceso a la Flash para poder realizar la actualización del boot loader. En otros dispositivos, por ejemplo las antiguas Palm (con Palm OS) se podía hacer esto entrando en un modo que permitía restaurar el firmware incluso aunque hubiese fallado una anterior actualización del mismo.

Grácias y un saludo,
Xavi

Mmm yo tenía entendido que el Cyanogen no aprovecha el bug del kernel siquiera... al menos no en el proceso que has descrito tu para flashear el boot loader.

Lo que sí lo utiliza seguro es la utilidad FlashRec, que sirve básicamente para flashear el telefono desde una aplicación Android usando ese exploit.

En mi caso yo modifiqué la aplicación para ejecutar un shell script en lugar de flashear la imagen de recuperación. En ese shell script simplemente hice una copia de /system/bin/sh a /system/bin/rootsh y le di setuid root, y luego desde 'adb shell' ejecuto rootsh y ya estoy dentro como root.

Simplemente era eso, aportar una alternativa más :)

Quien tuviera un cacharrito de esos para destriparlo ...

Muy interesante el tema, Pedro, y muy peligroso el amigo TuXeD, como siempre ;)

Saludos

Xavier:Tengo entendido que La modificación solo permanece en RAM, aunque tengo mis dudas,ya que estamos clonando el dispositivo por Hardware y la integridad (hash) en algunos casos es diferente.Por ejemplo vemos que cambia de un HTC Dream de telefónica a un HTC de Vodafone. Ya te diré en cuanto sepamos algo.

TuXed: En esto hay un lío tremendo y nadie de los que estoy en contacto se aclara. He hablado con 'TheDudeOfLife' miembro senior del XDA-Developers y como indicación me comenta que la última versión del CYANOGEN si aprovecha este bug. Efectivamente como tu bien dices FlashRec lo hace de maravillas. Gracias por tu aportación.

Neofito: Que venga de ti que eres un experto es todo un placer, espero que pronto te podamos leer con mas frecuencia.

Gracias a todos ;-)

@Pedro dijo: Que venga de ti que eres un experto es todo un placer

Ala!! Solo un aficionado autodidacta, con muchas carencias pero tambien mucha ilusion.

@Pedro dijo: espero que pronto te podamos leer con mas frecuencia.

Eso mismo espero yo :(

Saludos

Muy interesante el tema de Android :), ya lo estaba esperando. Si necesitas probar lo mismo con un HTC Hero pégame un toque que ya lo tengo en mis manos!!! O sino todavía mejor, lo probaré yo mismo :)

Un saludo

Hola amigos y ¿para un htc Desire S?,
gracias,
Un saludo.