En el primer post sobre auditorías móviles explicamos la creación y configuración de un entorno de pruebas de pentesting utilizando el software Android Studio. Bien es cierto que es posible crear dispositivos emulados que ya se encuentren rooteados, pero como ya sabréis los que habéis trabajado con ellos, en muchas ocasiones presentan una serie de problemas o incomodidades que hacen que la configuración del dispositivo y el trabajo con el mismo se pueda complicar.
Si habéis echado un ojo a mi último post sobre la configuración de dispositivos físicos usando Magisk habréis visto lo cómodo y manejable que resulta tener nuestro Android dispuesto con esa estructura para trabajar. Por ello, en esta ocasión vamos a fusionar ambas partes para obtener un emulador de Android para la realización de pruebas de pentesting con la comodidad que nos aporta Magisk.
- Sobre Android Studio
- Creación y configuración del dispositivo emulado
- Antes de comenzar: Añadir al Path la herramienta adb
- Herramienta para la instalación de Magisk: rootAVD
- Instalación del certificado de Burp Suite a través de Magisk
- Frida a través de Magisk
- Conclusión
- Referencias
Sobre Android Studio
Me imagino que si estás aquí es porque ya tienes instalado y configurado el software Android Studio en tu ordenador, pero en caso contrario puedes encontrar la explicación al completo aquí. Si ya lo tienes instalado, te voy a recomendar que lo actualices a la última versión de la siguiente manera:
- Abrir Android Studio → Ruleta de ajustes en la parte inferior izquierda → Check for updates

Necesitaremos conocer la ruta en la que tenemos instalado Android SDK (kit de desarrollo de software), un conjunto de herramientas empleadas por el programa. Para ello:
- Android Studio → More actions → SDK Manager → Android SDK Location


