RECSI 2014, Alicante, 2-5 septiembre 2014 Análisis Visual del Comportamiento de Aplicaciones para Android Oscar Somarriba, Ignacio Arenaza-Nuño, Roberto Uribeetxeberria, Urko Zurutuza Dpto. de Electrónica e Informática Mondragon Goi Eskola Politeknikoa Mondragon Unibertsitatea Emails: oscar.somarriba@alumni.mondragon.edu, {iarenaza,ruribeetxeberria,uzurutuza}@mondragon.edu Resumen—Los dispositivos móviles inteligentes equipados con funciones avanzadas de computación y comunicaciones han crecido rápidamente. Sin embargo, a pesar de los mecanismos de seguridad existentes, y dada la cantidad creciente de dispositivos conectados a Internet, también han aumentado exponencialmente la cantidad de aplicaciones maliciosas (malware) dirigidas a ellos. En este trabajo mostramos cómo los componentes peligrosos y maliciosos del malware móvil se pueden visualizar de una manera intuitiva a fin de descubrir fácilmente qué funciones de Android pueden desencadenar el fraude. Nuestro enfoque incluye un método para interceptar llamadas a funciones (”hooking”) con el fin de recoger trazas pertinentes de la aplicación durante de tiempo de ejecución. Esto permite la monitorización de llamadas a funciones de la API de Android relacionadas con los permisos de instalación de la misma. Las trazas obtenidas se colectan en un servidor web central donde tiene lugar la visualización del comportamiento de las aplicaciones. Palabras clave—seguridad en aplicaciones móviles (mobile application security), software malicioso en aplicaciones móviles (mobile malware), análisis Visual (visual analytics), análisis del comportamiento de aplicaciones móviles (application behavior analysis) I. I NTRODUCCI ÓN La adopción masiva de las comunicaciones móviles en la vida cotidiana ha traı́do una necesidad de establecer en la sociedad una confianza en la infraestructura móvil, y esto supone un gran reto en la actualidad. Esto es debido a que las plataformas móviles, como teléfonos inteligentes y tabletas, ası́ como las aplicaciones móviles están aumentando exponencialmente en popularidad. Actualmente existen alrededor de 1 millión de aplicaciones para el Sistema Operativo móvil Android en su sitio web de ventas en lı́nea Google Play, con un estimado de 50 mil millones de descargas [1]. En contraste, el software malicioso (malware) que ataca la plataforma Android ha aumentado considerablemente en los últimos 24 meses en un 100 %. Las nuevas familias de malware Android están evolucionando rápidamente para evitar ser detectados por los escáneres tradicionales basados en firmas. Hay una necesidad de mejorar las capacidades de detección para superar los nuevos desafı́os de detección debido a la ofuscación, y ası́ mitigar o remediar el impacto de la evolución de malware para Android. Dado que el sistema operativo móvil más popular es Android OS de la compañia Google (en la actualidad tiene el 70 % del mercado), Android es el OS más atacado con un 99 % de los ataques malware según lo publicado por Cisco y Kapersky Labs durante el tercer trimestre Q3 del 2013, y resumido en el reporte de SOPHOS [2]. Esta investigación se enfoca en el seguimiento del comportamiento en tiempo de ejecución de las applicaciones y la visualización de sus funciones maliciosas para descubrir qué tipo de ataques o intenciones existen detrás de estas. La plataforma propuesta de monitorización está compuesta básicamente de cuatro elementos, a saber: (i) una aplicación Android llamada (Sink) que guı́a al usuario en la selección y parametrización de la aplicación a supervisar, (ii) un cliente embebido que se inserta en cada aplicación a ser supervisada, (iii) un servicio web encargado de recoger la aplicación a monitorizar, enviar al dispositivo la aplicación instrumentada, y recopilar las trazas que va generando, (iv) y finalmente un componente de visualización que muestra grafos relacionados con el comportamiento de las trazas o llamadas a funciones, relativa a la aplicación monitorizada. Se prevé que esta herramienta pueda ser utilizada por analistas malware con el fin de realizar una inspección visual de las aplicaciones en estudio. Por otra parte, la monitorización de una aplicación en el momento de su ejecución es esencial para entender cómo esta interactúa con el dispositivo, con componentes claves tales como las APIs (Application Programming Interfaces) provistas por el sistema. Una API especifica cómo algunos componentes de software (rutinas, protocolos y herramientas) deben actuar cuando estén sujetos a invocaciones de otros componentes. Al rastrear y analizar estas interacciones, podemos ser capaces de dar seguimiento a cómo se comportan las aplicaciones, a cómo manejan datos sensibles e interactuar con el sistema operativo. I-A. Contribución y organización del artı́culo A lo largo de este artı́culo se presenta un método para la detección de malware, mediante el análisis visual de la ejecución de las funciones a las que llaman. La subsiguientes partes del trabajo están organizadas como a continuación se detalla. La sección II le da al lector las nociones básicas detrás de los componentes utilizados en las siguientes secciones y recopila el trabajo previo relacionado con la temática. La sección III describe la arquitectura de monitorización y visualización del sistema presentado. La sección IV muestra los resultados ISBN: 978-84-9717-323-0 254 O. Somarriba, I. Arenaza, R. Uribeetxeberria, U. Zurutuza obtenidos con la infraestructura implementada haciendo uso de diferentes aplicaciones. Por último, las secciones V y VI presentan las conclusiones e identifican unas posibles lı́neas futuras de trabajo, respectivamente. II. A NTECEDENTES Y T RABAJOS RELACIONADOS En los ambientes convencionales de Java, el código fuente es compilado en un conjunto de instrucciones llamado bytecode, el cuál es almacenado en un formato de ficheros .class. Estos ficheros son más tarde leı́dos por la Máquina Virtual de Java (JVM) al momento de su ejecución. Por otra parte, en Android, el código fuente de Java que ha sido compilado en ficheros .class debe ser convertido en ficheros .dex, frecuentemente referidos como ficheros ejecutables del tipo Dalvik (Dalvik Executable). Además, Android application package file (apk), es el formato de fichero utilizado para distribuir e instalar software de aplicaciones y middleware en el sistema operativo Android. Las apps se presentan en un fichero con el formato .apk, en un contenedor de la aplicación binaria que consiste en ficheros .dex, AndroidManifest.xml, y los ficheros de recursos de la aplicación. Asimismo, el archivo .apk resultante se firma con una clave (keystore) para establecer la identidad del autor de la app. Existen métodos para realizar el proceso en el sentido inverso. Apktool es un conjunto de herramientas para realizar ingenierı́a inversa en apps, lo que simplifica el proceso de ensamble y desensamble de ficheros binarios de Android (.apk) a ficheros Smali (.smali), permitiendo la modificación del código fuente. Esto resulta especialmente útil para el análisis de las aplicaciones. El análisis y detección de malware para Android ha sido un tema candente de la investigación en los últimos años. Un ejemplo de los mecanismos de inspección para la identificación de aplicaciones con malware para Android se presenta en [3], donde también se desarrolló un sistema de instrumentación transparente para la automatización de las interacciones de los usuarios. Además, en [4] se utiliza un marco de seguridad llamado XManDroid para extender el mecanismo de seguimiento de Android, con el fin de detectar y prevenir ataques del tipo escalada de privilegios a nivel de aplicación durante el tiempo de ejecución sobre la base de una polı́tica determinada. Adicionalmente, los autores en [5] y [6] han propuesto diferentes técnicas de seguridad con respecto a los permisos de las apps. Por ejemplo, en este último, se propone una herramienta para extraer la especificación de permisos del código fuente de Android OS. Por otra parte, las técnicas de detección de malware en dispositivos móviles usualmente se pueden clasificar de acuerdo al modo en el que se realiza el análisis: análisis estático y análisis dinámico. La primera se basa en intentar identificar el código malicioso por descompilación de la aplicación y la búsqueda de cadenas o bloques de códigos sospechosos; en la segunda se analiza el comportamiento de una determinada aplicación utilizando la información de su estado de ejecución. Algunos tipos recientes de detección de malware son: Dendroid [7] como un ejemplo de un análisis estático para dispositivos con Android, y Crowdroid, sistema que agrupa la frecuencia de llamadas al sistema de las aplicaciones para detectar malware [8]. En un reciente trabajo de Jiang y Zhou [9] se han mapeado los tipos más comunes de violaciones de permisos en un gran conjunto de datos de malware. Por otro lado, en [10], [11] se pueden encontrar estudios más amplios sobre el estado del arte de la seguridad para los dispositivos móviles. Entre los sistemas de monitorización de comportamiento de aplicaciones se encuentra una propuestas que permite visualizar mediante grafos las llamadas a funciones de una aplicación determinada, pero los autores lo hacen mediante técnicas de análisis estático [12]. El sistema hace un mapa de todas las funciones disponibles, mientras que este trabajo solo monitoriza y visualiza aquellas funciones que se suceden en tiempo de ejecución, obteniendo además los parámetros que se envı́an a la función. No se han encontrado propuestas de detección de malware en base a análisis dinámico que opere en el dispositivo del usuario de manera muy ligera y ”online”. Esto es necesario debido a la apertura de la Plataforma Android donde el malware puede también ser instalado a través de apps de otras fuentes, tales como páginas web y de memorias USB, lo que requiere mecanismos de detección que operan en el propio dispositivo. III. D ESCRIPCI ÓN DEL SISTEMA En esta sección se presenta una solución aplicable para la detección de anomalı́as producto de la presencia de malware en las aplicaciones, basada en un análisis dinámico combinado con el soporte de un servidor web. La Figura 1 muestra la estructura de la plataforma de monitorización propuesta. Las etapas para llevar a cabo la misma consisten en los siguientes pasos lógicos: Etapa I: Envió de la aplicación APP y de una lista de permisos que se desean monitorizar al Servidor Web, Etapa II: Instrumentación de la aplicación mediante un proceso de hooking generando APP’, Etapa III: Instalación y activación de la APP’ reemplazando a APP en el dispositivo, Etapa IV: Almacenamiento de las trazas de APP’ en una base de datos, y la Etapa V: Visualización de los grafos relacionados con APP’. De nuevo, en la Figura 1 se muestra un diagrama de bloques formado por cuatro componentes: la aplicación Sink, un cliente embebido, un servidor web, y el componente de visualización. III-1. La Aplicación Sink: es una aplicación Android con dos funciones principales: una de gestión de la aplicación a monitorizar, y otra para el manejo de las trazas. La parte del tratamiento de la aplicación, a su vez, está compuesta de un conjunto de actividades como se muestra en la Figura 2(d). En la Figura 2(a) el usuario selecciona la aplicación que desea monitorizar, entre aquellas que no vienen reinstaladas de fábrica. En el siguiente paso se seleccionan los permisos que el usuario estime convenientes a monitorizar, relacionados con la aplicación y considerados como peligrosas según el mapa de funciones API obtenido con PScout [6]. La interfaz guı́a después al usuario a lo largo de varias actividades donde se llevan a cabo la subida de la aplicación y lista de permisos a monitorizar al Servidor, descarga de la aplicación modificada, Análisis Visual del Comportamiento de Aplicaciones para Android 255 Hooking Process Non Monitored Android application N Stage I Function 2 APP Function n Application to hook Disassembled files Permissions Monitored Android application 2 partial trace SINK Embedded client Monitored Android application 1 Function 1 Stage III: Running APP’ APP’ Stage II Hooked application partial trace List of functions to hook Modified files DrawGraph (Java Program) Stage IV Databases Database Traces of APP’ Embedded client Stage V Web Service Smart Device Server Figura 1: Componentes del Sistema de Monitorización del comportamiento de la Aplicación. e instalación de la misma. Finalmente, un botón permite iniciar o detener la monitorización de la aplicación en el cualquier instante. Por otra parte, el Sink permite realizar la gestión de las trazas, ejecutando servicios en segundo plano. Este gestor es el encargado de colectar las trazas enviadas desde los clientes embebidos individuales, ubicados en cada una de las aplicaciones supervisadas, añadiéndoles una marca de tiempo y el hash del ID del dispositivo, y su almacenamiento en una memoria intermedia circular común. Por último, las trazas se envı́an periódicamente al servicio web donde se almacenan en una base de datos. III-2. El Cliente Embebido: consiste en un módulo de comunicación que utiliza el protocolo UDP para la transmisión de las trazas de las funciones modificadas invocadas en APP’, al Sink. III-3. El Servicio Web: provee los siguientes servicios al Sink: subir aplicaciones, descargar las aplicaciones modificadas y enviar las trazas. Ahora la pieza clave de todo el sistema y donde reside la lógica del método presentado, es la herramienta que instrumenta la aplicación, el proceso conocido como ”hooking”. Este componente mapea los permisos de la aplicación en llamadas a funciones que son marcadas, las cuáles van ser monitorizadas. Por lo tanto, este proceso es una acción automática realizada por el servidor Web cada vez que una aplicación es enviada al mismo. Las funciones modificadas registrarán el nombre de la aplicación, el nombre de paquete de la aplicación, y el hash de la aplicación y enviará esta información al cliente embebido junto con el nombre de la función (e.g., sendTextMessage(), getDeviceID(), execSQL(), SendBroadcast(), etc.). A continuación, todos los ficheros modificados junto con el resto de los recursos desensamblados se reensamblan y se empaquetan en un fichero binario Android .apk. Al terminar la Etapa II, la APP’ es descargada al Sink. III-4. Visualizaciones: Con el fin de realizar un análisis visual del comportamiento de las aplicaciones se utiliza una base de datos NoSQL basada en grafos, Neo4j1 . Neo4j almacena los datos en una estructura orientada a grafos, en lugar de utilizar las tablas relacionales de las bases de datos convencionales. En términos generales, un grafo es una representación de un conjunto de nodos y las relaciones entre ellos unidos por medio de enlaces, (vértices y aristas o arcos, respectivamente). Esto se ilustra en la Etapa V de la Figura 1. De esta manera, se puede plasmar cada uno de los comportamientos de la aplicación analizada con una representación simple pero muy ilustrativa. Los grafos se elaboran mediante relaciones de tipo ”una Aplicación incluye varias Clases que a su vez llaman a Funciones”. El primer nodo superior, ”Aplicación”, contiene el nombre del paquete de la aplicación, que es única para cada una de las aplicaciones existentes, mientras que el segundo nodo, ”Clase”, representa el nombre del componente de Android que ha llamado a la ”API call”, el nodo ”Función”. Una vez se obtiene la información recogida por el servicio Web en la base de datos, toda su estructura de llamadas a funciones puede ser filtrada y tratada. Inicialmente se genera un grafo sin incluir colores empleando el lenguaje Cypher Query 1 Software disponible en el sitio web http://www.neo4j.org 256 O. Somarriba, I. Arenaza, R. Uribeetxeberria, U. Zurutuza (a) (b) (c) (d) Figura 2: Interfaz de Usuario del Sink. (a) Selección de la aplicación, (b) Pasos de la aplicación, (c) Selección de los permisos, y (d) Proceso de monitorización. Languaje, que permite operar y aplicar transformaciones en el grafo. Para ello, un experto debe completar y encadenar un conjunto de reglas que ayudan a resaltar el comportamiento malicioso conocido (por ejemplo, la llamada a la función SendMessageText(). Para ello, se buscan los nodos en la parte inferior del grafo relacionado con las llamadas a funciones API consideradas maliciosas. Las reglas incluyen la búsqueda y representación de funciones maliciosas (representadas en rojo), sospechosas o maliciosas pero no crı́ticas (en naranja) y benignas (en verde). Cuando se detecta un comportamiento malicioso como el envı́o de mensajes SMS a un número de pago premium sin el consentimiento del usuario, se procede a representar el nodo bajo inspección en color rojo como señal de alerta usando Cypher. IV. R ESULTADOS En esta sección se muestran los resultados de utilizar la plataforma de monitorización y visualización para algunos ejemplos. En este artı́culo, exploramos 3 diferentes apps con el fin de evaluar todo el marco de trabajo: Skype-free IM & video calls La aplicación popular Angry Birds El malware Fake player IV-A. Las Trazas Después de ejecutar las aplicaciones arriba mencionadas durante 2-3 de minutos cubriendo todas las funcionalidad de la aplicación, el servidor Web recolecta un gran volumen de trazas de cada una de las mismas. IV-B. Análisis Visual de las Trazas Como se ha dicho anteriormente, un conjunto de reglas predefinidas por expertos nos permite identificar las funciones API ”sospechosas”, y en función de sus parámetros, se asignan colores a éstas. Al hacerlo, nos permite identificar rápidamente las funciones y asociarla con elementos relacionados. Al aplicar la clasificación de funciones en base a un color para cada nodo del grafo, esto permite la construcción de un ”mapa visual”que describe y ayuda al análisis de su funcionamiento. Además, este grafo es adecuado para guiar el analista durante el examen de clasificación de una muestra de malware peligrosa debido a que el sombreado rojo de los nodos indican estructuras maliciosos identificados por la infraestructura de monitorización. Esta revisión debe realizarse entre todos los nodos de las funciones llamadas en el nivel más bajos de cada rama del árbol del grafo. Sin embargo, con el fin de colorear completamente el grafo de la aplicación hasta llegar al nodo raı́z, hay que recurrir a realizar un análisis de abajo hacia arriba (”bottom-top”) del vecindario de cada función invocada y las asociadas. Por lo tanto, si una de las ramas del grafo es coloreada en rojo, a continuación, la app se considera como potencialmente maliciosa. En particular, los grafos de las aplicaciones como Skype, Angry Birds, y Fake Player se muestran en la Fig. 3 lo cual proporciona al usuario una indicación del estado de seguridad de éllos. Para ello, se han creado reglas Cypher para colorear aquellos nodos que contienen una llamada a función de envı́o de SMS en rojo, y llamadas a funciones para obtener y mostrar publicidad (Adware) en naranja. Como resultado, el grafo generado para la aplicación Skype no muestra ninguna amenaza y sus nodos aparecen coloreados en verde, tal y como se muestra en la Fig. 3(a). Por otra parte, en la Fig. 3(b) existe una aplicación con Adware, por lo que varios nodos de esta aplicación están coloreados en naranja, mientras en contraste las funciones maliciosas que identifican un malware se colorean en rojo, Análisis Visual del Comportamiento de Aplicaciones para Android como se muestra en la Figura 3(c) para la aplicación Fake Player. V. C ONCLUSIONES En este trabajo se propone una arquitectura de supervisión con el objetivo de monitorizar aplicaciones Android a gran escala, sin modificar el firmware del mismo, sin la necesidad de obtener permisos de administrador del dispositivo, y que resulta en un grafo de visualización donde se destacan las llamadas a función correspondientes a los comportamientos de malware predefinido. La plataforma está compuesta por cuatro componentes: el cliente embebido, el Sink, el servicio web y la visualización. Antes de que una aplicacón sea supervisada, el Sink la transfiere al Servicio Web, que se encarga de la inserción de los hooks añadiendo el cliente embebido en el interior la aplicación. Finalmente el Sink descargará la aplicación recién instrumentada. Cuando una función modificada es llamada, se construye una traza parcial que será pasada al cliente embebido que a su vez la enviará al Sink. Este recoge los trazas parciales de todas las aplicaciones supervisadas, las completa, y las sube mediante el servicio Web. El Servidor finalmente transforma las trazas y las almacena en una base de datos de grafos. Por último, se aplican un conjunto de reglas predefinidas con el fin de obtener una visualización donde se pone de relieve o resalta la conducta maliciosa de la aplicación supervisada. La infraestructura desarrollada es capaz de monitorizar simultáneamente varias aplicaciones en distintos dispositivos y la recopilación de todos las trazas se da en un mismo lugar. Las pruebas realizadas en este trabajo muestran que las aplicaciones pueden ser preparadas para ser supervisadas en cuestión de minutos y las aplicaciones modificadas se comportan como estaban originalmente diseñadas. Además, se ha mostrado que la infraestructura se puede utilizar para detectar comportamientos maliciosos en aplicaciones, tales como el monitorizado del malware Fake Player. Las evaluaciones del Sink han revelado que nuestro sistema de supervisión es reactivo, no pierde ninguna de las trazas parciales, y tiene un impacto muy pequeño en el rendimiento de las aplicaciones supervisadas. VI. T RABAJOS FUTUROS Como trabajo futuro, la plataforma se puede ampliar para ser capaz de supervisar las funciones Android conocidas como Intents, enviadas por la aplicación que permitirı́an a una aplicación llamar a funciones que no requieren ningún tipo de permiso especı́fico (como por ejemplo que una función llame a un navegador sin que la aplicación tenga permisos de Internet). No ser capaz de monitorear Intents significa que la infraestructura no es capaz de realizar un seguimiento, de si la aplicación supervisada inicia otra aplicación durante un corto perı́odo de tiempo para realizar una tarea determinada, e.g., para abrir un navegador web para mostrar la EULA (enduser license agreement). Además, esto permitirı́a saber cómo la aplicación bajo prueba se comunica con el resto de las 257 aplicaciones de terceras partes y las aplicaciones instaladas en el dispositivo. Asimismo se puede ampliar el modelo anti-malware descrito en este trabajo, desarrollando una arquitectura que lo complemente mediante la detección automática de malware móvil como por ejemplo con el uso de VirusTotal, realizando ası́ un paso de filtrado previo. En definitiva, se podrı́a obtener un sistema mas versátil disponiendo en el móvil de una aplicación que reporte anomalı́as (i.e., desviación del patrón de tráfico de las aplicaciones de red) a un servidor anti-malware en su red. R EFERENCIAS [1] Businessinsider, “businessinsider.” Available Online, 2014. [2] Sophos, “Sophos mobilebile security threat report.” Available Online, 2014. http://www.sophos.com/en-us/medialibrary/PDFs/other/ sophos-mobile-security-threat-report.ashx. [3] M. Karami, M. Elsabagh, P. Najafiborazjani, and A. Stavrou, “Behavioral analysis of android applications using automated instrumentation,” in Software Security and Reliability-Companion (SERE-C), 2013 IEEE 7th International Conference on, pp. 182–187, June 2013. [4] S. Bugiel, L. Davi, A. Dmitrienko, T. Fischer, and A.-R. Sadeghi, “Xmandroid: A new android evolution to mitigate privilege escalation attacks,” Technical Report TR-2011-04, Technische Universität Darmstadt, Apr. 2011. [5] J. Jeon, K. K. Micinski, J. A. Vaughan, A. Fogel, N. Reddy, J. S. Foster, and T. Millstein, “Dr. android and mr. hide: Fine-grained permissions in android applications,” in Proceedings of the Second ACM Workshop on Security and Privacy in Smartphones and Mobile Devices, SPSM ’12, (New York, NY, USA), pp. 3–14, ACM, 2012. [6] K. W. Y. Au, Y. F. Zhou, Z. Huang, and D. Lie, “Pscout: Analyzing the android permission specification,” in Proceedings of the 2012 ACM Conference on Computer and Communications Security, CCS ’12, (New York, NY, USA), pp. 217–228, ACM, 2012. [7] G. Suarez-Tangil, J. E. Tapiador, P. Peris-Lopez, and J. Blasco, “Dendroid: A text mining approach to analyzing and classifying code structures in android malware families,” Expert Syst. Appl., vol. 41, pp. 1104– 1117, Mar. 2014. [8] I. Burguera, U. Zurutuza, and S. Nadjm-Tehrani, “Crowdroid: Behaviorbased malware detection system for android,” in Proceedings of the 1st ACM Workshop on Security and Privacy in Smartphones and Mobile Devices, SPSM ’11, (New York, NY, USA), pp. 15–26, ACM, 2011. [9] X. Jiang and Y. Zhou, Android Malware. Springer New York, 2013. [10] M. La Polla, F. Martinelli, and D. Sgandurra, “A survey on security for mobile devices,” Communications Surveys Tutorials, IEEE, vol. 15, pp. 446–471, First 2013. [11] G. Suarez-Tangil, J. Tapiador, P. Peris-Lopez, and A. Ribagorda, “Evolution, detection and analysis of malware for smart devices,” Communications Surveys Tutorials, IEEE, vol. PP, no. 99, pp. 1–27, 2013. [12] H. Gascon, F. Yamaguchi, D. Arp, and K. Rieck, “Structural detection of android malware using embedded call graphs,” in Proceedings of the 2013 ACM workshop on Artificial intelligence and security, pp. 45–54, ACM, 2013. 258 O. Somarriba, I. Arenaza, R. Uribeetxeberria, U. Zurutuza (a) Grafo de Skype. (b) Grafo del juego Angry Birds. (c) Grafo del malware Fake Player. Figura 3: Grafos de las aplicaciones bajo prueba. (a) Diagrama Superior: Grafo de Skype, (b) Diagrama Intermedio: Grafo de la aplicación Angry Birds, y (c) Diagrama Inferior: Grafo del malware Fake Player.