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:
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).
![]() |
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