OJO!! En caso de que no hayas instalado todavía Android Studio, habrá un momento en el que nos pregunte en qué ruta queremos instalar Android SDK. Por defecto, la ruta es C:\Users\\AppData\Local\Android\Sdk. Salvo que tengas una necesidad excelsa de instalarlo en otra ruta, mantén la que se establece por defecto, ya que más adelante emplearemos una herramienta que busca por defecto en esa ruta definida.
Creación y configuración del dispositivo emulado
Bien, si habéis pinchado en el enlace que os puse arriba hablando de la creación del entorno en Android Studio, habréis recordado el procedimiento para la creación de un dispositivo emulado (si no lo habéis hecho, este es otro buen momento para hacerlo). Haciendo un breve resumen, los pasos a seguir son los siguientes:
- Android Studio → More actions → Virtual Device Manager → Create Device
Para este post he elegido un dispositivo Pixel 7 con la versión Android 11.0 (API 30) que contenga Google Play. Recordaros que con esta configuración, el entorno será similar a uno de producción, por lo que el dispositivo por defecto no se encuentra rooteado (cosa que tiene sentido si lo que queremos es emplear Magisk para conseguir ese root:


Como recomendación personal, nunca utilicéis las últimas versiones de Android para vuestros emuladores ya que algunas herramientas o aplicaciones pueden dar errores o directamente no funcionar debido al corto periodo de adaptación que han podido tener.
En esta ocasión también vamos a instalar la aplicación Root Checker para verificar y validar que actualmente el dispositivo no se encuentra rooteado pero que posteriormente lo estará:
Instalamos la aplicación arrastrándola encima del emulador o bien ejecutando el comando adb install <Nombre de la aplicación>:


Si hacemos memoria, para poder instalar Magisk en nuestro dispositivo físico y conseguir ser superusuario teníamos que habilitar las opciones de desarrollador para desbloquear la depuración por USB así como desbloquear el OEM. ¿Se podrá replicar el procedimiento empleado en ese escenario para un dispositivo emulado? Vamos a comprobarlo y salimos de dudas.
- Settings→ About emulated device → Pulsar 7 veces en Build number

- Settings → System → Developer options

Por si alguno se lo había preguntado, efectivamente la depuración por USB en los dispositivos emulados viene habilitada por defecto, y es por ello por lo que se pueden utilizar herramientas como adb desde la creación del mismo sin tener que habilitar estas opciones:

Sin embargo, por mucho que busquemos la opción para deshabilitar el desbloqueo del OEM ya os adelanto que no la vais a encontrar. En los dispositivos emulados esta opción no existe y tiene todo el sentido del mundo: dicha opción permite, entre otras cosas, la modificación del sistema operativo de Android, pero en Android Studio si no te gusta el dispositivo que has emulado pues creas otro. No existe el modo Recovery, por lo que no hay bootloader que desbloquear. De hecho podéis comprobar vosotros mismos que si ejecutais el comando adb reboot bootloader no ocurre nada.
Pero no os preocupéis, tenemos una manera bastante mas rápida y sencilla de rootear el dispositivo con Magisk que la que se emplea en los móviles físicos.
Antes de comenzar: Añadir al Path la herramienta adb
Quizá ya lo tengáis correctamente configurado pero por si acaso vamos a explicar cómo añadir la herramienta adb al path de Windows para poder ejecutarla desde cualquier directorio, lo cual será necesario para la realización del procedimiento sin contratiempos.
Para ello, haremos lo siguiente:
- Sistema → Configuración avanzada del sistema → Variables de entorno

- Variables del sistema → Path → Editar

- Nuevo → Añadir la ruta de la carpeta donde tengamos adb (platform-tools)

RECUERDA: Al descargar Android Studio e instalar las SDK Tools, la carpeta de platform-tools con adb se encuentra por defecto en el directorio:
- C:\Users\\AppData\Local\Android\Sdk\platform-tools
Herramienta para la instalación de Magisk: rootAVD
La descripción de la herramienta rootAVD dice literalmente ser un script para rootear AVDs ejecutándose con el emulador QEMU desde Android Studio. Usando mis palabras, es una herramienta que rootea un dispositivo emulado basado en QEMU (emulador de procesadores basado en la traducción dinámica de binarios) desde el software Android Studio. Podéis encontrar la herramienta en Github, pero en dicho repositorio dicen que donde se encuentra actualizada es en GitLab, así que os dejo ambos enlaces pero utilizar este último:
Para descargarla tenemos dos opciones: podemos ejecutar el comando git clone junto con el enlace del repositorio desde Powershell si tenemos instalado en nuestro ordenador Git (Descargar Git para Windows) o si lo quisiéramos descargar en una máquina Linux (aunque ya sabéis que para las auditorías móviles trabajamos en Windows). También podéis descargarlo desde el repositorio de GitLab desde la pestaña Code en formato zip como podéis ver a continuación:

Una vez descargado (y descomprimido si hubiese sido necesario) podemos acceder a la carpeta de la herramienta. Si nos fijamos, dentro de esta encontramos la herramienta Magisk comprimida en formato zip preparada para su instalación en el sistema del emulador, pero si prestamos atención a la versión comprobamos que la que se encuentra lista para instalar es la v26.4. Sin embargo, la última versión disponible en su repositorio oficial es la v.28.0 (a fecha de la redacción de este post). Esto se debe, por lo que he podido leer y deducir (ya que no lo especifican en el propio repositorio) a que van incorporando las versiones en función de los parches y de la estabilidad que obtienen durante su desarrollo. No olvidemos que trabajar en entornos virtualizados no es lo mismo que hacerlo en dispositivos físicos. Igualmente, durante el proceso de instalación tendremos la opción de instalar la versión v.27 (que es la última versión estable oficial) en lugar de la que es considerada la versión estable local.
Una vez aclarado esto, tenemos todo listo para poder ejecutar la herramienta. Si revisamos el repositorio, podemos observar los pasos a seguir en el proceso, incluso varios pequeños videos de su ejecución en distintos sistemas operativos. Os dejo el de Windows para que lo tengáis a mano:
Antes de lanzar la herramienta, vamos a ejecutar desde la consola el siguiente comando para configurar las variables de entorno para su funcionamiento:
set PATH=%LOCALAPPDATA%\Android\Sdk\platform-tools;%PATH% system-images\android-$API\google_apis_playstore\x86_64\
Una vez hecho esto ya podemos ejecutar la herramienta siguiendo los siguientes pasos:
1. Desde la carpeta rootAVD ejecutamos rootAVD.bat:

2. Listamos todas las máquinas virtuales con el parámetro ListAllAVDs:

3. Seleccionamos el emulador que estamos utilizando, la cual se puede diferenciar por la versión de la API (30 para Android 11.0) y la imagen utilizada (x86):

4. Ahora hay que estar atentos porque durante el proceso habrá una interrupción en la que tendremos que elegir la versión que queremos intalar. Por defecto si no tocamos nada, se instalará la versión que aparece descargada en la carpeta, pero a nosotros nos interesa instalar la versión estable más reciente, que como hemos dicho anteriormente es la v.27.0. Por tanto, escribiremos un 2 y le daremos al Enter en este punto:

Tras esto dejaremos que el proceso termine automáticamente, lo que hará que el dispositivo emulado se cierre automáticamente, así que no os preocupeis que es lo normal. Una vez hecho esto iniciaremos el dispositivo en modo Cold Boot, que reiniciará nuestro Android al completo:


Una vez tengamos el emulador operativo y accedamos a la aplicación de Magisk, esta nos pedirá que necesita hacer una configuración adicional y volver a reiniciar:

En este momento tenemos la aplicación instalada de manera correcta y el dispositivo se encuentra rooteado:

Para comprobarlo, abriremos nuestra cmd para abrir una shell en el dispositivo empleando adb shell para posteriormente ejecutar el comando su. Nos aparecerá una ventana en el dispositivo con la cual tendremos que otorgarle permisos de superusuario a la consola como se muestra a continuación:

Podremos comprobar dónde otorgamos permisos de superusuario en la pestaña Superuser de la aplicación Magisk:

En este momento, si volvemos a ejecutar la aplicación Root Checker nos volverá a aparecer el cuadro para otorgar el permiso en esta aplicación y nos indicará que somos root:


IMPORTANTE: Una gran ventaja del uso de Magisk es que podemos retirar los derechos de superusuario en cualquier momento de cualquier aplicación a la que se lo hayamos otorgado previamente. Esto nos permitiría ejecutar aplicaciones que tengan detección de estos permisos. Como ejemplo, a continuación se muestra como podemos revertir la detección de root de la aplicación anterior:


Instalación del certificado de Burp Suite a través de Magisk
A pesar de que este proceso ya lo hayamos visto en anteriores ocasiones, creo que este post merece repasar la explicación (es necesario que tengamos instalado Burp Suite). Abrimos este software con el emulador Android funcionando como lo habíamos dejado anteriormente. Configuramos ambas partes para tunelizar el tráfico de la siguiente manera:
- Burp Suite:
- Proxy → Proxy Settings → Add → Añadimos la IP de nuestra máquina Windows

- Emulador Android:
- Settings → Network & interfaces → Wifi → Network Details → Edit → Proxy → Manual → Añadir la misma IP y puerto que en Burp Suite

En función del modelo de dispositivo que hayáis emulado quizá los pasos anteriores varíen un poco, pero la esencia es la misma. Es importante que deshabilitéis los datos y solo funcione el wifi en el emulador para que esto que estamos haciendo tenga sentido.
Si todo ha ido bien y la configuración es correcta, no vais a poder navegar por Internet desde el buscador del emulador:

Donde si podremos acceder será a la ruta http://burpsuite desde donde descargaremos e instalaremos su certificado CA modificando la extensión bajo el nombre cacert.cer. Es posible que el certificado tengas que instalarlo desde Settings si no te deja hacerlo automáticamente:

Una vez tenemos el certificado instalado, vamos a descargar el módulo de Magisk que nos permite mover el certificado que acabamos de descargar al sistema para que se pueda interceptar el tráfico http. Para ello tendremos que descargarlo en Windows y mover el archivo a nuestro Android ya que el proxy del emulador no nos permite el tráfico por Internet (o bién deshabilitar el proxy, descargarlo y volverlo a habilitar, per es más follón).
Teniendo en Android el archivo, accederemos a la aplicación Magisk y en la pestaña Módulos seleccionaremos la opción Instalar desde almacenamiento, y elegiremos el archivo zip del módulo que se encontrará en la carpeta de Downloads:


Nos pedirá un reinicio del dispositivo tras el cual el proceso se habrá realizado con éxito. Podemos comprobarlo revisando los certificados de confianza del sistema:


Ahora podemos navegar y comprobar que nuestro tráfico está pasando por Burp Suite:

Frida a través de Magisk
Seguramente después de haber visto el módulo de Magisk para la instalación del certificado de Burp Suite muchos os habréis preguntado si esta herramienta también tiene un módulo relacionado con frida. En efecto, lo tiene. Si habéis investigado un poco sobre Magisk quizá hayáis encontrado varias webs oficiales en las que te hablan de los módulos que podéis encontrar. Algunos ejemplos son:
Recordaros que si no habéis instalado Frida todavía o tenéis alguna duda al respecto, podéis encontrar toda la información necesaria en nuestro tutorial completo sobre evasión de SSL Pinning en aplicaciones Android.
Para verificar que efectivamente hay algunas peticiones http que no podemos interceptar debido al ssl pinning, vamos a descargar e instalar una aplicación diseñada para la realización de pruebas llamada AndroGoat:
Una vez instalada, la abriremos y pincharemos en la primera opción llamada Network Intercepting:

En este apartado encontramos 3 botones. Con Burp Suite abierto y con la configuración del proxy realizada previamente vamos a pinchar en el botón https para verificar que funciona correctamente:

Sin embargo, al pinchar en el botón de Certificate Pinning no ocurre nada, como era de esperar:

Una vez realizada esta comprobación, vamos a instalar el módulo de Frida que va a permitirnos poder utilizar la herramienta para evadir el ssl pinning. Este módulo lo que hará será instalar y ejecutar el frida-server dentro del emulador Android. Este se encuentra en el siguiente enlace:
Para garantizar su funcionamiento, tenemos que asegurarnos que la versión de Frida instalada en nuestro ordenador sea la misma que la versión del módulo que vamos a instalar en el dispositivo. Como la versión que estamos descargando es la última, lo que haremos será actualizar el Frida desde la consola con el siguiente comando:
pip3 install --upgrade frida

En caso de que os salga algún error, actualizar las frida-tools mediante pip install frida-tools o seleccionando las versiones que queréis instalar a mano de la siguiente manera:
pip install frida==16.5.9 frida-tools==13.6.0
Una vez tenemos todo en sintonía, procedemos a la instalación del módulo de la misma manera que lo hicimos con el anterior. Desde la pestaña módulos de Magisk escogemos el archivo zip que hemos introducido en el dispositivo previamente:

Para comprobar que todo ha funcionado correctamente, desde nuestra consola podemos abrir una terminal en el emulador con un adb shell y siendo root ejecutar el comando netstat -tupln donde podremos visualizar rápidamente que hay un proceso de frida-server corriendo en el puerto 27042:

Sabiendo que el frida-server está funcionando, ya podemos ejecutar Frida para poder hacerle el bypass al ssl pinning. Volvemos a abrir AndroGoat para que Frida y Objection la encuentren y vamos a ejecutar los siguientes comandos:
- Frida-ps -Uai → Listamos las aplicaciones en ejecución del emulador.
- Objection -g explore → Ejecutamos Objection indicándole el PID de la aplicación para operar con ella (también se puede hacer con el nombre pero este tiene muchos espacios y guiones y puede dar error).
- Android ssl pinning disabled → Comando para hacer el bypass al ssl pinning.

Ahora que tenemos todo listo volvemos a pulsar el botón de Certificate Pinning de la aplicación e interceptamos la petición perfectamente:

Además podemos corroborar dicho bypass desde Objection ya que en la consola aparecen las llamadas a las funciones que se han manipulado para poder interceptar el tráfico:

Conclusión
Siendo sincero, esta nueva configuración del entorno virtualizado utilizando Magisk y sus módulos es mucho más cómoda y fácil de configurar que la manera estándar que habíamos visto previamente en otros posts. Os recomiendo encarecidamente que lo probéis, aunque pueda parecer largo es un proceso súper rápido y que no da errores de ningún tipo.
Espero que os haya gustado y que os sirva para poder trabajar cómodamente si no disponéis de un dispositivo físico. ¿Os gusta Magisk? ¿Lo habíais utilizado ya? Contarme vuestra experiencia, os leo abajo!
Gracias por estar al otro lado! Un abrazo! 🙂