59 KiB
Pentesting de Aplicaciones Android
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
¡Únete al servidor de HackenProof Discord para comunicarte con hackers experimentados y cazadores de bugs!
Perspectivas de Hacking
Involúcrate con contenido que profundiza en la emoción y los desafíos del hacking
Noticias de Hacking en Tiempo Real
Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
Últimos Anuncios
Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actualizaciones cruciales de la plataforma
Únete a nosotros en Discord y comienza a colaborar con los mejores hackers hoy mismo!
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:
{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}
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 por USB o Red desde una computadora. Esta utilidad permite 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 ofuscadas). 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 mente esta posibilidad.
Otros trucos interesantes
- Suplantar tu ubicación en Play Store
- Descargar APKs: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/, https://github.com/kiber-io/apkd
- Extraer APK del dispositivo:
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
- Fusiona todos los splits y apks base con APKEditor:
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 descompilador.
Por favor, lee aquí para encontrar información sobre diferentes descompiladores 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 de api, cifrado, bluetooth uuids, tokens y cualquier cosa interesante... busca incluso backdoors de ejecución de código o backdoors 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 posibles vulnerabilidades de seguridad**. Estos archivos se pueden acceder usando descompiladores 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 ser establecido explícitamente para aplicaciones que manejan información sensible para prevenir respaldos de datos no autorizados 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 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
ymaxSdkVersion
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 de 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 interactuar 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:
{% content-ref url="tapjacking.md" %} tapjacking.md {% endcontent-ref %}
Secuestro de Tareas
Una actividad con el launchMode
configurado como singleTask
sin ningún taskAffinity
definido es vulnerable al secuestro de tareas. Esto significa que una aplicación puede ser instalada y si se lanza antes de 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:
{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}
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.
- Análisis Estático:
- Asegúrate de que el uso de
MODE_WORLD_READABLE
yMODE_WORLD_WRITABLE
sea examinado cuidadosamente. Estos modos pueden potencialmente exponer archivos a acceso no intencionado o no autorizado.
- 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:
- Accesibilidad:
- Los archivos en almacenamiento externo son globalmente legibles y escribibles. Esto significa que cualquier aplicación o usuario puede acceder a estos archivos.
- Preocupaciones de Seguridad:
- Dada la facilidad de acceso, se aconseja no almacenar información sensible en almacenamiento externo.
- El almacenamiento externo puede ser removido o accedido por cualquier aplicación, haciéndolo menos seguro.
- 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
{% hint style="info" %} 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. {% endhint %}
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:
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 Burp CA dentro del dispositivo. También 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 aplicaciones React:
{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}
Aplicaciones Xamarin
Lee la siguiente página para aprender cómo acceder fácilmente al código C# de aplicaciones xamarin:
{% content-ref url="../xamarin-apps.md" %} xamarin-apps.md {% endcontent-ref %}
Aplicaciones Superempaquetadas
Según este 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 el escaneo del 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
{% content-ref url="bypass-biometric-authentication-android.md" %} bypass-biometric-authentication-android.md {% endcontent-ref %}
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-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}
¡Únete al servidor de HackenProof Discord para comunicarte con hackers experimentados y cazadores de bugs!
Perspectivas de Hacking
Involúcrate con contenido que profundiza en la emoción y los desafíos del hacking.
Noticias de Hackeo en Tiempo Real
Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real.
Últimos Anuncios
Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actualizaciones cruciales de la plataforma.
Únete a nosotros en Discord y comienza a colaborar con los mejores hackers hoy mismo!
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 esto las últimas versiones x86 soportan bibliotecas ARM sin necesidad de un emulador arm lento).
- Aprende a configurarlo en esta página:
{% content-ref url="avd-android-virtual-device.md" %} avd-android-virtual-device.md {% endcontent-ref %}
- 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).
{% hint style="info" %} 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. {% endhint %}
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:
- Configuración.
- (Desde Android 8.0) Selecciona Sistema.
- Selecciona Acerca del teléfono.
- Presiona Número de compilación 7 veces.
- 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.
Sugeriría realizar este análisis dinámico inicial usando MobSF análisis dinámico + 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.
{% hint style="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.
{% endhint %}
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 las 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)
De 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
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).
{% hint style="info" %} Ten en cuenta que un bypass de autorización no siempre es una vulnerabilidad, dependerá de cómo funcione el bypass y qué información esté expuesta. {% endhint %}
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 Proveedores de Contenido - Accediendo y manipulando información sensible
Lee esto si quieres refrescar qué es un Proveedor de Contenido.
Los proveedores de contenido se utilizan básicamente para compartir datos. Si una aplicación tiene proveedores de contenido disponibles, es posible que puedas extraer datos sensibles de ellos. También es interesante probar posibles inyecciones SQL y traversales de ruta ya que podrían ser vulnerables.
Aprende cómo explotar Proveedores de Contenido 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 Receptores de Difusión
Lee esto si quieres refrescar qué es un Receptor de Difusión.
Recuerda que las acciones de un Receptor de Difusión comienzan en el método onReceive
.
Un receptor de difusión estará esperando un tipo de mensaje. Dependiendo de cómo el receptor maneje el mensaje, podría ser vulnerable.
Aprende cómo explotar Receptores de Difusión con Drozer.
Explotando Esquemas / Enlaces profundos
Puedes buscar enlaces profundos manualmente, utilizando herramientas como MobSF o scripts como este.
Puedes abrir un esquema declarado usando adb o un navegador:
{% code overflow="wrap" %}
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
{% endcode %}
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.
{% code overflow="wrap" %}
<!-- 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>
{% endcode %}
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).
Fallos en la Inspección y 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 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 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 deberá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 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
También es importante 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.
- Aprende a usar Frida: Tutorial de Frida
- Algunas "GUI" para acciones con Frida: https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
- Ojection es excelente para automatizar el uso de Frida: https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
- Puedes encontrar algunos scripts de Frida geniales aquí: https://codeshare.frida.re/
- Intenta eludir mecanismos de anti-debugging / anti-frida cargando Frida como se indica en https://erfur.github.io/blog/dev/code-injection-without-ptrace (herramienta linjector)
Volcar Memoria - Fridump
Verifica si la aplicación está almacenando información sensible en la memoria que no debería estar almacenando, como contraseñas o mnemotécnicas.
Usando Fridump3 puedes volcar la memoria de la app con:
# 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:
{% code overflow="wrap" %}
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]+$"
{% endcode %}
Datos sensibles en Keystore
En Android, el Keystore es el mejor lugar para almacenar datos sensibles, sin embargo, con suficientes privilegios, es posible acceder a él. Dado que las aplicaciones tienden a almacenar aquí datos sensibles en texto claro, las pruebas de penetración deberían verificarlo como 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 deberían 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
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
Bypass de huellas dactilares/bio-métricas
Usando el siguiente script de Frida, podría ser posible eludir la autenticación por huellas dactilares que las aplicaciones de Android podrían estar realizando para proteger ciertas áreas sensibles:
{% code overflow="wrap" %}
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
{% endcode %}
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 que la aplicación, por lo que parece que la aplicación 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 generalmente se almacenan en: /data/system_ce/0/snapshots
Android proporciona una manera 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.
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.
Puntos Clave 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
deWebView
puede facilitar acciones no intencionadas.
Inyecciones del Lado del Cliente de 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
¡Únete al servidor de HackenProof Discord para comunicarte con hackers experimentados y cazadores de recompensas por errores!
Perspectivas de Hacking
Participa en contenido que profundiza en la emoción y los desafíos del hacking.
Noticias de Hackeo en Tiempo Real
Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real.
Últimos Anuncios
Mantente informado sobre las nuevas recompensas por errores que se lanzan y actualizaciones cruciales de la plataforma.
Únete a nosotros en Discord y comienza a colaborar con los mejores hackers hoy mismo!
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).
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Notice 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 creas un ZIP con el código fuente de una Android o una IOS app (ve a la carpeta raíz de la aplicación, selecciona todo y crea un archivo ZIP), también podrá analizarlo.
MobSF también te permite diff/Comparar análisis e integrar VirusTotal (necesitarás configurar tu clave API en MobSF/settings.py y habilitarlo: VT_ENABLED = TRUE
VT_API_KEY = <Tu clave API>
VT_UPLOAD = TRUE
). También puedes establecer VT_UPLOAD
en False
, entonces el hash será subido 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ás instalar MobSF y genymotion en tu host (una VM o Docker no funcionará). Nota: Necesitas 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 hechas por ti, capturas de pantalla hechas 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, necesitas presionar cuando quieras una captura de pantalla o necesitas 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 usará algunos scripts de Frida para eludir la fijación de SSL, detección de root y detección de depurador 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 presiona el botón verde: "Start Instrumentation". Presiona "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 te permite cargar tus propios scripts de Frida (para enviar los resultados de tus scripts de Frida a MobSF usa la función send()
). También tiene varios scripts preescritos que puedes cargar (puedes agregar más en MobSF/DynamicAnalyzer/tools/frida_scripts/others/
), solo selecciónalos, presiona "Load" y presiona "Start Instrumentation" (podrás ver los registros de esos scripts dentro de "Frida Live Logs").
Además, tienes algunas funcionalidades auxiliares de Frida:
- Enumerar Clases Cargadas: Imprimirá todas las clases cargadas
- Capturar Cadenas: Imprimirá todas las cadenas capturadas mientras usas 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: Pon 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). Recuerda que por defecto MobSF rastrea varios métodos interesantes de la API de Android.
Una vez que hayas seleccionado el módulo auxiliar que deseas usar, necesitas presionar "Start Intrumentation" y verás todas las salidas en "Frida Live Logs".
Shell
MobSF también te 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:
help
shell ls
activities
exported_activities
services
receivers
Herramientas HTTP
Cuando se captura el 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 en "Start Web API Fuzzer" para fuzz http requests y buscar vulnerabilidades.
{% hint style="info" %} 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
{% endhint %}
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 de aplicaciones Android, ya sea en código fuente o APKs empaquetados. La herramienta también es capaz de crear un APK "Proof-of-Concept" 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.
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 comunes y comportamiento
- Análisis estático del código fuente para vulnerabilidades y comportamiento comunes
- Información del dispositivo
- y más
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 potencialmente maliciosos 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:
- Extraer código Java y Smali usando diferentes herramientas
- Analizar APKs usando: smalisca, ClassyShark, androbugs, androwarn, APKiD
- Extraer información privada del APK usando regexps.
- Analizar el Manifest.
- Analizar dominios encontrados usando: pyssltest, testssl y whatweb
- Deofuscar APK a través de apk-deguard.com
Koodous
Útil para detectar malware: https://koodous.com/
Ofuscando/Deofuscando 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 deofuscar 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 desperdiciar unos minutos del 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.
Simplify
Es un deofuscador 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
- https://owasp.org/www-project-mobile-app-security/
- https://appsecwiki.com/#/ Es una gran lista de recursos
- https://maddiestone.github.io/AndroidAppRE/ Curso rápido de Android
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
- https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
Aún por probar
Únete al HackenProof Discord para comunicarte con hackers experimentados y cazadores de recompensas por errores!
Perspectivas de Hacking
Participa en contenido que profundiza en la emoción y los desafíos del hacking
Noticias de Hackeo en Tiempo Real
Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
Últimos Anuncios
Mantente informado sobre las nuevas recompensas por errores que se lanzan y actualizaciones cruciales de la plataforma
Únete a nosotros en Discord y comienza a colaborar con los mejores hackers hoy!
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.