martes, 4 de marzo de 2014

Un Rootkit para Android

En el departamento antifraude hemos analizado un troyano Android que envía SMS premium y hemos encontrado una rutina muy interesante para ocultarse al usuario. Para ello, cuando la aplicación se ejecuta por primera vez, el icono de la aplicación desaparece de la lista de aplicaciones mientras que la aplicación sigue ejecutándose en segundo plano. Por eso, podemos clasificar este troyano como rootkit a nivel del usuario. Hemos usado DEXInspector para hacer ingeniería inversa sobre el.

Cuando la aplicación se ejecuta, se llama a la función "onCreate" (mostrada abajo). En primer lugar, invoca una clase denominada "Utilities" que contiene funciones para instalar aplicaciones Android, mover archivos, etc. Posteriormente va a usar esta misma clase para quitar el icono ejecutando la función "iconRemoval" e instalar otra aplicación que se llama "GrandThieftAuto3-Uncut-v1.3.apk" que se encuentra en la carpeta "assets". Finalmente ejecutará la parte maliciosa a partir de la clase "com.example.smsmessaging.TestService" para recoger los números SMS premium y enviarlos de manera periódica.


Reconstruyendo la función "iconRemoval" en alto nivel (el código desensamblado en Dalvik está abajo) obtenemos el siguiente código, que es sencillo:

 packageManager = getPackageManager()
 packageManager.setComponentEnabledSetting(componentToDisable, 0x2, 0x1)


En primer lugar, el malware obtiene una instancia del gestor de paquetes para tener acceso a los paquetes instalados y luego va a cambiar el estado de su propio componente. Para ello, usa la función "setComponentEnabledSetting" pasándole el nombre de su componente; su nuevo estado, 0x2, que se corresponde con COMPONENT_ENABLED_STATE_DISABLED lo que permite desactivar el componente de la interfaz gráfica (com.example.smsmessaging.Main) y 0x1 que corresponde a DONT_KILL_APP para que la aplicación siga funcionando en segundo plano. Sin embargo no se desactiva el componente responsable de la ejecución en segundo plano (com.example.smsmessaging.TestService).

Abajo vemos dos capturas con el antes y después de la ocultación del troyano que se llama "GamerPluskit".

  Antes de ocultar el icono                                                                  Después de ocultar el icono

Por supuesto, el malware necesita el permiso
"android.permission.CHANGE_COMPONENT_ENABLED_STATE". En otras palabras, el usuario debería sospechar cuando un programa requiere dicho permiso. Sin embargo hemos probado en Jelly Beans sin ese permiso y funciona.

Para persistir al reinicio, el malware se registra al evento "BOOT_COMPLETED" que le permite ejecutarse cuando Android arranca. En efecto, el troyano solo había desactivado el componente responsable de la interfaz gráfica (com.example.smsmessaging.Main) y no el componente responsable del servicio que ejecuta la parte maliciosa (com.example.smsmessaging.TestService).

Hemos analizado un rootkit Android sencillo que usa las funciones de la API de Google para ocultarse. Es decir, instala otra aplicación y quita el icono de la lista de aplicaciones mientras sigue en ejecución en segundo plano. Vemos que los troyanos de Android se vuelven más sofisticados y podríamos hacer un paralelismo entre la complejidad del malware para PC con el malware de Android.

Más información:

SHA-256 de la muestra:
77d7217013a5539a1611e13d67dcb8ad8756e9dd34ef8515d71409cadf323a0f


Laurent Delosières

No hay comentarios:

Publicar un comentario