Pentesting de Aplicaciones Android

tip

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Fundamentos de Aplicaciones Android

Se recomienda encarecidamente comenzar a leer esta p谩gina para conocer las partes m谩s importantes relacionadas con la seguridad de Android y los componentes m谩s peligrosos en una aplicaci贸n Android:

Android Applications Basics

ADB (Android Debug Bridge)

Esta es la herramienta principal que necesitas para conectarte a un dispositivo android (emulado o f铆sico).
ADB permite controlar dispositivos ya sea a trav茅s de USB o Red desde una computadora. Esta utilidad habilita la copia de archivos en ambas direcciones, instalaci贸n y desinstalaci贸n de aplicaciones, ejecuci贸n de comandos de shell, respaldo de datos, lectura de registros, entre otras funciones.

Echa un vistazo a la siguiente lista de Comandos ADB para aprender a usar adb.

Smali

A veces es interesante modificar el c贸digo de la aplicaci贸n para acceder a informaci贸n oculta (quiz谩s contrase帽as o flags bien ofuscados). Entonces, podr铆a ser interesante descompilar el apk, modificar el c贸digo y recompilarlo.
En este tutorial puedes aprender a descompilar un APK, modificar el c贸digo Smali y recompilar el APK con la nueva funcionalidad. Esto podr铆a ser muy 煤til como una alternativa para varias pruebas durante el an谩lisis din谩mico que se van a presentar. Entonces, siempre ten en cuenta esta posibilidad.

Otros trucos interesantes

bash
adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • Combina todos los splits y apks base con APKEditor:
bash
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

An谩lisis Est谩tico

Primero que nada, para analizar un APK deber铆as echar un vistazo al c贸digo Java usando un decompilador.
Por favor, lee aqu铆 para encontrar informaci贸n sobre diferentes decompiladores disponibles.

Buscando informaci贸n interesante

