Pruebas de penetracion a aplicaciones moviles — comandos
Pasar archivos de aab a apk.
Los archivos AAB (Android App Bundle) es el formato de archivo que exige google play para cargar la aplicación a la tienda en lugar del formato APK que todos conocemos.
Comandos:
- java -jar bundletool.jar build-apks — bundle=aplicacion.aab — output aplicacion.apks — mode=universal
- mv aplicacion.apks aplicacion.zip
- unzip aplicacion.zip
- java -jar uber-apk-signer-1.2.1.jar -a universal.apk
Interacción con el ADB
El adb (Android Debug Bridge) es una herramienta de terminal de comandos para equipos de computo, la cual permite a un usuario interactuar con el dispositivo android de forma remota y controlar las funciones de debug del mismo.
A continuación se mostraran algunos comandos útiles sobre la herramienta:
Comandos:
Mostrar dispositivos conectados al pc:
- adb devicesInstalar apk en un dispositivo especifico:
- adb -s {dispo_id} install aplicacion.apkBuscar el nombre del paquete dentro del dispositivo:
- adb -s {dispo_id} shell pm list packages | grep {ref}Localizar la ruta logica del paquete dentro del dispositivo:
- adb -s {dispo_id} shell pm path co.com.aplicacionDescargar archivo dentro del dispositivo:
- adb -s {dispo_id} pull /ruta/archivo/android /ruta/localCargar Archivo al dispositivo android
- adb -s {dispo_id} push /ruta/archivo/local /ruta/androidEjecutar una actividad de la aplicación:
- adb -s {dispo_id} shell am start -n co.com.aplicacion/app.modules.login.login.view.LoginActivityApagar servidor adb:
- adb kill-serverEjecutar la terminal de comandos del dispositivo:
- adb -s {dispo_id} shell
Una vez se accede a la terminal del dispositivo, al estar basado el sistema en UNIX, podemos ejecutar comandos conocidos en linux en esta terminal
Elevar los privilegios del usuario
- suBuscar directorios y archivos relacionados al paquete android
- find / -name “*co.com.aplicacion*” 2>/dev/null
Implementar un Hombre en Medio para capturar el trafico SSL
A este proceso se le conoce como “SSL Unpinning”, el proceso consta de modificar la aplicación, para que acepte certificados auto-firmados por el usuario y los implemente en la navegación de la aplicación. Permitiendo así que un usuario pueda configurar un proxy y visualizar en texto plano las peticiones HTTP.
La ejecución de este paso, depende en gran medida de la tecnología y configuraciones aplicadas a la apk, por lo que no es un proceso que funcione 100% en todas las aplicaciones móviles.
Las herramientas mas comunes para ejecutar estos procesos son:
Comandos:
- apk-mitm {apk}
- reflutter {apk}
- frida — codeshare pcipolloni/universal-android-ssl-pinning-bypass-with-frida -f co.com.aplicacion — no-pause
- objection (android sslpinning disable — quiet)
Manipulación de la aplicación con Frida y Objection
Frida, es una herramienta de análisis dinámico, la cual le permite a un usuario manipular la ejecución de una aplicación móvil en tiempo real. A través de esta herramienta, es posible alterar el comportamiento de la aplicación a través de una manipulación directa de los valores de entrada y de salida sin alterar el código fuente de la aplicación.
Instalación de frida:
Para instalar frida, se siguen los siguientes pasos:
1- Tener instalado python 3
2- Ejecutar el comando pip en la terminal: pip install frida-tools
3- Verificar la instalacion con el comando: frida — version
NOTA: En los sistemas windows, es común que el paquete no sea reconocido en la terminal de comandos, por lo que toca buscar en donde quedo el archivo frida.exe y agregar la ruta a las variables del sistema.
Una vez se tenga instalado frida en el equipo de computo, se requiere instalar frida en el dispositivo móvil. Para esto, se hace uso de los archivos expuestos en el repositorio de github de frida, en donde para dispositivos android se descarga alguno de los siguientes archivos, dependiendo de la arquitectura de tu equipo móvil.
android-arm:
https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-arm.xz
android-arm64: https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-arm64.xz
android-x86: https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-x86.xz
android-x86_64: https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-x86_64.xz
“Para dispositivos IOS, frida es instalado desde la aplicación Cydia. Pero eso es tema para otro post.”
Para instalar y ejecutar frida en el dispositivo móvil, se debe de descomprimir el archivo .xz y mover su contenido a una ruta dentro del dispositivo. Este archivo puede ser descomprimido con winrar, 7zip, o desde la terminal de comandos con el comando:
sudo apt-get install xz-utils
unxz file.xz
Y para colocar el archivo de frida dentro del dispositivo móvil, hacer uso del ADB y del comando push para cargar el archivo al dispositivo.
adb -s {dispo_id} push archivo-frida /ruta/android
Finalmente, acceder al dispositivo móvil a través de la terminal del adb y asignar permisos de ejecución para posteriormente ejecutar el script de frida.
adb -s {dispo_id} shell
su
cd /ruta/archivo-frida
chmod +x archivo-frida
./ archivo-frida &
Una vez ejecutado frida en el dispositivo móvil ya es posible a través de la terminal de comandos del equipo de computo, ejecutar comandos directamente sobre el dispositivo para manipular una aplicación:
Comandos:
Listar dispositivos conectados al equipo de computo.
- frida-ls-devicesEjecutar script desde el repositorio codeshare
- frida — codeshare repo/script -f co.com.aplicacion — no-pauseEjecutar script desde un archivo local
- frida -U — no-pause -l script.js -f co.com.aplicacionlistar procesos
- frida-ps -Uia
Sin embargo, para poder aprovechar todo el potencial que nos ofrece frida, podemos hacer uso de la herramienta objection.
Objection es una caja de herramientas impulsada por frida, para realizar una evaluación mas profunda sobre las aplicaciones móviles y mas amigable con el usuario final.
Para instalar Objection, solo hace falta ejecutar el comando de instalación pip en la terminal de comandos:
pip3 install objection
Una vez instalado podemos hacer uso de esta herramienta y aprovechar el potencial de frida de mejor manera.
Comandos:
Iniciar Objection
- objection -g co.com.aplicacion exploreListar actividades de la aplicación
- android hooking list activitiesBuscar clases del paquete
- android hooking search classes co.com.aplicacionListar Clases del paquete
- android hooking list classesHacer debug clase la clase de un paquete
- android hooking watch class {clase} — dump-args — dump-returnBuscar métodos de una clase
- android hooking search methods co.com.aplicacion LoginActivityListar métodos de una clase y sus parámetros en Objection
- android hooking list class_methods co.com.aplicacion.app.modules.login.login.view.LoginActivityHacer debug de un método de una clase
- android hooking watch class_method co.com.aplicacion.app.modules.login.login.view.LoginActivity.login — dump-args — dump-returnListar actividad actual en la aplicación
- android hooking get current_activityModificar valor de retorno de un método sobre una actividad especifica
- android hooking set return_value co.com.aplicacion.app.modules.login.login.view.LoginActivity.captcha trueLlamar una actividad directamente
- android intent co.com.aplicacion.app.modules.login.login.view.LoginActivityDeshabilitar el SSLPinning de la aplicación
- android sslpinning disable — quietDeshabilitar la detección de configuraciones root en el dispositivo
- android root disable — quiet
En los dispositivos IOS, la ejecución de la herramienta objection varia un poco en cuanto a las acciones que puede ejecutar un atacante, sin embargo se pueden ejecutar acciones como
Comandos:
Listar bundles en el dispositivo
- ios bundles list_bundlesExplorar módulos de la memoria del dispositivo
memory list modulesBuscar clases de un ejecutable
- ios hooking search classes EXECListar métodos de una clase
- ios hooking list class_methods {clase}Buscar métodos que contengan una palabra especifica
- ios hooking search methods {palabra}Hacer debug a todos los metodos de una clase
- ios hooking watch class {clase}Hacer debug a un metodo en especifico
- ios hooking watch method “-[{nombre de la clase} {nombre del metodo}]” — dump-args — dump-return — dump-backtraceCambiar valor de retorno
- ios hooking set return_value “-[{nombre de la clase} {nombre del metodo}]” false
Como tip adicional, dejare los comandos que me fueron útiles para descargar el archivo .ipa de una aplicación en IOS, cuando esta sea descargada directamente desde la tienda de aplicaciones. Esto nos sera útil cuando se requiera hacer algún análisis estático sobre la aplicación.
ssh root@IP-IOS (Password alpine)
ls /var/containers/Bundle/Application/* | grep -B 2 -i ‘Nombre del paquete’
cd /var/containers/Bundle/Application/HASH-RUTA
mkdir payload
cp -r Aplicacion.app/ payload/
mkdir /var/root/IPA/
zip -r /var/root/IPA/app.ipa payload/sftp root@IP-IOS
cd /var/root/IPA
get app.ipa
Espero les sirva.
Hasta la próxima.