Cuando nos encontramos frente a un archivo apk malicioso, un modo efectivo de analizar su comportamiento consiste en alterar la aplicación para volverla depurable, y luego continuar su observación mediante el uso de breakpoints dentro de nuestro entorno de desarrollo favorito. Esto nos permite utilizar los datos que hemos recolectado al decompilar el código fuente para interceptar piezas de información antes de que éstas sean transformadas o utilizadas por la aplicación, modificando los flujos de ejecución según nuestra necesidad.

Una herramienta recientemente liberada que nos facilita este tipo de análisis es Appie, del inglés Android Pentesting Portable Integrated Environment. Además de contar con una interfaz de usuario atractiva e intuitiva, esta aplicación nos suministra los materiales básicos para comenzar el estudio de un archivo apk. Se trata de una suite liviana de herramientas, cuya portabilidad nos permite montar rápidamente un laboratorio de análisis en cualquier entorno operativo Windows.

A lo largo de este tutorial, veremos cómo utilizar Appie y otras herramientas para examinar un archivo malicioso orientado a plataformas Android.

Paso 1: Preparando el ambiente de prueba

Una vez que tenemos la muestra a analizar –en nuestro caso, una variante de Android/TiFamily.D–, debemos obtener las herramientas que vamos a utilizar. Appie puede ser descargada de su sitio en Sourceforge, descomprimiendo luego los archivos en la carpeta destino. También utilizaremos APK Studio.

Como entorno de desarrollo utilizaremos Eclipse. Una versión de este IDE se incluye dentro de las herramientas provistas por Appie, y puede ser iniciada ingresando el comando eclipse en la línea de comandos. Sin embargo, también podemos instalar el IDE para trabajar de manera independiente sin mayores contratiempos.

Como es de imaginar, necesitaremos disponer de alguna plataforma en la cual ejecutar y depurar nuestra muestra. Para ello podemos utilizar nuestro dispositivo real, una máquina virtual de Android –con las correctas configuraciones de red que nos permitan luego adjuntar un debugger al proceso–, o un emulador como el incluido en Android SDK, Genymotion, o similar. En cualquier caso, deberemos habilitar el modo USB debugging dentro de las opciones del desarrollador.

Paso 2: Transformando una apk en una aplicación depurable

Ahora, utilizaremos APK Studio para alterar nuestra muestra. Para ello crearemos un nuevo proyecto haciendo clic en la pequeña figura de Android en la barra superior, indicando la ruta al apk, y la carpeta que albergará al proyecto. Si la decompilación falla, es posible que debamos reemplazar el ejecutable de apktool utilizado en las carpetas fuente de nuestro APK Studio por otro release específico o versión de prueba.

Una vez que se ha logrado una decompilación exitosa, expandimos el AndroidManifest.xml y modificamos la etiqueta android:debuggable, indicando un valor booleano verdadero.

image_1

Para hacer valer los cambios realizados, deberemos reconstruir el apk. Podemos hacer esto presionando el botón que posee un pequeño martillo como ícono. Un nuevo apk será creado en [RUTA_PROYECTO]\build\rebuilt.apk.

image_2

Finalmente, deberemos instalar el nuevo apk en nuestro emulador o dispositivo. Para lograr esto, lanzamos Appie y tecleamos adb install [RUTA_APK] en la línea de comandos. Llegado este momento, podremos ver en la vista DDMS de Eclipse que nuestra aplicación maliciosa se encuentra lista para ser depurada.

image_3

Paso 3: Creando un proyecto depurable en el IDE

A continuación, crearemos un archivo zip a partir del apk modificado, lo extraeremos en la ubicación que nos resulte más cómoda, y utilizaremos dex2jar buscando obtener el código fuente. Desde Appie, ejecutaremos los comandos que se muestran en la imagen siguiente:

image_4

Luego, ingresamos el comando jdgui para abrir la herramienta homónima en una nueva pestaña, y procedemos a examinar el archivo jar anteriormente creado. Para poder trasladar el código fuente a un proyecto en Eclipse, debemos dirigirnos a File > Save All Sources, como se ilustra en la figura:

image_5

Una vez que tenemos las carpetas con los archivos fuente, creamos un proyecto en Eclipse prestando especial atención al nombre del paquete que otorgaremos a la aplicación, ya que éste debe ser igual a aquél declarado en el AndroidManifest.xml. En el proceso de creación, deberemos además desmarcar la opción que nos ofrece generar automáticamente la actividad principal.

image_6

Cuando tenemos nuestro proyecto, importamos las fuentes obtenidas anteriormente con JD-GUI, y las ubicamos en la carpeta src. Ahora podemos establecer los puntos de quiebre en las líneas que necesitemos, y adjuntar un debugger al proceso que nos interesa, de la misma manera en que lo hacemos al desarrollar aplicaciones.

En resumen…

La depuración de muestras de malware nos permite no sólo comprender la lógica detrás de las aplicaciones estudiadas, sino también adelantarnos y modificar el curso normal de ejecución de un programa. Esto es particularmente ventajoso cuando intentamos comprender algoritmos de cifrado, conexiones de red, transacciones con bases de datos o cualquier tipo de interacción con el sistema de ficheros.