A lo largo del presente año, hemos compartido con ustedes una gran cantidad de análisis y situaciones en las cuales códigos maliciosos para dispositivos móviles afectaron a los usuarios de Android, no solo en Latinoamérica sino también a nivel mundial. Por otro lado, si bien hemos comentado acerca de los resultados de las investigaciones que realizamos en el Laboratorio de ESET Latinoamérica, no habíamos compartido mucho con ustedes acerca de las metodologías de análisis, las técnicas o herramientas que se pueden utilizar para este cometido.
En primera instancia, una vez que definimos los objetivos del análisis deberíamos hablar sobre las herramientas que podemos utilizar, donde encontrarlas y como preparar un correcto entorno para el análisis de malware en Android. Para simplificar un poco esta tarea, nos vamos a centrar en una distribución de Linux: Santoku. Esta distribución viene especialmente armada para poder analizar códigos maliciosos, buscar vulnerabilidades u otra gran cantidad de tareas en relación a las plataformas móviles, por lo tanto cuenta con muchas herramientas útiles y efectivas para analizar malware, actualmente la versión disponible es la 0.3 Alpha.
Herramientas como apktool, dex2jar, Droidbox, Androguard son de gran utilidad al momento de analizar un malware para Android. Cada una de ellas tiene distintas funcionalidades, y sumadas a un poco de trabajo el resultado es óptimo. Una aplicación de Android es en realidad un archivo con extensión ".apk", el cual si uno lo intenta abrir de igual manera que a un archivo comprimido ve una estructura como la siguiente:
En el directorio META-INF se encuentran los certificados de la aplicación y otra información acerca de su estructura. La carpeta res contiene los recursos de la aplicación como por ejemplos los iconos, imágenes y otros datos mas que no se encuentran compilados. Luego nos quedan 3 archivos en el directorio raíz, el archivo resources.arsc contiene todos los recursos pre compilados de la aplicación, classes.dex contiene el código de la aplicación compilado en un el formato que interpreta la maquina virtual de Dalvik y el archivo AndroidManifest.xml es donde se encuentra información acerca de la aplicación como por ejemplo permisos, servicios, receivers y versión de Android con la cual es compatible.
Si extraemos el AndroidManifest.xml e intentamos leer su contenido es posible observar que no se encuentre legible, lo mismo sucede con el archivo classes.dex, para evitar un trabajo engorroso de comprender estos formatos, veremos de que manera llevarlos a un lenguaje mas legible y fácil de entender. Acompanemos el aprendizaje del análisis de malware para Android con un caso real, por lo tanto vamos a analizar el archivo con el MD5: b1ae0d9a2792193bff8c129c80180ab0.
Vamos a utilizar apktool para decodificar el archivo y poder leer su contenido, y de esta manera analizar los permisos que solicita la aplicación para su instalación y ejecución. Es muy importante leer con atención la información provista en el AndroidManifest.xml ya que se pueden identificar características importantes de la aplicación o secciones de su código a las cuales prestar atención a medida que avancemos con el análisis:
Al leer el contenido del archivo se puede identificar su estructura y sus secciones. Dentro de la información que provee este archivo se puede identificar la versión de la aplicación (android:versionCode y android:versionName), en que versiones de Android funciona (android:minSdkVersion) como así también los permisos que requiere para su ejecución. En el caso de la amenaza analizada se puede observar que solicita una gran cantidad de permisos, los cuales debemos analizar en detalle y con el tiempo aprender a identificar cuales son más peligrosos que otros.
Una vez que identifiquemos las principales secciones de la aplicación y los puntos mas importantes llega el momento de analizar el código y ver en detalle cuales son las acciones tomadas en caso de que sucedan los eventos que nos importan. En este momento, es importante entender que es lo que debemos buscar y como hallarlo. Por ejemplo, si se intenta analizar que código se ejecuta cuando llega un mensaje de texto, hay que buscar dentro de la carpeta smali el archivo SecurityReceiver.smali, al abrirlo podemos ver el bytecode de la aplicación y analizar su funcionamiento:
Recapitulemos, al iniciar el análisis de un código malicioso para Android una de las primeras cosas que se deben hacer es entender su estructura, buscar los permisos y para luego investigar en detalle que es lo que hace la aplicación e intentar acceder a su código. Hasta ahora vimos como decompilar el malware con apktool y acceder a los recursos como en AndroidManifest.xml y encontrar el bytecode de la aplicación o de los métodos y clases que queremos analizar, todavía nos queda mucho más por hacer. En la próxima parte veremos la estructura de los componentes mas importantes de una aplicación y como obtener el código de una manera mas legible, para continuar con el análisis, si quieren conocer mas información acerca del código malicioso que estamos analizando pueden acceder a Troyanos en Android: Vulnerando sistemas de doble autenticacion y Botnets en Android: robo de mensajes de texto.
Una vez que terminaste esto, ¡te recomendamos seguir con el análisis de malware en Android de bytecode a Java!
Pablo Ramos
Security Researcher