Solo echando un vistazo a las cadenas del APK puedes buscar contrase帽as, URLs (https://github.com/ndelphit/apkurlgrep), claves api, cifrado, uuids de bluetooth, tokens y cualquier cosa interesante... busca incluso puertas traseras de ejecuci贸n de c贸digo o puertas traseras de autenticaci贸n (credenciales de administrador codificadas en la aplicaci贸n).

Firebase

Presta especial atenci贸n a las URLs de firebase y verifica si est谩 mal configurado. M谩s informaci贸n sobre qu茅 es Firebase y c贸mo explotarlo aqu铆.

Comprensi贸n b谩sica de la aplicaci贸n - Manifest.xml, strings.xml

La examinaci贸n de los archivos _Manifest.xml** y **strings.xml_** de una aplicaci贸n puede revelar vulnerabilidades de seguridad potenciales**. Estos archivos se pueden acceder usando decompiladores o renombrando la extensi贸n del archivo APK a .zip y luego descomprimi茅ndolo.

Vulnerabilidades identificadas en el Manifest.xml incluyen:

  • Aplicaciones depurables: Las aplicaciones configuradas como depurables (debuggable="true") en el archivo Manifest.xml representan un riesgo ya que permiten conexiones que pueden llevar a la explotaci贸n. Para una mejor comprensi贸n sobre c贸mo explotar aplicaciones depurables, consulta un tutorial sobre c贸mo encontrar y explotar aplicaciones depurables en un dispositivo.
  • Configuraciones de respaldo: El atributo android:allowBackup="false" debe establecerse expl铆citamente para aplicaciones que manejan informaci贸n sensible para prevenir copias de seguridad no autorizadas a trav茅s de adb, especialmente cuando la depuraci贸n por usb est谩 habilitada.
  • Seguridad de red: Configuraciones de seguridad de red personalizadas (android:networkSecurityConfig="@xml/network_security_config") en res/xml/ pueden especificar detalles de seguridad como pines de certificado y configuraciones de tr谩fico HTTP. Un ejemplo es permitir tr谩fico HTTP para dominios espec铆ficos.
  • Actividades y servicios exportados: Identificar actividades y servicios exportados en el manifiesto puede resaltar componentes que podr铆an ser mal utilizados. Un an谩lisis adicional durante las pruebas din谩micas puede revelar c贸mo explotar estos componentes.
  • Proveedores de contenido y FileProviders: Proveedores de contenido expuestos podr铆an permitir acceso no autorizado o modificaci贸n de datos. La configuraci贸n de los FileProviders tambi茅n debe ser examinada.
  • Receptores de difusi贸n y esquemas de URL: Estos componentes podr铆an ser aprovechados para la explotaci贸n, prestando especial atenci贸n a c贸mo se gestionan los esquemas de URL para vulnerabilidades de entrada.
  • Versiones de SDK: Los atributos minSdkVersion, targetSDKVersion y maxSdkVersion indican las versiones de Android soportadas, destacando la importancia de no soportar versiones de Android obsoletas y vulnerables por razones de seguridad.

Del archivo strings.xml, se puede descubrir informaci贸n sensible como claves API, esquemas personalizados y otras notas de desarrollador, subrayando la necesidad de una revisi贸n cuidadosa de estos recursos.

Tapjacking

Tapjacking es un ataque donde una aplicaci贸n maliciosa se lanza y se posiciona encima de una aplicaci贸n v铆ctima. Una vez que oculta visiblemente la aplicaci贸n v铆ctima, su interfaz de usuario est谩 dise帽ada de tal manera que enga帽a al usuario para que interact煤e con ella, mientras pasa la interacci贸n a la aplicaci贸n v铆ctima.
En efecto, est谩 cegando al usuario para que no sepa que realmente est谩 realizando acciones en la aplicaci贸n v铆ctima.

Encuentra m谩s informaci贸n en:

Tapjacking

Secuestro de Tareas

Una actividad con el launchMode configurado como singleTask sin ninguna taskAffinity definida es vulnerable al secuestro de tareas. Esto significa que una aplicaci贸n puede ser instalada y si se lanza antes que la aplicaci贸n real, podr铆a secuestrar la tarea de la aplicaci贸n real (por lo que el usuario estar谩 interactuando con la aplicaci贸n maliciosa pensando que est谩 usando la real).

M谩s informaci贸n en:

Android Task Hijacking

Almacenamiento de datos inseguro

Almacenamiento Interno

En Android, los archivos almacenados en el almacenamiento interno est谩n dise帽ados para ser accesibles exclusivamente por la aplicaci贸n que los cre贸. Esta medida de seguridad es aplicada por el sistema operativo Android y generalmente es adecuada para las necesidades de seguridad de la mayor铆a de las aplicaciones. Sin embargo, los desarrolladores a veces utilizan modos como MODE_WORLD_READABLE y MODE_WORLD_WRITABLE para permitir que los archivos sean compartidos entre diferentes aplicaciones. Sin embargo, estos modos no restringen el acceso a estos archivos por otras aplicaciones, incluidas las potencialmente maliciosas.

  1. An谩lisis Est谩tico:
  • Aseg煤rate de que el uso de MODE_WORLD_READABLE y MODE_WORLD_WRITABLE sea examinado cuidadosamente. Estos modos pueden potencialmente exponer archivos a acceso no intencionado o no autorizado.
  1. An谩lisis Din谩mico:
  • Verifica los permisos establecidos en los archivos creados por la aplicaci贸n. Espec铆ficamente, verifica si alg煤n archivo est谩 configurado para ser legible o escribible a nivel mundial. Esto puede representar un riesgo de seguridad significativo, ya que permitir铆a que cualquier aplicaci贸n instalada en el dispositivo, independientemente de su origen o intenci贸n, lea o modifique estos archivos.

Almacenamiento Externo

Al tratar con archivos en almacenamiento externo, como tarjetas SD, se deben tomar ciertas precauciones:

  1. Accesibilidad:
  • Los archivos en almacenamiento externo son globalmente legibles y escribibles. Esto significa que cualquier aplicaci贸n o usuario puede acceder a estos archivos.
  1. Preocupaciones de Seguridad:
  • Dada la facilidad de acceso, se recomienda no almacenar informaci贸n sensible en almacenamiento externo.
  • El almacenamiento externo puede ser removido o accedido por cualquier aplicaci贸n, haci茅ndolo menos seguro.
  1. Manejo de Datos desde Almacenamiento Externo:
  • Siempre realiza validaci贸n de entrada en los datos recuperados del almacenamiento externo. Esto es crucial porque los datos provienen de una fuente no confiable.
  • Almacenar ejecutables o archivos de clase en almacenamiento externo para carga din谩mica est谩 fuertemente desaconsejado.
  • Si tu aplicaci贸n debe recuperar archivos ejecutables del almacenamiento externo, aseg煤rate de que estos archivos est茅n firmados y verificados criptogr谩ficamente antes de ser cargados din谩micamente. Este paso es vital para mantener la integridad de seguridad de tu aplicaci贸n.

El almacenamiento externo puede ser accedido en /storage/emulated/0, /sdcard, /mnt/sdcard

nota

A partir de Android 4.4 (API 17), la tarjeta SD tiene una estructura de directorio que limita el acceso de una aplicaci贸n al directorio que es espec铆ficamente para esa aplicaci贸n. Esto previene que aplicaciones maliciosas obtengan acceso de lectura o escritura a los archivos de otra aplicaci贸n.

Datos sensibles almacenados en texto claro

  • Preferencias compartidas: Android permite a cada aplicaci贸n guardar f谩cilmente archivos xml en la ruta /data/data/<packagename>/shared_prefs/ y a veces es posible encontrar informaci贸n sensible en texto claro en esa carpeta.
  • Bases de datos: Android permite a cada aplicaci贸n guardar f谩cilmente bases de datos sqlite en la ruta /data/data/<packagename>/databases/ y a veces es posible encontrar informaci贸n sensible en texto claro en esa carpeta.

TLS Roto

Aceptar Todos los Certificados

Por alguna raz贸n, a veces los desarrolladores aceptan todos los certificados incluso si, por ejemplo, el nombre de host no coincide con l铆neas de c贸digo como la siguiente:

java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Una buena manera de probar esto es intentar capturar el tr谩fico usando alg煤n proxy como Burp sin autorizar el Burp CA dentro del dispositivo. Adem谩s, puedes generar con Burp un certificado para un nombre de host diferente y usarlo.

Criptograf铆a Rota

Procesos de Gesti贸n de Claves Pobres

Algunos desarrolladores guardan datos sensibles en el almacenamiento local y los encriptan con una clave codificada/predictible en el c贸digo. Esto no deber铆a hacerse, ya que alguna ingenier铆a inversa podr铆a permitir a los atacantes extraer la informaci贸n confidencial.

Uso de Algoritmos Inseguros y/o Obsoletos

Los desarrolladores no deber铆an usar algoritmos obsoletos para realizar verificaciones de autorizaci贸n, almacenar o enviar datos. Algunos de estos algoritmos son: RC4, MD4, MD5, SHA1... Si se utilizan hashes para almacenar contrase帽as, por ejemplo, se deber铆an usar hashes resistentes a fuerza bruta con sal.

Otras verificaciones

  • Se recomienda ofuscar el APK para dificultar el trabajo de ingenier铆a inversa a los atacantes.
  • Si la aplicaci贸n es sensible (como las aplicaciones bancarias), deber铆a realizar sus propias verificaciones para ver si el m贸vil est谩 rooteado y actuar en consecuencia.
  • Si la aplicaci贸n es sensible (como las aplicaciones bancarias), deber铆a verificar si se est谩 utilizando un emulador.
  • Si la aplicaci贸n es sensible (como las aplicaciones bancarias), deber铆a verificar su propia integridad antes de ejecutarse para comprobar si ha sido modificada.
  • Usa APKiD para verificar qu茅 compilador/empaquetador/ofuscador se utiliz贸 para construir el APK.

Aplicaci贸n React Native

Lee la siguiente p谩gina para aprender c贸mo acceder f谩cilmente al c贸digo javascript de las aplicaciones React:

React Native Application

Aplicaciones Xamarin

Lee la siguiente p谩gina para aprender c贸mo acceder f谩cilmente al c贸digo C# de una aplicaci贸n xamarin:

Xamarin Apps

Aplicaciones Superempaquetadas

Seg煤n esta entrada de blog, superempaquetado es un algoritmo Meta que comprime el contenido de una aplicaci贸n en un solo archivo. El blog habla sobre la posibilidad de crear una aplicaci贸n que descomprima este tipo de aplicaciones... y una forma m谩s r谩pida que implica ejecutar la aplicaci贸n y recopilar los archivos descomprimidos del sistema de archivos.

An谩lisis Est谩tico Automatizado de C贸digo

La herramienta mariana-trench es capaz de encontrar vulnerabilidades mediante escanear el c贸digo de la aplicaci贸n. Esta herramienta contiene una serie de fuentes conocidas (que indican a la herramienta los lugares donde la entrada es controlada por el usuario), sumideros (que indican a la herramienta lugares peligrosos donde la entrada maliciosa del usuario podr铆a causar da帽os) y reglas. Estas reglas indican la combinaci贸n de fuentes-sumideros que indica una vulnerabilidad.

Con este conocimiento, mariana-trench revisar谩 el c贸digo y encontrar谩 posibles vulnerabilidades en 茅l.

Secretos filtrados

Una aplicaci贸n puede contener secretos (claves API, contrase帽as, URLs ocultas, subdominios...) dentro de ella que podr铆as descubrir. Podr铆as usar una herramienta como https://github.com/dwisiswant0/apkleaks.

Bypass de Autenticaci贸n Biom茅trica

Bypass Biometric Authentication (Android)

Otras funciones interesantes

  • Ejecuci贸n de c贸digo: Runtime.exec(), ProcessBuilder(), native code:system()
  • Enviar SMS: sendTextMessage, sendMultipartTestMessage
  • Funciones nativas declaradas como native: public native, System.loadLibrary, System.load
  • Lee esto para aprender c贸mo revertir funciones nativas

Otros trucos

content:// protocol



An谩lisis Din谩mico

Primero que nada, necesitas un entorno donde puedas instalar la aplicaci贸n y todo el entorno (certificado Burp CA, Drozer y Frida principalmente). Por lo tanto, se recomienda encarecidamente un dispositivo rooteado (emulado o no).

An谩lisis din谩mico en l铆nea

Puedes crear una cuenta gratuita en: https://appetize.io/. Esta plataforma te permite subir y ejecutar APKs, por lo que es 煤til para ver c贸mo se comporta un apk.

Incluso puedes ver los registros de tu aplicaci贸n en la web y conectarte a trav茅s de adb.

Gracias a la conexi贸n ADB, puedes usar Drozer y Frida dentro de los emuladores.

An谩lisis din谩mico local

Usando un emulador

  • Android Studio (Puedes crear dispositivos x86 y arm, y seg煤n estolas 煤ltimas versiones x86 soportan bibliotecas ARM sin necesidad de un emulador arm lento).
  • Aprende a configurarlo en esta p谩gina:

AVD - Android Virtual Device

  • Genymotion (Versi贸n gratuita: Edici贸n Personal, necesitas crear una cuenta. Se recomienda descargar la versi贸n CON VirtualBox para evitar errores potenciales.)
  • Nox (Gratis, pero no soporta Frida o Drozer).

note

Al crear un nuevo emulador en cualquier plataforma, recuerda que cuanto m谩s grande sea la pantalla, m谩s lento funcionar谩 el emulador. As铆 que selecciona pantallas peque帽as si es posible.

Para instalar servicios de google (como AppStore) en Genymotion, necesitas hacer clic en el bot贸n marcado en rojo de la siguiente imagen:

Adem谩s, ten en cuenta que en la configuraci贸n de la VM de Android en Genymotion puedes seleccionar modo de red Bridge (esto ser谩 煤til si te conectar谩s a la VM de Android desde una VM diferente con las herramientas).

Usar un dispositivo f铆sico

Necesitas activar las opciones de depuraci贸n y ser铆a genial si puedes rootearlo:

  1. Configuraci贸n.
  2. (Desde Android 8.0) Selecciona Sistema.
  3. Selecciona Acerca del tel茅fono.
  4. Presiona N煤mero de compilaci贸n 7 veces.
  5. Regresa y encontrar谩s las Opciones de desarrollador.

Una vez que hayas instalado la aplicaci贸n, lo primero que debes hacer es probarla e investigar qu茅 hace, c贸mo funciona y familiarizarte con ella.
Te sugerir茅 realizar este an谩lisis din谩mico inicial usando el an谩lisis din谩mico de MobSF + pidcat, para que podamos aprender c贸mo funciona la aplicaci贸n mientras MobSF captura muchos datos interesantes que puedes revisar m谩s tarde.

Filtraci贸n de Datos No Intencionada

Registro

Los desarrolladores deben tener cuidado de exponer informaci贸n de depuraci贸n p煤blicamente, ya que puede llevar a filtraciones de datos sensibles. Se recomiendan las herramientas pidcat y adb logcat para monitorear los registros de la aplicaci贸n y proteger la informaci贸n sensible. Pidcat es preferido por su facilidad de uso y legibilidad.

warning

Ten en cuenta que desde versiones posteriores a Android 4.0, las aplicaciones solo pueden acceder a sus propios registros. As铆 que las aplicaciones no pueden acceder a los registros de otras aplicaciones.
De todos modos, sigue siendo recomendable no registrar informaci贸n sensible.

Cach茅 del Portapapeles

El marco basado en portapapeles de Android permite la funcionalidad de copiar y pegar en las aplicaciones, pero presenta un riesgo ya que otras aplicaciones pueden acceder al portapapeles, exponiendo potencialmente datos sensibles. Es crucial deshabilitar las funciones de copiar/pegar para secciones sensibles de una aplicaci贸n, como los detalles de tarjetas de cr茅dito, para prevenir filtraciones de datos.

Registros de Fallos

Si una aplicaci贸n se bloquea y guarda registros, estos registros pueden ayudar a los atacantes, especialmente cuando la aplicaci贸n no puede ser revertida. Para mitigar este riesgo, evita registrar en caso de fallos, y si los registros deben ser transmitidos a trav茅s de la red, aseg煤rate de que se env铆en a trav茅s de un canal SSL por seguridad.

Como pentester, intenta echar un vistazo a estos registros.

Datos de An谩lisis Enviados a Terceros

Las aplicaciones a menudo integran servicios como Google Adsense, que pueden inadvertidamente filtrar datos sensibles debido a una implementaci贸n incorrecta por parte de los desarrolladores. Para identificar posibles filtraciones de datos, es aconsejable interceptar el tr谩fico de la aplicaci贸n y verificar si se est谩 enviando informaci贸n sensible a servicios de terceros.

Bases de Datos SQLite

La mayor铆a de las aplicaciones utilizar谩n bases de datos SQLite internas para guardar informaci贸n. Durante el pentest, echa un vistazo a las bases de datos creadas, los nombres de tablas y columnas y todos los datos guardados porque podr铆as encontrar informaci贸n sensible (lo que ser铆a una vulnerabilidad).
Las bases de datos deber铆an estar ubicadas en /data/data/the.package.name/databases como /data/data/com.mwr.example.sieve/databases.

Si la base de datos est谩 guardando informaci贸n confidencial y est谩 encriptada pero puedes encontrar la contrase帽a dentro de la aplicaci贸n, sigue siendo una vulnerabilidad.

Enumera las tablas usando .tables y enumera las columnas de las tablas haciendo .schema <table_name>.

Drozer (Explotar Actividades, Proveedores de Contenido y Servicios)

Desde Drozer Docs: Drozer te permite asumir el rol de una aplicaci贸n Android e interactuar con otras aplicaciones. Puede hacer cualquier cosa que una aplicaci贸n instalada puede hacer, como hacer uso del mecanismo de Comunicaci贸n entre Procesos (IPC) de Android e interactuar con el sistema operativo subyacente.
Drozer es una herramienta 煤til para explotar actividades exportadas, servicios exportados y Proveedores de Contenido como aprender谩s en las siguientes secciones.

Explotando Actividades Exportadas

Lee esto si quieres refrescar qu茅 es una Actividad de Android.
Tambi茅n recuerda que el c贸digo de una actividad comienza en el m茅todo onCreate.

Bypass de Autorizaci贸n

Cuando una Actividad es exportada, puedes invocar su pantalla desde una aplicaci贸n externa. Por lo tanto, si una actividad con informaci贸n sensible est谩 exportada, podr铆as eludir los mecanismos de autenticaci贸n para acceder a ella.

Aprende c贸mo explotar actividades exportadas con Drozer.

Tambi茅n puedes iniciar una actividad exportada desde adb:

  • PackageName es com.example.demo
  • Exported ActivityName es com.example.test.MainActivity
bash
adb shell am start -n com.example.demo/com.example.test.MainActivity

NOTA: MobSF detectar谩 como malicioso el uso de singleTask/singleInstance como android:launchMode en una actividad, pero debido a esto, aparentemente esto solo es peligroso en versiones antiguas (versiones de API < 21).

nota

Ten en cuenta que un bypass de autorizaci贸n no siempre es una vulnerabilidad, depender铆a de c贸mo funcione el bypass y qu茅 informaci贸n est茅 expuesta.

Filtraci贸n de informaci贸n sensible

Las actividades tambi茅n pueden devolver resultados. Si logras encontrar una actividad exportada y desprotegida que llame al m茅todo setResult y devuelva informaci贸n sensible, hay una filtraci贸n de informaci贸n sensible.

Tapjacking

Si el tapjacking no se previene, podr铆as abusar de la actividad exportada para hacer que el usuario realice acciones inesperadas. Para m谩s informaci贸n sobre qu茅 es Tapjacking sigue el enlace.

Explotando Content Providers - Accediendo y manipulando informaci贸n sensible

Lee esto si quieres refrescar qu茅 es un Content Provider.
Los content providers se utilizan b谩sicamente para compartir datos. Si una aplicaci贸n tiene content providers disponibles, es posible que puedas extraer datos sensibles de ellos. Tambi茅n es interesante probar posibles inyecciones SQL y Path Traversals ya que podr铆an ser vulnerables.

Aprende c贸mo explotar Content Providers con Drozer.

Explotando Servicios

Lee esto si quieres refrescar qu茅 es un Servicio.
Recuerda que las acciones de un Servicio comienzan en el m茅todo onStartCommand.

Un servicio es b谩sicamente algo que puede recibir datos, procesarlos y devolver (o no) una respuesta. Entonces, si una aplicaci贸n est谩 exportando algunos servicios, deber铆as verificar el c贸digo para entender qu茅 est谩 haciendo y probarlo din谩micamente para extraer informaci贸n confidencial, eludir medidas de autenticaci贸n...
Aprende c贸mo explotar Servicios con Drozer.

Explotando Broadcast Receivers

Lee esto si quieres refrescar qu茅 es un Broadcast Receiver.
Recuerda que las acciones de un Broadcast Receiver comienzan en el m茅todo onReceive.

Un broadcast receiver estar谩 esperando un tipo de mensaje. Dependiendo de c贸mo el receptor maneje el mensaje, podr铆a ser vulnerable.
Aprende c贸mo explotar Broadcast Receivers con Drozer.

Puedes buscar deep links manualmente, utilizando herramientas como MobSF o scripts como este.
Puedes abrir un scheme declarado usando adb o un navegador:

bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

Tenga en cuenta que puede omitir el nombre del paquete y el m贸vil llamar谩 autom谩ticamente a la aplicaci贸n que deber铆a abrir ese enlace.

markup
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

C贸digo ejecutado

Para encontrar el c贸digo que se ejecutar谩 en la App, ve a la actividad llamada por el deeplink y busca la funci贸n onNewIntent.

Informaci贸n sensible

Cada vez que encuentres un deep link verifica que no est茅 recibiendo datos sensibles (como contrase帽as) a trav茅s de par谩metros de URL, porque cualquier otra aplicaci贸n podr铆a suplantar el deep link y robar esos datos!

Par谩metros en la ruta

Debes verificar tambi茅n si alg煤n deep link est谩 utilizando un par谩metro dentro de la ruta de la URL como: https://api.example.com/v1/users/{username}, en ese caso puedes forzar un recorrido de ruta accediendo a algo como: example://app/users?username=../../unwanted-endpoint%3fparam=value.
Ten en cuenta que si encuentras los endpoints correctos dentro de la aplicaci贸n, podr铆as causar un Open Redirect (si parte de la ruta se usa como nombre de dominio), toma de control de cuenta (si puedes modificar los detalles de los usuarios sin un token CSRF y el endpoint vulnerable us贸 el m茅todo correcto) y cualquier otra vulnerabilidad. M谩s info sobre esto aqu铆.

M谩s ejemplos

Un informe de bug bounty interesante sobre enlaces (/.well-known/assetlinks.json).

Inspecci贸n y fallos de verificaci贸n de la capa de transporte

  • Los certificados no siempre son inspeccionados adecuadamente por las aplicaciones de Android. Es com煤n que estas aplicaciones pasen por alto advertencias y acepten certificados autofirmados o, en algunos casos, vuelvan a usar conexiones HTTP.
  • Las negociaciones durante el apret贸n de manos SSL/TLS a veces son d茅biles, empleando suites de cifrado inseguras. Esta vulnerabilidad hace que la conexi贸n sea susceptible a ataques de hombre en el medio (MITM), permitiendo a los atacantes descifrar los datos.
  • La filtraci贸n de informaci贸n privada es un riesgo cuando las aplicaciones se autentican utilizando canales seguros pero luego se comunican a trav茅s de canales no seguros para otras transacciones. Este enfoque no protege los datos sensibles, como cookies de sesi贸n o detalles del usuario, de la interceptaci贸n por entidades maliciosas.

Verificaci贸n de certificados

Nos centraremos en la verificaci贸n de certificados. La integridad del certificado del servidor debe ser verificada para mejorar la seguridad. Esto es crucial porque las configuraciones TLS inseguras y la transmisi贸n de datos sensibles a trav茅s de canales no encriptados pueden representar riesgos significativos. Para pasos detallados sobre c贸mo verificar certificados de servidor y abordar vulnerabilidades, este recurso proporciona una gu铆a completa.

SSL Pinning

SSL Pinning es una medida de seguridad donde la aplicaci贸n verifica el certificado del servidor contra una copia conocida almacenada dentro de la propia aplicaci贸n. Este m茅todo es esencial para prevenir ataques MITM. Se recomienda encarecidamente implementar SSL Pinning para aplicaciones que manejan informaci贸n sensible.

Inspecci贸n de tr谩fico

Para inspeccionar el tr谩fico HTTP, es necesario instalar el certificado de la herramienta proxy (por ejemplo, Burp). Sin instalar este certificado, el tr谩fico encriptado podr铆a no ser visible a trav茅s del proxy. Para una gu铆a sobre c贸mo instalar un certificado CA personalizado, haz clic aqu铆.

Las aplicaciones que apuntan a API Level 24 y superiores requieren modificaciones en la Configuraci贸n de Seguridad de Red para aceptar el certificado CA del proxy. Este paso es cr铆tico para inspeccionar el tr谩fico encriptado. Para instrucciones sobre c贸mo modificar la Configuraci贸n de Seguridad de Red, consulta este tutorial.

Bypass de SSL Pinning

Cuando se implementa SSL Pinning, es necesario eludirlo para inspeccionar el tr谩fico HTTPS. Existen varios m茅todos disponibles para este prop贸sito:

  • Modificar autom谩ticamente el apk para eludir SSLPinning con apk-mitm. La mejor ventaja de esta opci贸n es que no necesitar谩s root para eludir el SSL Pinning, pero necesitar谩s eliminar la aplicaci贸n y reinstalar la nueva, y esto no siempre funcionar谩.
  • Podr铆as usar Frida (discutido a continuaci贸n) para eludir esta protecci贸n. Aqu铆 tienes una gu铆a para usar Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
  • Tambi茅n puedes intentar eludir autom谩ticamente SSL Pinning usando objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
  • Tambi茅n puedes intentar eludir autom谩ticamente SSL Pinning usando an谩lisis din谩mico de MobSF (explicado a continuaci贸n)
  • Si a煤n piensas que hay alg煤n tr谩fico que no est谩s capturando, puedes intentar redirigir el tr谩fico a burp usando iptables. Lee este blog: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

B煤squeda de vulnerabilidades web comunes

Es importante tambi茅n buscar vulnerabilidades web comunes dentro de la aplicaci贸n. La informaci贸n detallada sobre c贸mo identificar y mitigar estas vulnerabilidades est谩 m谩s all谩 del alcance de este resumen, pero se cubre extensamente en otros lugares.

Frida

Frida es un kit de herramientas de instrumentaci贸n din谩mica para desarrolladores, ingenieros de reversa e investigadores de seguridad.
Puedes acceder a la aplicaci贸n en ejecuci贸n y enganchar m茅todos en tiempo de ejecuci贸n para cambiar el comportamiento, cambiar valores, extraer valores, ejecutar diferentes c贸digos...
Si deseas hacer pentesting en aplicaciones de Android, necesitas saber c贸mo usar Frida.

Volcar memoria - Fridump

Verifica si la aplicaci贸n est谩 almacenando informaci贸n sensible dentro de la memoria que no deber铆a estar almacenando, como contrase帽as o mnemot茅cnicas.

Usando Fridump3 puedes volcar la memoria de la app con:

bash
# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Esto volcar谩 la memoria en la carpeta ./dump, y all铆 podr铆as grep con algo como:

bash
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Datos sensibles en Keystore

En Android, el Keystore es el mejor lugar para almacenar datos sensibles, sin embargo, con suficientes privilegios todav铆a es posible acceder a 茅l. Dado que las aplicaciones tienden a almacenar aqu铆 datos sensibles en texto claro, las pruebas de penetraci贸n deben verificarlo, ya que un usuario root o alguien con acceso f铆sico al dispositivo podr铆a ser capaz de robar estos datos.

Incluso si una aplicaci贸n almacena datos en el keystore, los datos deben estar cifrados.

Para acceder a los datos dentro del keystore, podr铆as usar este script de Frida: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Bypass de huellas dactilares/Biom茅tricos

Usando el siguiente script de Frida, podr铆a ser posible eludir la autenticaci贸n por huella dactilar que las aplicaciones de Android podr铆an estar realizando para proteger ciertas 谩reas sensibles:

bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Im谩genes de Fondo

Cuando pones una aplicaci贸n en segundo plano, Android almacena un instant谩nea de la aplicaci贸n para que cuando se recupere al primer plano, comience a cargar la imagen antes de la app, por lo que parece que la app se carg贸 m谩s r谩pido.

Sin embargo, si esta instant谩nea contiene informaci贸n sensible, alguien con acceso a la instant谩nea podr铆a robar esa informaci贸n (ten en cuenta que necesitas root para acceder a ella).

Las instant谩neas suelen almacenarse en: /data/system_ce/0/snapshots

Android proporciona una forma de prevenir la captura de pantalla configurando el par谩metro de dise帽o FLAG_SECURE. Al usar esta bandera, el contenido de la ventana se trata como seguro, impidiendo que aparezca en capturas de pantalla o que se vea en pantallas no seguras.

bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Analizador de Aplicaciones Android

Esta herramienta puede ayudarte a gestionar diferentes herramientas durante el an谩lisis din谩mico: https://github.com/NotSoSecure/android_application_analyzer

Inyecci贸n de Intents

Los desarrolladores a menudo crean componentes proxy como actividades, servicios y receptores de difusi贸n que manejan estos Intents y los pasan a m茅todos como startActivity(...) o sendBroadcast(...), lo que puede ser arriesgado.

El peligro radica en permitir que los atacantes activen componentes de la aplicaci贸n no exportados o accedan a proveedores de contenido sensibles al desviar estos Intents. Un ejemplo notable es el componente WebView que convierte URLs en objetos Intent a trav茅s de Intent.parseUri(...) y luego los ejecuta, lo que puede llevar a inyecciones de Intent maliciosas.

Conclusiones Esenciales

  • Inyecci贸n de Intents es similar al problema de Redirecci贸n Abierta en la web.
  • Los exploits implican pasar objetos Intent como extras, que pueden ser redirigidos para ejecutar operaciones inseguras.
  • Puede exponer componentes no exportados y proveedores de contenido a los atacantes.
  • La conversi贸n de URL a Intent de WebView puede facilitar acciones no intencionadas.

Inyecciones del Lado del Cliente en Android y otros

Probablemente conozcas este tipo de vulnerabilidades de la web. Debes tener especial cuidado con estas vulnerabilidades en una aplicaci贸n Android:

  • Inyecci贸n SQL: Al tratar con consultas din谩micas o Content-Providers, aseg煤rate de usar consultas parametrizadas.
  • Inyecci贸n de JavaScript (XSS): Verifica que el soporte de JavaScript y Plugins est茅 deshabilitado para cualquier WebView (deshabilitado por defecto). M谩s informaci贸n aqu铆.
  • Inclusi贸n de Archivos Locales: Los WebViews deben tener el acceso al sistema de archivos deshabilitado (habilitado por defecto) - (webview.getSettings().setAllowFileAccess(false);). M谩s informaci贸n aqu铆.
  • Cookies Eternas: En varios casos, cuando la aplicaci贸n android finaliza la sesi贸n, la cookie no se revoca o incluso podr铆a guardarse en el disco.
  • Secure Flag en cookies

An谩lisis Autom谩tico

MobSF

An谩lisis est谩tico

Evaluaci贸n de vulnerabilidades de la aplicaci贸n utilizando un bonito frontend basado en la web. Tambi茅n puedes realizar an谩lisis din谩mico (pero necesitas preparar el entorno).

bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Tenga en cuenta que MobSF puede analizar Android(apk), IOS(ipa) y Windows(apx) aplicaciones (Las aplicaciones de Windows deben ser analizadas desde un MobSF instalado en un host de Windows).
Adem谩s, si crea un archivo ZIP con el c贸digo fuente de una aplicaci贸n Android o IOS (vaya a la carpeta ra铆z de la aplicaci贸n, seleccione todo y cree un archivo ZIP), tambi茅n podr谩 analizarlo.

MobSF tambi茅n le permite realizar an谩lisis de diff/Comparar y integrar VirusTotal (necesitar谩 configurar su clave API en MobSF/settings.py y habilitarlo: VT_ENABLED = TRUE VT_API_KEY = <Su clave API> VT_UPLOAD = TRUE). Tambi茅n puede establecer VT_UPLOAD en False, entonces el hash se subir谩 en lugar del archivo.

An谩lisis din谩mico asistido con MobSF

MobSF tambi茅n puede ser muy 煤til para el an谩lisis din谩mico en Android, pero en ese caso necesitar谩 instalar MobSF y genymotion en su host (una VM o Docker no funcionar谩). Nota: Necesita iniciar primero una VM en genymotion y luego MobSF.
El analizador din谩mico de MobSF puede:

  • Volcar datos de la aplicaci贸n (URLs, registros, portapapeles, capturas de pantalla realizadas por usted, capturas de pantalla realizadas por "Exported Activity Tester", correos electr贸nicos, bases de datos SQLite, archivos XML y otros archivos creados). Todo esto se hace autom谩ticamente excepto por las capturas de pantalla, necesita presionar cuando quiere una captura de pantalla o necesita presionar "Exported Activity Tester" para obtener capturas de pantalla de todas las actividades exportadas.
  • Capturar tr谩fico HTTPS
  • Usar Frida para obtener informaci贸n en tiempo de ejecuci贸n

Desde las versiones de Android > 5, iniciar谩 autom谩ticamente Frida y establecer谩 configuraciones de proxy globales para capturar tr谩fico. Solo capturar谩 tr谩fico de la aplicaci贸n probada.

Frida

Por defecto, tambi茅n utilizar谩 algunos scripts de Frida para eludir la fijaci贸n de SSL, detecci贸n de root y detecci贸n de depuradores y para monitorear APIs interesantes.
MobSF tambi茅n puede invocar actividades exportadas, tomar capturas de pantalla de ellas y guardarlas para el informe.

Para iniciar la prueba din谩mica presione el bot贸n verde: "Start Instrumentation". Presione "Frida Live Logs" para ver los registros generados por los scripts de Frida y "Live API Monitor" para ver todas las invocaciones a m茅todos enganchados, argumentos pasados y valores devueltos (esto aparecer谩 despu茅s de presionar "Start Instrumentation").
MobSF tambi茅n le permite cargar sus propios scripts de Frida (para enviar los resultados de sus scripts de Frida a MobSF use la funci贸n send()). Tambi茅n tiene varios scripts preescritos que puede cargar (puede agregar m谩s en MobSF/DynamicAnalyzer/tools/frida_scripts/others/), solo selecci贸nelos, presione "Load" y presione "Start Instrumentation" (podr谩 ver los registros de esos scripts dentro de "Frida Live Logs").

Adem谩s, tiene algunas funcionalidades auxiliares de Frida:

  • Enumerar Clases Cargadas: Imprimir谩 todas las clases cargadas
  • Capturar Cadenas: Imprimir谩 todas las cadenas capturadas mientras usa la aplicaci贸n (muy ruidoso)
  • Capturar Comparaciones de Cadenas: Podr铆a ser muy 煤til. Mostrar谩 las 2 cadenas que se est谩n comparando y si el resultado fue Verdadero o Falso.
  • Enumerar M茅todos de Clase: Ponga el nombre de la clase (como "java.io.File") e imprimir谩 todos los m茅todos de la clase.
  • Buscar Patr贸n de Clase: Buscar clases por patr贸n
  • Rastrear M茅todos de Clase: Rastrear una clase completa (ver entradas y salidas de todos los m茅todos de la clase). Recuerde que por defecto MobSF rastrea varios m茅todos interesantes de la API de Android.

Una vez que haya seleccionado el m贸dulo auxiliar que desea usar, necesita presionar "Start Intrumentation" y ver谩 todas las salidas en "Frida Live Logs".

Shell

Mobsf tambi茅n le ofrece una shell con algunos comandos adb, comandos de MobSF, y comandos comunes de shell en la parte inferior de la p谩gina de an谩lisis din谩mico. Algunos comandos interesantes:

bash
help
shell ls
activities
exported_activities
services
receivers

Herramientas HTTP

Cuando se captura tr谩fico http, puedes ver una vista fea del tr谩fico capturado en "HTTP(S) Traffic" en la parte inferior o una vista m谩s agradable en el bot贸n verde "Start HTTPTools". Desde la segunda opci贸n, puedes enviar las solicitudes capturadas a proxies como Burp o Owasp ZAP.
Para hacerlo, enciende Burp --> apaga Intercept --> en MobSB HTTPTools selecciona la solicitud --> presiona "Send to Fuzzer" --> selecciona la direcci贸n del proxy (http://127.0.0.1:8080\).

Una vez que termines el an谩lisis din谩mico con MobSF, puedes presionar "Start Web API Fuzzer" para fuzz http requests y buscar vulnerabilidades.

note

Despu茅s de realizar un an谩lisis din谩mico con MobSF, la configuraci贸n del proxy puede estar mal configurada y no podr谩s solucionarlo desde la GUI. Puedes corregir la configuraci贸n del proxy haciendo:

adb shell settings put global http_proxy :0

An谩lisis Din谩mico Asistido con Inspeckage

Puedes obtener la herramienta de Inspeckage.
Esta herramienta utilizar谩 algunos Hooks para informarte qu茅 est谩 sucediendo en la aplicaci贸n mientras realizas un an谩lisis din谩mico.

Yaazhini

Esta es una gran herramienta para realizar an谩lisis est谩tico con una GUI

Qark

Esta herramienta est谩 dise帽ada para buscar varias vulnerabilidades relacionadas con la seguridad en aplicaciones Android, ya sea en c贸digo fuente o APKs empaquetados. La herramienta tambi茅n es capaz de crear un "Proof-of-Concept" APK desplegable y comandos ADB, para explotar algunas de las vulnerabilidades encontradas (Actividades expuestas, intents, tapjacking...). Al igual que con Drozer, no es necesario rootear el dispositivo de prueba.

bash
pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • Muestra todos los archivos extra铆dos para una f谩cil referencia
  • Descompone autom谩ticamente archivos APK a formato Java y Smali
  • Analiza AndroidManifest.xml en busca de vulnerabilidades y comportamientos comunes
  • An谩lisis est谩tico del c贸digo fuente para vulnerabilidades y comportamientos comunes
  • Informaci贸n del dispositivo
  • y m谩s
bash
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER es una aplicaci贸n de l铆nea de comandos que se puede utilizar en Windows, MacOS X y Linux, que analiza archivos .apk en busca de vulnerabilidades. Lo hace descomprimiendo APKs y aplicando una serie de reglas para detectar esas vulnerabilidades.

Todas las reglas est谩n centradas en un archivo rules.json, y cada empresa o probador podr铆a crear sus propias reglas para analizar lo que necesiten.

Descargue los 煤ltimos binarios en la p谩gina de descarga

super-analyzer {apk_file}

StaCoAn

StaCoAn es una herramienta multiplataforma que ayuda a desarrolladores, cazadores de bugs y hackers 茅ticos a realizar an谩lisis de c贸digo est谩tico en aplicaciones m贸viles.

El concepto es que arrastras y sueltas tu archivo de aplicaci贸n m贸vil (un archivo .apk o .ipa) en la aplicaci贸n StaCoAn y generar谩 un informe visual y port谩til para ti. Puedes ajustar la configuraci贸n y las listas de palabras para obtener una experiencia personalizada.

Descargar 煤ltima versi贸n:

./stacoan

AndroBugs

AndroBugs Framework es un sistema de an谩lisis de vulnerabilidades de Android que ayuda a los desarrolladores o hackers a encontrar posibles vulnerabilidades de seguridad en aplicaciones de Android.
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarn es una herramienta cuyo objetivo principal es detectar y advertir al usuario sobre comportamientos maliciosos potenciales desarrollados por una aplicaci贸n de Android.

La detecci贸n se realiza con el an谩lisis est谩tico del bytecode Dalvik de la aplicaci贸n, representado como Smali, con la biblioteca androguard.

Esta herramienta busca comportamientos comunes de aplicaciones "malas" como: exfiltraci贸n de identificadores de telefon铆a, interceptaci贸n de flujos de audio/video, modificaci贸n de datos PIM, ejecuci贸n de c贸digo arbitrario...

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARA es un Mobile Application Reverse engineering y Analysis Framework. Es una herramienta que re煤ne herramientas com煤nmente utilizadas para la ingenier铆a inversa y an谩lisis de aplicaciones m贸viles, para ayudar en la prueba de aplicaciones m贸viles contra las amenazas de seguridad m贸vil de OWASP. Su objetivo es facilitar esta tarea y hacerla m谩s amigable para los desarrolladores de aplicaciones m贸viles y profesionales de seguridad.

Es capaz de:

Koodous

脷til para detectar malware: https://koodous.com/

Ofuscando/Desofuscando c贸digo

Tenga en cuenta que dependiendo del servicio y la configuraci贸n que utilice para ofuscar el c贸digo. Los secretos pueden o no terminar ofuscados.

ProGuard

De Wikipedia: ProGuard es una herramienta de l铆nea de comandos de c贸digo abierto que reduce, optimiza y ofusca c贸digo Java. Es capaz de optimizar bytecode as铆 como detectar y eliminar instrucciones no utilizadas. ProGuard es software libre y se distribuye bajo la Licencia P煤blica General de GNU, versi贸n 2.

ProGuard se distribuye como parte del SDK de Android y se ejecuta al construir la aplicaci贸n en modo de lanzamiento.

DexGuard

Encuentra una gu铆a paso a paso para desofuscar el apk en https://blog.lexfo.fr/dexguard.html

(De esa gu铆a) La 煤ltima vez que verificamos, el modo de operaci贸n de Dexguard era:

  • cargar un recurso como un InputStream;
  • alimentar el resultado a una clase que hereda de FilterInputStream para descifrarlo;
  • hacer alguna ofuscaci贸n in煤til para perder unos minutos de tiempo de un reversor;
  • alimentar el resultado descifrado a un ZipInputStream para obtener un archivo DEX;
  • finalmente cargar el DEX resultante como un Recurso usando el m茅todo loadDex.

DeGuard

DeGuard revierte el proceso de ofuscaci贸n realizado por herramientas de ofuscaci贸n de Android. Esto permite numerosos an谩lisis de seguridad, incluyendo inspecci贸n de c贸digo y predicci贸n de bibliotecas.

Puedes subir un APK ofuscado a su plataforma.

Deobfuscate android App

Esta es una herramienta LLM para encontrar cualquier vulnerabilidad de seguridad potencial en aplicaciones android y desofuscar el c贸digo de aplicaciones android. Utiliza la API p煤blica de Gemini de Google.

Simplify

Es un desofuscador gen茅rico de android. Simplify ejecuta virtualmente una aplicaci贸n para entender su comportamiento y luego intenta optimizar el c贸digo para que se comporte de manera id茅ntica pero sea m谩s f谩cil de entender para un humano. Cada tipo de optimizaci贸n es simple y gen茅rico, por lo que no importa qu茅 tipo espec铆fico de ofuscaci贸n se utilice.

APKiD

APKiD te da informaci贸n sobre c贸mo se hizo un APK. Identifica muchos compiladores, empaquetadores, ofuscadores, y otras cosas extra帽as. Es PEiD para Android.

Manual

Lee este tutorial para aprender algunos trucos sobre c贸mo revertir la ofuscaci贸n personalizada

Labs

Androl4b

AndroL4b es una m谩quina virtual de seguridad de Android basada en ubuntu-mate que incluye la colecci贸n de los 煤ltimos frameworks, tutoriales y laboratorios de diferentes expertos en seguridad e investigadores para ingenier铆a inversa y an谩lisis de malware.

Referencias

A煤n por probar

tip

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks