Como sabemos, el análisis dinámico de malware nos permite monitorear los eventos que caracterizan la ejecución de una aplicación e inferir el comportamiento del programa a partir de dichos eventos de una manera rápida, simple, y resistente a ofuscación de código e Ingeniería Inversa. Durante este análisis nos enfocamos en el estudio de los flujos de información, el (in)correcto uso de SSL, peticiones y respuestas enviadas, procesos de autenticación y todas las llamadas al sistema que soportan dichas acciones.

Ayer les hablábamos acerca de la necesidad de desarrollar nuevas técnicas de análisis de malware en Android, y de propuestas que han venido tomando relevancia basadas en aplicaciones de algoritmos de aprendizaje sobre modelos basados en la estructura del código. Puntualmente, sobre grafos construidos a partir de las llamadas función de las aplicaciones de Android.

¿Qué es Taint Tracking?

Una habitual técnica de análisis que ya ha probado sus beneficios es conocida como taint tracking o análisis dinámico de marcado, y consiste en observar el desarrollo de los flujos de datos, desde un origen y a lo largo de la ejecución del programa, esperando identificar puntos de alcance que sean de interés.

Decimos que esos datos están marcados (“tainted”) con un identificador que permanece con la información a medida que es usada, permitiendo al sistema monitorear su movimiento. Para ello deberemos definir cuáles son aquellas fuentes de datos y puntos de arribo a examinar, estableciendo así taint sources y taint sinks respectivamente, junto con las reglas de propagación necesarias. Nuevos datos dependientes de variables marcadas, mediante asignaciones explícitas o control de flujo, serán también marcados trascendiendo el control.

a = taint_source()

c = a + b

send(c)

Se debe cuidar la granularidad del marcado para evitar taint explosions, las que dejan estructuras de datos del kernel marcadas innecesariamente sólo con algunas pocas llamadas al sistema. Cabe mencionar además que esta técnica puede puentearse con la utilización de flujos implícitos, que permiten que una variable no marcada adquiera el valor de una sí marcada, esquivado el monitoreo del flujo de datos.

¿Qué beneficios tiene esta técnica?

El uso de taint analysis permite el descubrimiento de fugas de información sensible en violación de la confidencialidad del usuario y abandonando el sistema mediante, por ejemplo, Internet. Esta es una gran ventaja en la lucha contra el robo de identidad en aplicaciones para smartphones. También nos previene de ataques contra la integridad como inyección SQL, Cross-Site Scripting (XSS), y vulnerabilidades similares (command injection, XPATH injection, XSRF).

Podríamos pensar que el traslado de este tipo de análisis a plataformas móviles se vería entorpecido por la presencia de una arquitectura singular, emuladores, procesos de sandboxing y, en caso de Android, la existencia de la Dalvic VM. Sin embargo, al utilizar un análisis centrado en llamadas al sistema (el cual caracteriza el comportamiento del proceso mediante las llamadas al sistema que el mismo realiza) todo se reduce a las interacciones entre espacio de usuario y sistema operativo, las que necesariamente deben ocurrir.

Estas interacciones en Android ocurren a través del Binder Driver Protocol (núcleo de IPC/RPC), sin importar lo que ocurra a nivel de Dalvic. Como ejemplificación, el método sendMessage deriva en una llamada ioctl del tipo:

ioctl(binder fd, BINDER WRITE READ, &binder_write_read);

donde binder_write_read es el buffer con los parámetros de la transacción.

Herramientas útiles

Una herramienta para Android, con años de historia ya en el mercado, es TaintDroid, recientemente actualizada para Android 4.3. Es más una modificación de firmware que una aplicación en sí; nos permite monitorear aplicaciones, alertando cuando se intente un envío de información personal. De esta manera, el usuario puede conocer en tiempo real qué utilización da la aplicación a los permisos declarados en su manifiesto e inferir los fines a alcanzar con ello.

DroidBox es una aplicación similar que permite el control de fugas de información, operaciones criptográficas, envío de SMS y llamadas, operaciones de entrada y salida de red y del sistema de archivos. Genera gráficos que caracterizan el comportamiento de la muestra, de manera temporal o funcional. Por último, existe una variada gama de analizadores dinámicos online, como por ejemplo CopperDroid.

Créditos imagen: ©C++ que vos/Wikimedia Commons