Cómo realizar una adquisición física en Android con “dd”, incluso cuando no tienes tarjeta SD

Cómo realizar una adquisición física en Android con “dd”, incluso cuando no tienes tarjeta SD

Supongo que si alguna vez os habéis encontrado con la necesidad de realizar una adquisición física de un dispositivo Android para crear una imagen completa del mismo, os habréis encontrado con problemas similares a los que yo me he encontrado en un caso real. Para una prueba pericial judicial, en la que he tenido que analizar un teléfono Android, me he encontrado esta necesidad, y por eso quería escribirla para que a alguien más le pueda servir.

En este post quiero indicaros cómo realizarlo de forma “manual”. Lógicamente, podríamos utilizar una Celebrite UFED o algún otro software comercial que incluya la funcionalidad para realizar la adquisición física, pero no es lo que quiero abordar en este caso.

En primer lugar recordaros, aunque seguro que esto es algo que todos tenéis claro, que para poder realizar una adquisición física en Android es imprescindible “rootear” el teléfono. No hay otra forma. Sin el teléfono “rooteado” lo único que puedes hacer es extraer la información de una copia de seguridad estándar, los datos de los providers “básicos” (llamadas, sms, etc…) y la información disponible en la SD o en la parte pública de la memoria interna del teléfono.

Hago un pequeño inciso en esto, y sin ánimo de generar controversia (quizá esto de para otro post), pero yo soy partidario siempre, en el análisis forense, de aplicar siempre el método más sencillo y proporcionado, según las pruebas que necesites extraer y también según el objetivo y motivación del informe pericial. Por ejemplo, para informes que exclusivamente deben reflejar los mensajes de Whatsapp de un teléfono, prefiero siempre si es posible extraer las BBDD sqlite de Whatsapp mediante un downgrade (utilizando Whatsapp Extractor, por ejemplo), dado que es un método que no necesita “rootear” el teléfono, y por tanto, es mucho menos agresivo para el dispositivo. Yo prefiero esto a realizar una adquisición física completa, dado que me parece que es igualmente fiable de cara a su capacidad probatoria.

Recordemos siempre que las pruebas no deben alterarse, pero los que hemos analizado alguna vez algún móvil sabemos que no se pueden aplicar de forma directa los mismos principios que podemos aplicar, por ejemplo, al analizar un PC.

Bueno, perdonad el “off topic”. Sigo con lo que estábamos.

Tenemos que “rootear” el teléfono. ¿Qué utilizamos? Hay muchas opciones pero siempre es importante intentar utilizar una herramienta con la que tengamos el menor riesgo posible (no queremos estropear el teléfono). Os puedo recomendar “KingRoot”. Yo la utilizo desde el PC (previa habilitación de la depuración USB en el dispositivo) y suele dar muy buenos resultados en la mayoría de los teléfonos.

Para comprobar que el proceso ha realizado correctamente, os recomiendo abrir un shell utilizando “adb” (comando adb shell), y una vez abierto, podéis utilizar el comando “su” para obtener la shell como “root”, y de ahí acceder a la carpeta /data/data (con un ls -la, por ejemplo)  para verificar que podéis acceder a los ficheros protegidos del sistema y que el proceso de “rooteo” ha sido satisfactorio.

Una vez realizado este primer paso, la herramienta que utilizaremos para realizar nuestra adquisición física será la archiconocida “dd”. A continuación os indico los parámetros básicos que podemos utilizar en estos casos:

dd if=/dev/block/mmcblk0 of=/sdcard/imagenfisica.img bs=4096 conv=notrunc,noerror,sync
  • if: Indicamos la ruta al orígen de la copia.
  • of: Indicamos la ruta al destino de la copia. Habitualmente indicaremos un fichero con extensión .img o .dd
  • bs: Tamaño del bloque de copia que vamos a utilizar.
  • conv: Esta opción nos permite especificar parámetros de conversión entre origen y destino:
    • notrunc: El fichero de salida no será truncado.
    • noerror: No parar el proceso aunque ocurra algún error.
    • sync: Si hemos seleccionado noerror, esta opción escribe\x00 para los bloques erroneos. Esto es importante para mantener los offsets de los ficheros en la imágen.

