mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/android-anti-i
This commit is contained in:
parent
1631a239a3
commit
6f8af7c42b
@ -326,6 +326,7 @@
|
||||
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
|
||||
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
|
||||
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
|
||||
- [Android Anti Instrumentation And Ssl Pinning Bypass](mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md)
|
||||
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
|
||||
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
|
||||
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Pruebas de Penetración en Aplicaciones Android
|
||||
# Pentesting de Aplicaciones Android
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Conceptos Básicos de Aplicaciones Android
|
||||
## 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**:
|
||||
|
||||
@ -12,7 +12,7 @@ android-applications-basics.md
|
||||
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Esta es la herramienta principal que necesitas para conectarte a un dispositivo Android (emulado o físico).\
|
||||
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**](adb-commands.md) para aprender a usar adb.
|
||||
@ -73,7 +73,7 @@ Presta especial atención a las **URLs de firebase** y verifica si está mal con
|
||||
|
||||
### 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 potenciales vulnerabilidades de seguridad**. Estos archivos pueden ser accedidos usando descompiladores o renombrando la extensión del archivo APK a .zip y luego descomprimiéndolo.
|
||||
La **examinación de los archivos _Manifest.xml_ y _strings.xml_ de una aplicación puede revelar potenciales vulnerabilidades de seguridad**. Estos archivos pueden ser accedidos usando descompiladores o renombrando la extensión del archivo APK a .zip y luego descomprimiéndolo.
|
||||
|
||||
**Vulnerabilidades** identificadas en el **Manifest.xml** incluyen:
|
||||
|
||||
@ -81,7 +81,7 @@ La **examinación de los archivos _Manifest.xml_ y **_strings.xml_** de una apli
|
||||
- **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.
|
||||
- **Proveedores de Contenido y FileProviders**: Los 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` y `maxSdkVersion` indican las versiones de Android soportadas, destacando la importancia de no soportar versiones de Android obsoletas y vulnerables por razones de seguridad.
|
||||
|
||||
@ -100,7 +100,7 @@ tapjacking.md
|
||||
|
||||
### 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 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**).
|
||||
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 de la aplicación real, podría **secuestrar la tarea de la aplicación real** (así que el usuario estará interactuando con la **aplicación maliciosa pensando que está usando la real**).
|
||||
|
||||
Más información en:
|
||||
|
||||
@ -126,8 +126,8 @@ Al tratar con archivos en **almacenamiento externo**, como tarjetas SD, se deben
|
||||
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.
|
||||
2. **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.
|
||||
- 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, lo que lo hace menos seguro.
|
||||
3. **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.
|
||||
@ -138,10 +138,10 @@ El almacenamiento externo puede ser **accedido** en `/storage/emulated/0`, `/sdc
|
||||
> [!TIP]
|
||||
> A partir de Android 4.4 (**API 17**), la tarjeta SD tiene una estructura de directorios 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**
|
||||
**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.
|
||||
- **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
|
||||
|
||||
@ -152,11 +152,11 @@ Por alguna razón, a veces los desarrolladores aceptan todos los certificados in
|
||||
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 CA de Burp dentro del dispositivo. Además, puedes generar con Burp un certificado para un nombre de host diferente y usarlo.
|
||||
Una buena manera de probar esto es intentar capturar el tráfico usando algún proxy como Burp sin autorizar el CA de Burp 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**
|
||||
**Procesos de Gestión de Claves Pobre**
|
||||
|
||||
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 algún proceso de reversión podría permitir a los atacantes extraer la información confidencial.
|
||||
|
||||
@ -174,7 +174,7 @@ Los desarrolladores no deberían usar **algoritmos obsoletos** para realizar **v
|
||||
|
||||
### Aplicación React Native
|
||||
|
||||
Lee la siguiente página para aprender cómo acceder fácilmente al código javascript de aplicaciones React:
|
||||
Lee la siguiente página para aprender cómo acceder fácilmente al código javascript de las aplicaciones React:
|
||||
|
||||
{{#ref}}
|
||||
react-native-application.md
|
||||
@ -182,7 +182,7 @@ react-native-application.md
|
||||
|
||||
### Aplicaciones Xamarin
|
||||
|
||||
Lee la siguiente página para aprender cómo acceder fácilmente al código C# de aplicaciones xamarin:
|
||||
Lee la siguiente página para aprender cómo acceder fácilmente al código C# de una aplicación xamarin:
|
||||
|
||||
{{#ref}}
|
||||
../xamarin-apps.md
|
||||
@ -190,11 +190,11 @@ Lee la siguiente página para aprender cómo acceder fácilmente al código C# d
|
||||
|
||||
### Aplicaciones Superempaquetadas
|
||||
|
||||
Según este [**blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), 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.**
|
||||
Según este [**post del blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), 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**](https://github.com/facebook/mariana-trench) es capaz de encontrar **vulnerabilidades** al **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.
|
||||
La herramienta [**mariana-trench**](https://github.com/facebook/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**.
|
||||
|
||||
@ -256,7 +256,7 @@ avd-android-virtual-device.md
|
||||
> [!TIP]
|
||||
> 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:
|
||||
Para **instalar servicios de Google** (como AppStore) en Genymotion, necesitas hacer clic en el botón marcado en rojo de la siguiente imagen:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -264,7 +264,7 @@ Además, ten en cuenta que en la **configuración de la VM de Android en Genymot
|
||||
|
||||
#### Usar un dispositivo físico
|
||||
|
||||
Necesitas activar las **opciones de depuración** y sería genial si puedes **rootearlo**:
|
||||
Necesitas activar las opciones de **depuración** y sería genial si puedes **rootearlo**:
|
||||
|
||||
1. **Configuración**.
|
||||
2. (Desde Android 8.0) Selecciona **Sistema**.
|
||||
@ -287,7 +287,7 @@ Los desarrolladores deben tener cuidado de exponer **información de depuración
|
||||
|
||||
**Caché del Portapapeles**
|
||||
|
||||
El marco **basado en portapapeles** de Android permite la funcionalidad de copiar y pegar en 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.
|
||||
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**
|
||||
|
||||
@ -316,7 +316,7 @@ Drozer es una herramienta útil para **explotar actividades exportadas, servicio
|
||||
### Explotando Actividades Exportadas
|
||||
|
||||
[**Lee esto si quieres refrescar qué es una Actividad de Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
También recuerda que el código de una actividad comienza en el **método `onCreate`**.
|
||||
También recuerda que el código de una actividad comienza en el método **`onCreate`**.
|
||||
|
||||
**Bypass de Autorización**
|
||||
|
||||
@ -334,7 +334,7 @@ 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](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), aparentemente esto solo es peligroso en versiones antiguas (versiones de API < 21).
|
||||
|
||||
> [!TIP]
|
||||
> 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.
|
||||
> 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.
|
||||
|
||||
**Filtración de información sensible**
|
||||
|
||||
@ -408,7 +408,7 @@ Un [informe de bug bounty interesante](https://hackerone.com/reports/855618) sob
|
||||
|
||||
#### 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**](https://manifestsecurity.com/android-application-security-part-10/) proporciona una guía completa.
|
||||
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**](https://manifestsecurity.com/android-application-security-part-10/) proporciona una guía completa.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
@ -426,21 +426,21 @@ Si se está utilizando **Flutter**, necesitas seguir las instrucciones en [**est
|
||||
|
||||
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**](https://github.com/shroudedcode/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á.
|
||||
- Modificar **automáticamente** el **apk** para **eludir** SSLPinning con [**apk-mitm**](https://github.com/shroudedcode/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/](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**](frida-tutorial/objection-tutorial.md)**:** `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](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
- 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](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.
|
||||
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](https://www.frida.re) 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.
|
||||
Si deseas hacer pentesting en aplicaciones Android, necesitas saber cómo usar Frida.
|
||||
|
||||
- Aprende a usar Frida: [**Tutorial de Frida**](frida-tutorial/index.html)
|
||||
- Algunas "GUI" para acciones con Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
@ -448,9 +448,15 @@ Si deseas hacer pentesting en aplicaciones de Android, necesitas saber cómo usa
|
||||
- Puedes encontrar algunos scripts de Frida geniales aquí: [**https://codeshare.frida.re/**](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](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (herramienta [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
#### Flujo de trabajo de elusión de anti-instrumentación y SSL pinning
|
||||
|
||||
{{#ref}}
|
||||
android-anti-instrumentation-and-ssl-pinning-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### **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.
|
||||
Verifica si la aplicación está almacenando información sensible en la memoria que no debería estar almacenando, como contraseñas o mnemotécnicos.
|
||||
|
||||
Usando [**Fridump3**](https://github.com/rootbsd/fridump3) puedes volcar la memoria de la app con:
|
||||
```bash
|
||||
@ -467,15 +473,15 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
```
|
||||
### **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 deben verificarlo, ya que un usuario root o alguien con acceso físico al dispositivo podría robar estos datos.
|
||||
En Android, el Keystore es el mejor lugar para almacenar datos sensibles; sin embargo, con suficientes privilegios, aún 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, puedes usar este script de Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
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](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/Biometría**
|
||||
### **Bypass de huellas dactilares/bio-metría**
|
||||
|
||||
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
|
||||
@ -483,7 +489,7 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
```
|
||||
### **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.
|
||||
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).
|
||||
|
||||
@ -510,14 +516,14 @@ El peligro radica en permitir que los atacantes activen componentes de la aplica
|
||||
- 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
|
||||
### 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í](webview-attacks.md#javascript-enabled).
|
||||
- **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í](webview-attacks.md#javascript-enabled).
|
||||
- **Cookies Eternas**: En varios casos, cuando la aplicación android finaliza la sesión, la cookie no se revoca o incluso puede ser guardada en el disco.
|
||||
- **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](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
---
|
||||
@ -536,7 +542,7 @@ docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Nota 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 archivo **ZIP** con el código fuente de una aplicación **Android** o **IOS** (ve a la carpeta raíz de la aplicación, selecciona todo y crea un archivo ZIP), también podrá analizarlo.
|
||||
Además, si creas un **ZIP** con el código fuente de una aplicación **Android** o **IOS** (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.
|
||||
|
||||
@ -549,7 +555,7 @@ El **analizador dinámico de MobSF** puede:
|
||||
- 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.
|
||||
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**
|
||||
|
||||
@ -570,7 +576,7 @@ Además, tienes algunas funcionalidades auxiliares de Frida:
|
||||
- **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**".
|
||||
Una vez que hayas seleccionado el módulo auxiliar que deseas usar, necesitas presionar "**Start Instrumentation**" y verás todas las salidas en "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
@ -621,8 +627,8 @@ qark --java path/to/specific/java/file.java
|
||||
|
||||
- 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 comunes y comportamiento
|
||||
- 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
|
||||
@ -660,7 +666,7 @@ androbugs.exe -f [APK file]
|
||||
```
|
||||
### [Androwarn](https://github.com/maaaaz/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.
|
||||
**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`](https://github.com/androguard/androguard).
|
||||
|
||||
@ -676,30 +682,30 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
Es capaz de:
|
||||
|
||||
- Extraer código Java y Smali usando diferentes herramientas
|
||||
- Extraer código Java y Smali utilizando diferentes herramientas
|
||||
- Analizar APKs usando: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
- Extraer información privada del APK usando expresiones regulares.
|
||||
- Analizar el Manifest.
|
||||
- Analizar dominios encontrados usando: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) y [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
- Deofuscar APK a través de [apk-deguard.com](http://www.apk-deguard.com)
|
||||
- Desofuscar APK a través de [apk-deguard.com](http://www.apk-deguard.com)
|
||||
|
||||
### Koodous
|
||||
|
||||
Útil para detectar malware: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
## Ofuscando/Deofuscando código
|
||||
## 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](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
De [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** es una herramienta de línea de comandos de código abierto que reduce, optimiza y ofusca el 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.
|
||||
De [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **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](https://www.guardsquare.com/dexguard)
|
||||
|
||||
Encuentra una guía paso a paso para deofuscar el apk en [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
Encuentra una guía paso a paso para desofuscar el apk en [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(De esa guía) La última vez que verificamos, el modo de operación de Dexguard era:
|
||||
|
||||
@ -717,15 +723,15 @@ Puedes subir un APK ofuscado a su plataforma.
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
Esta es una herramienta LLM para encontrar cualquier vulnerabilidad de seguridad potencial en aplicaciones android y deofuscar el código de aplicaciones android. Utiliza la API pública de Gemini de Google.
|
||||
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](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Es un **deofuscador android genérico.** 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.
|
||||
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](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD te da información sobre **cómo se hizo un APK**. Identifica muchos **compiladores**, **empaquetadores**, **ofuscadores**, y otras cosas raras. Es [_PEiD_](https://www.aldeid.com/wiki/PEiD) para Android.
|
||||
APKiD te da información sobre **cómo se hizo un APK**. Identifica muchos **compiladores**, **empaquetadores**, **ofuscadores** y otras cosas extrañas. Es [_PEiD_](https://www.aldeid.com/wiki/PEiD) para Android.
|
||||
|
||||
### Manual
|
||||
|
||||
|
@ -0,0 +1,203 @@
|
||||
# Android Anti-Instrumentation & SSL Pinning Bypass (Frida/Objection)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Esta página proporciona un flujo de trabajo práctico para recuperar el análisis dinámico contra aplicaciones de Android que detectan/bloquean la instrumentación o imponen el pinning TLS. Se centra en la evaluación rápida, detecciones comunes y ganchos/tácticas que se pueden copiar y pegar para eludirlas sin recompilar cuando sea posible.
|
||||
|
||||
## Superficie de Detección (lo que las aplicaciones verifican)
|
||||
|
||||
- Comprobaciones de root: binario su, rutas de Magisk, valores de getprop, paquetes de root comunes
|
||||
- Comprobaciones de Frida/debugger (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), escaneando /proc, classpath, libs cargadas
|
||||
- Anti-debug nativo: ptrace(), syscalls, anti-attach, breakpoints, inline hooks
|
||||
- Comprobaciones de inicio temprano: Application.onCreate() o ganchos de inicio de proceso que fallan si la instrumentación está presente
|
||||
- Pining TLS: TrustManager/HostnameVerifier personalizado, OkHttp CertificatePinner, pining de Conscrypt, pines nativos
|
||||
|
||||
## Paso 1 — Victoria rápida: ocultar root con Magisk DenyList
|
||||
|
||||
- Habilitar Zygisk en Magisk
|
||||
- Habilitar DenyList, agregar el paquete objetivo
|
||||
- Reiniciar y volver a probar
|
||||
|
||||
Muchas aplicaciones solo buscan indicadores obvios (rutas su/Magisk/getprop). DenyList a menudo neutraliza comprobaciones ingenuas.
|
||||
|
||||
Referencias:
|
||||
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
|
||||
|
||||
## Paso 2 — Pruebas de Frida Codeshare de 30 segundos
|
||||
|
||||
Prueba scripts comunes antes de profundizar:
|
||||
|
||||
- anti-root-bypass.js
|
||||
- anti-frida-detection.js
|
||||
- hide_frida_gum.js
|
||||
|
||||
Ejemplo:
|
||||
```bash
|
||||
frida -U -f com.example.app -l anti-frida-detection.js
|
||||
```
|
||||
Estos típicamente interrumpen las verificaciones de raíz/debug de Java, escaneos de procesos/servicios y ptrace() nativo. Útil en aplicaciones ligeramente protegidas; los objetivos endurecidos pueden necesitar ganchos personalizados.
|
||||
|
||||
- Codeshare: https://codeshare.frida.re/
|
||||
|
||||
## Paso 3 — Eludir detectores de tiempo de inicialización al adjuntarse tarde
|
||||
|
||||
Muchas detecciones solo se ejecutan durante la creación del proceso/onCreate(). La inyección en el momento de la creación (-f) o gadgets son detectados; adjuntarse después de que se cargue la UI puede pasar desapercibido.
|
||||
```bash
|
||||
# Launch the app normally (launcher/adb), wait for UI, then attach
|
||||
frida -U -n com.example.app
|
||||
# Or with Objection to attach to running process
|
||||
aobjection --gadget com.example.app explore # if using gadget
|
||||
```
|
||||
Si esto funciona, mantén la sesión estable y procede a mapear y verificar los stubs.
|
||||
|
||||
## Paso 4 — Mapear la lógica de detección a través de Jadx y búsqueda de cadenas
|
||||
|
||||
Palabras clave de triaje estático en Jadx:
|
||||
- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger"
|
||||
|
||||
Patrones típicos de Java:
|
||||
```java
|
||||
public boolean isFridaDetected() {
|
||||
return getRunningServices().contains("frida");
|
||||
}
|
||||
```
|
||||
APIs comunes para revisar/enganchar:
|
||||
- android.os.Debug.isDebuggerConnected
|
||||
- android.app.ActivityManager.getRunningAppProcesses / getRunningServices
|
||||
- java.lang.System.loadLibrary / System.load (puente nativo)
|
||||
- java.lang.Runtime.exec / ProcessBuilder (comandos de sondeo)
|
||||
- android.os.SystemProperties.get (heurísticas de root/emulador)
|
||||
|
||||
## Paso 5 — Stubbing en tiempo de ejecución con Frida (Java)
|
||||
|
||||
Sobrescribir guardias personalizadas para devolver valores seguros sin reempaquetar:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
const Checks = Java.use('com.example.security.Checks');
|
||||
Checks.isFridaDetected.implementation = function () { return false; };
|
||||
|
||||
// Neutralize debugger checks
|
||||
const Debug = Java.use('android.os.Debug');
|
||||
Debug.isDebuggerConnected.implementation = function () { return false; };
|
||||
|
||||
// Example: kill ActivityManager scans
|
||||
const AM = Java.use('android.app.ActivityManager');
|
||||
AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); };
|
||||
});
|
||||
```
|
||||
¿Clasificando fallos tempranos? Volcar clases justo antes de que muera para detectar posibles espacios de nombres de detección:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
Java.enumerateLoadedClasses({
|
||||
onMatch: n => console.log(n),
|
||||
onComplete: () => console.log('Done')
|
||||
});
|
||||
});
|
||||
```
|
||||
Registra y neutraliza métodos sospechosos para confirmar el flujo de ejecución:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
const Det = Java.use('com.example.security.DetectionManager');
|
||||
Det.checkFrida.implementation = function () {
|
||||
console.log('checkFrida() called');
|
||||
return false;
|
||||
};
|
||||
});
|
||||
```
|
||||
## Paso 6 — Sigue la pista JNI/nativa cuando los hooks de Java fallan
|
||||
|
||||
Rastrea los puntos de entrada JNI para localizar cargadores nativos e inicialización de detección:
|
||||
```bash
|
||||
frida-trace -n com.example.app -i "JNI_OnLoad"
|
||||
```
|
||||
Triage nativo rápido de archivos .so empaquetados:
|
||||
```bash
|
||||
# List exported symbols & JNI
|
||||
nm -D libfoo.so | head
|
||||
objdump -T libfoo.so | grep Java_
|
||||
strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root'
|
||||
```
|
||||
Reversión interactiva/nativa:
|
||||
- Ghidra: https://ghidra-sre.org/
|
||||
- r2frida: https://github.com/nowsecure/r2frida
|
||||
|
||||
Ejemplo: neuter ptrace para derrotar un simple anti‑debug en libc:
|
||||
```js
|
||||
const ptrace = Module.findExportByName(null, 'ptrace');
|
||||
if (ptrace) {
|
||||
Interceptor.replace(ptrace, new NativeCallback(function () {
|
||||
return -1; // pretend failure
|
||||
}, 'int', ['int', 'int', 'pointer', 'pointer']));
|
||||
}
|
||||
```
|
||||
See also: {{#ref}}
|
||||
reversing-native-libraries.md
|
||||
{{#endref}}
|
||||
|
||||
## Paso 7 — Patching de Objection (incrustar gadget / conceptos básicos de strip)
|
||||
|
||||
Cuando prefieras el repacking a los hooks de tiempo de ejecución, prueba:
|
||||
```bash
|
||||
objection patchapk --source app.apk
|
||||
```
|
||||
Notas:
|
||||
- Requiere apktool; asegúrate de tener una versión actual de la guía oficial para evitar problemas de compilación: https://apktool.org/docs/install
|
||||
- La inyección de gadgets permite la instrumentación sin root, pero aún puede ser detectada por verificaciones más fuertes en el tiempo de inicio.
|
||||
|
||||
Referencias:
|
||||
- Objection: https://github.com/sensepost/objection
|
||||
|
||||
## Paso 8 — Alternativa: Parchear el pinning de TLS para visibilidad de red
|
||||
|
||||
Si la instrumentación está bloqueada, aún puedes inspeccionar el tráfico eliminando el pinning de forma estática:
|
||||
```bash
|
||||
apk-mitm app.apk
|
||||
# Then install the patched APK and proxy via Burp/mitmproxy
|
||||
```
|
||||
- Herramienta: https://github.com/shroudedcode/apk-mitm
|
||||
- Para trucos de configuración de red CA‑trust (y confianza de CA de usuario en Android 7+), consulta:
|
||||
{{#ref}}
|
||||
make-apk-accept-ca-certificate.md
|
||||
{{#endref}}
|
||||
{{#ref}}
|
||||
install-burp-certificate.md
|
||||
{{#endref}}
|
||||
|
||||
## Hoja de trucos de comandos útil
|
||||
```bash
|
||||
# List processes and attach
|
||||
frida-ps -Uai
|
||||
frida -U -n com.example.app
|
||||
|
||||
# Spawn with a script (may trigger detectors)
|
||||
frida -U -f com.example.app -l anti-frida-detection.js
|
||||
|
||||
# Trace native init
|
||||
frida-trace -n com.example.app -i "JNI_OnLoad"
|
||||
|
||||
# Objection runtime
|
||||
objection --gadget com.example.app explore
|
||||
|
||||
# Static TLS pinning removal
|
||||
apk-mitm app.apk
|
||||
```
|
||||
## Consejos y advertencias
|
||||
|
||||
- Prefiere adjuntar tarde en lugar de crear procesos cuando las aplicaciones se bloquean al iniciar
|
||||
- Algunas detecciones se vuelven a ejecutar en flujos críticos (por ejemplo, pago, autenticación) — mantén los hooks activos durante la navegación
|
||||
- Mezcla estático y dinámico: busca cadenas en Jadx para hacer una lista corta de clases; luego engancha métodos para verificar en tiempo de ejecución
|
||||
- Las aplicaciones endurecidas pueden usar empacadores y pinning TLS nativo — espera invertir código nativo
|
||||
|
||||
## Referencias
|
||||
|
||||
- [Reversing Android Apps: Bypassing Detection Like a Pro](https://www.kayssel.com/newsletter/issue-12/)
|
||||
- [Frida Codeshare](https://codeshare.frida.re/)
|
||||
- [Objection](https://github.com/sensepost/objection)
|
||||
- [apk-mitm](https://github.com/shroudedcode/apk-mitm)
|
||||
- [Jadx](https://github.com/skylot/jadx)
|
||||
- [Ghidra](https://ghidra-sre.org/)
|
||||
- [r2frida](https://github.com/nowsecure/r2frida)
|
||||
- [Apktool install guide](https://apktool.org/docs/install)
|
||||
- [Magisk](https://github.com/topjohnwu/Magisk)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user