En publicaciones pasadas vimos cómo podemos analizar la memoria volátil del equipo con LiME Forensics y Volatility para obtener las estructuras del sistema y aplicaciones en memoria y, consecuentemente, la información que estas guardan. Sin embargo, existen otras maneras más sencillas y rápidas para capturar los datos presentes en la memoria del dispositivo.

Recolección de datos en memoria

Una opción para la fácil recolección de datos consiste en la utilización del Android Debug Bridge (adb) para listar información referida a los procesos, conexiones de red, archivos de registro, etcétera. A través del comando adb shell <ps|netstat|logcat|backup|dumpsys>, el analista puede acceder la shell del equipo para volcar datos desde los archivos del sistema.

image-1

image-2

También es posible ver las diferentes asignaciones de memoria que afectan a una aplicación determinada, retornando información tanto de memoria Dalvik como de ART.

image-3

Una alternativa para la recolección de este tipo de datos es la utilización del Dalvik Debugging Monitor Server (DDMS) mediante el Android Device Monitor. Esta herramienta puede ser inicializada ejecutando el archivo <ruta_sdk>/tools/monitor.

Con ella podemos ver actualizaciones de la pila de memoria, causar la ejecución del GC, o realizar el seguimiento de las asignaciones de memoria entre los diferentes objetos activos. Igualmente podremos acceder a los mensajes generados por la aplicación y el sistema a través de LogCat, a las estadísticas de uso de red y al sistema de archivos presente en el dispositivo.

image-4

Un método simple para volcar el contenido de la memoria de un proceso en ejecución utilizando DDMS es crear un archivo HPROF. Para ello, solo necesitamos seleccionar el proceso y hacer clic en la opción “DUMP HPROF file”. De ser necesario, la creación de este archivo puede ser programada desde la aplicación mediante el método dumpHprofData().

image-5

Para analizar el archivo resultante es necesario convertirlo previamente a formato J2SE HPROF usando la herramienta <ruta_sdk>/platform-tools/hprof-conv. Lo anterior, solo si no hemos utilizado el Android Device Monitor embebido en Eclipse.

Finalmente, podremos analizar el volcado de memoria con la aplicación Eclipse Memory Analyzer Tool (MAT) o cualquier otro analizador de memoria de nuestra preferencia. Entre otras cosas, podremos analizar las cadenas de texto encerradas en objetos del tipo String que estén activos en memoria; para ello, podemos ingresar la consulta “select * from java.lang.String” en el Object Query Language studio de Eclipse MAT.

En la imagen que se presenta a continuación pueden observarse algunos de los mensajes enviados por un bot a su C&C mediante HTTP, como también pueden encontrarse fragmentos de mensajes SMS y de correo electrónico que aún permanecían en la memoria del terminal.

image-6

La gran desventaja del análisis de memoria con DDMS es que para acceder a ciertas estadísticas la aplicación debe poder ser depurada; es decir, su manifiesto necesita presentar la etiqueta android:debuggable con un valor booleano verdadero para indicar al sistema que abra un puerto de depuración. Para superar esta limitación, siempre es posible alterar el APK.

NOTA: Para leer más acerca de la depuración de memoria, dirigirse a la documentación para desarrolladores en Android.

Como vimos…

Obtener información en tiempo real de la memoria del equipo puede resultar un proceso extremadamente sencillo mediante las herramientas de análisis incluidas en el kit de desarrollo de la plataforma. La utilización de estas utilidades originariamente pensadas para la evaluación del rendimiento de aplicaciones se vuelve imprescindible en el análisis de códigos maliciosos cada vez más cambiantes.

La capacidad de recuperar archivos desde la memoria, datos en texto plano, historial de la navegación web, mensajes SMS, correos electrónicos, contactos, archivos APK y DEX instalados en el sistema, es esencial no solo para generar un perfil forense completo del equipo, sino también para analizar cómo cambian muestras de malware capaz de mutar dinámicamente.