En el caso de un móvil Android, si queremos una copia completa del dispositivo, el origen de la copia lo encontraremos en /dev/block/mmcblk0. Ojo, esto no siempre es así y es recomendable revisar las particiones disponibles utilizando el comando cat /proc/partitions

Realmente esto es todo lo que necesitaremos si nuestro dispositivo tiene una tarjeta SD con espacio suficiente para almacenar la imagen, que como imaginarás tendrá el mismo tamaño que la memoria disponible en el dispositivo. Pero habrá casos en los que no tendremos ranura para tarjeta SD. ¿Un móvil sin posibilidad de tarjeta SD? Si, en serio. Existen en el mercado muchos móviles, habitualmente de bajo coste, que prescinden de esta opción.

¿Y que hacemos entonces? La única posibilidad que tenemos es guardar la imagen directamente en el equipo en el que estemos conectando el teléfono para realizar el análisis forense. Para ello, necesitaremos algo que nos permita que el resultado del comando “dd” se pueda guardar fuera del teléfono móvil. Para ello tenemos una herramienta que nos sirve de gran ayuda: Netcat

Creo que Wikipedia explica muy bien para qué sirve y cómo funciona Netcat:

Netcat es una herramienta de red que permite a través de intérprete de comandos y con una sintaxis sencilla abrir puertos TCP/UDP en un HOST (quedando netcat a la escucha), asociar una shell a un puerto en concreto (para conectarse por ejemplo a MS-DOS o al intérprete bash de Linux remotamente) y forzar conexiones UDP/TCP (útil por ejemplo para realizar rastreos de puertos o realizar transferencias de archivos bit a bit entre dos equipos)”

Aquí debemos hacer una pequeña diferenciación en función de si el equipo que estamos utilizando para el análisis forense es Linux o Windows, dado que si bien Netcat lo tendremos instalado en la mayoría de las distribuciones, en Windows habitualmente no lo tendréis, por lo que es necesario que lo descarguéis (https://joncraton.org/blog/46/netcat-for-windows/)

Pero también necesitaremos que el comando Netcat esté instalado en el movil para poder hacer la copia. En este caso, si es un dispositivo que no había sido “rooteado” previamente, es seguro que no tendréis dicho comando. Para instalarlo os doy dos posibilidades: Descargarlo desde http://sourceforge.net/projects/androidforensics-netcat/files/ y copiarlo al dispositivo mediante “adb push” o bien instalar la suite de herramientas avanzada “BusyBox” en el teléfono, que además de incluir Netcat, os instalará muchas otras de las herramientas que habitualmente tenemos en cualquier distribución Linux, pero que Android no nos trae instaladas por defecto.

Una vez estemos seguros que tenemos Netcat en ambos dispositivos, necesitamos realizar 3 acciones:

  1. Mediante el comando “adb forward tcp:8000 tcp:8000” haremos un port-forwarding de tal forma que todo lo que llegue al puerto 8000 del móvil sea transferido al puerto 8000 del equipo forense.
  2. En el dispositivo móvil, ejecutaremos: dd if=/dev/block/mmcblk0 bs=512 conv=notrunc,noerror,sync | nc –l –p 8000 , para lanzar la copia del dispositivo y enviar los bloques de salida al puerto 8000
  3. En el equipo forense, ejecutaremos: nc 127.0.0.1 8000 > imagenmovil.img

 

El proceso comenzará, pero hay que tener en cuenta que no dará ningún mensaje de aviso o progreso. Simplemente si todo va correctamente, las llamadas finalizarán y el fichero aparecerá ya creado en el equipo forense. A partir de ahí, podéis generarle sus correspondientes hash y/o analizar la imágen con el software forense de vuestro gusto.

Espero que este artículo os haya resultado interesante y si tenéis cualquier pregunta, comentario o sugerencia, estoy a vuestra disposición por este blog o por Twitter @peritotec

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.