.. | ||
drozer-tutorial | ||
frida-tutorial | ||
adb-commands.md | ||
android-applications-basics.md | ||
android-burp-suite-settings.md | ||
android-task-hijacking.md | ||
apk-decompilers.md | ||
avd-android-virtual-device.md | ||
bypass-biometric-authentication-android.md | ||
content-protocol.md | ||
exploiting-a-debuggeable-applciation.md | ||
google-ctf-2018-shall-we-play-a-game.md | ||
inspeckage-tutorial.md | ||
intent-injection.md | ||
make-apk-accept-ca-certificate.md | ||
manual-deobfuscation.md | ||
react-native-application.md | ||
README.md | ||
reversing-native-libraries.md | ||
smali-changes.md | ||
spoofing-your-location-in-play-store.md | ||
webview-attacks.md |
Pentesting de Aplicaciones Android
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
Sigue a HackenProof para aprender más sobre errores web3
🐞 Lee tutoriales de errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones comunitarias
Conceptos básicos de las aplicaciones Android
Se recomienda encarecidamente 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 de 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).
Te permite controlar tu dispositivo a través de USB o Red desde un ordenador, copiar archivos de ida y vuelta, instalar y desinstalar aplicaciones, ejecutar comandos de shell, realizar copias de seguridad, leer registros y más.
Echa un vistazo a la siguiente lista de Comandos ADB para aprender cómo 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 bien ofuscadas o banderas). Entonces, podría ser interesante decompilar el apk, modificar el código y recompilarlo.
En este tutorial puedes aprender cómo decompilar un APK, modificar el código Smali y recompilar el APK con la nueva funcionalidad. Esto podría ser muy útil como alternativa para varias pruebas durante el análisis dinámico que se van a presentar. Entonces, mantén siempre en mente esta posibilidad.
Otros trucos interesantes
- Falsificar 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/
- 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
Sigue a HackenProof para aprender más sobre errores web3
🐞 Lee tutoriales sobre errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones comunitarias
Análisis estático
En primer lugar, para analizar un APK, deberías echar un vistazo al código Java utilizando un decompilador.
Por favor, lee aquí para encontrar información sobre los diferentes decompiladores disponibles.
Buscando información interesante
Simplemente echando un vistazo a las cadenas de texto del APK, puedes buscar contraseñas, URLs (https://github.com/ndelphit/apkurlgrep), claves de API, encriptación, UUIDs de Bluetooth, tokens y cualquier otra cosa interesante... incluso busca puertas traseras de ejecución de código o puertas traseras de autenticación (credenciales de administrador codificadas en la aplicación).
Firebase
Presta especial atención a las URLs de Firebase y comprueba 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
Utilizando cualquiera de los decompiladores mencionados aquí, podrás leer el Manifest.xml. También puedes renombrar el archivo APK cambiando la extensión del archivo a .zip y descomprimirlo.
Leyendo el manifiesto, puedes encontrar vulnerabilidades:
- En primer lugar, comprueba si la aplicación es depurable. Un APK de producción no debería serlo (o otros podrán conectarse a él). Puedes comprobar si una aplicación es depurable buscando en el manifiesto el atributo
debuggable="true"
dentro de la etiqueta <application Ejemplo:<application theme="@2131296387" debuggable="true"
- Aprende aquí cómo encontrar aplicaciones depurables en un teléfono y explotarlas
- Copia de seguridad: El atributo
android:allowBackup
define si los datos de la aplicación pueden ser copiados de seguridad y restaurados por un usuario que haya habilitado la depuración USB. Si la bandera de copia de seguridad está establecida en verdadero, permite a un atacante tomar la copia de seguridad de los datos de la aplicación a través de adb incluso si el dispositivo no está rooteado. Por lo tanto, las aplicaciones que manejan y almacenan información sensible como detalles de tarjetas, contraseñas, etc. deben tener esta configuración explícitamente establecida en falso porque por defecto está establecida en verdadero para evitar tales riesgos.<application android:allowBackup="false"
- Seguridad de la red: La seguridad de la red de la aplicación puede sobrescribir los valores predeterminados con
android:networkSecurityConfig="@xml/network_security_config"
. Se puede poner un archivo con ese nombre en res/xml. Este archivo configurará importantes ajustes de seguridad como los pines de certificado o si permite el tráfico HTTP. Puedes leer aquí más información sobre todas las cosas que se pueden configurar, pero comprueba este ejemplo sobre cómo configurar el tráfico HTTP para algunos dominios:<domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>
- Actividades exportadas: Comprueba las actividades exportadas dentro del manifiesto ya que esto podría ser peligroso. Más adelante en el análisis dinámico se explicará cómo puedes abusar de este comportamiento.
- Proveedores de contenido: Si se expone un proveedor exportado, podrías ser capaz de acceder/modificar información interesante. En el análisis dinámico aprenderás cómo abusar de ellos.
- Comprueba las configuraciones de FileProviders dentro del atributo
android:name="android.support.FILE_PROVIDER_PATHS"
. Lee aquí para aprender más sobre FileProviders.
- Comprueba las configuraciones de FileProviders dentro del atributo
- Servicios expuestos: Dependiendo de lo que el servicio esté haciendo internamente, se podrían explotar vulnerabilidades. En el análisis dinámico aprenderás cómo abusar de ellos.
- Receptores de difusión: Aprenderás cómo posiblemente explotarlos durante el análisis dinámico.
- Esquema de URL: Lee el código de la actividad que gestiona el esquema y busca vulnerabilidades que manejen la entrada del usuario. Más información sobre qué es un esquema de URL aquí.
- minSdkVersion, targetSDKVersion, maxSdkVersion: Indican las versiones de Android en las que se ejecutará la aplicación. Es importante tenerlas en cuenta porque desde una perspectiva de seguridad, el soporte de versiones antiguas permitirá que se ejecuten versiones vulnerables conocidas de Android.
Leyendo resources.arsc/strings.xml puedes encontrar alguna información interesante:
- Claves de API
- Esquemas personalizados
- Otra información interesante que los desarrolladores guardan en este archivo
Tapjacking
Tapjacking es un ataque en el que se lanza una aplicación maliciosa y se posiciona encima de una aplicación víctima. Una vez que oculta visiblemente la aplicación víctima, su interfaz de usuario está diseñada de tal manera que engaña al usuario para que interactúe con ella, mientras que está pasando la interacción a la aplicación víctima.
En efecto, está ciegando al usuario para que no sepa que en realidad está realizando acciones en la aplicación víctima.
Para detectar aplicaciones vulnerables a este ataque, deberías buscar actividades exportadas en el manifiesto de Android (ten en cuenta que una actividad con un filtro de intención se exporta automáticamente por defecto). Una vez que hayas encontrado las actividades exportadas, comprueba si requieren algún permiso. Esto se debe a que la aplicación maliciosa también necesitará ese permiso.
Por último, es importante comprobar el código para posibles configuraciones de setFilterTouchesWhenObscured
. Si se establece en true
, un botón puede desactivarse automáticamente si está oscurecido:
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
Puedes usar qark con el parámetro --exploit-apk
para crear una aplicación maliciosa y probar posibles vulnerabilidades de Tapjacking.
Un proyecto de ejemplo que implementa este tipo de característica se puede encontrar en FloatingWindowApp.
La mitigación es relativamente simple, ya que el desarrollador puede elegir no recibir eventos táctiles cuando una vista está cubierta por otra. Usando la Referencia del desarrollador de Android:
A veces es esencial que una aplicación pueda verificar que una acción se está realizando con el pleno conocimiento y consentimiento del usuario, como conceder una solicitud de permiso, realizar una compra o hacer clic en un anuncio. Desafortunadamente, una aplicación maliciosa podría intentar engañar al usuario para que realice estas acciones, sin saberlo, ocultando el propósito previsto de la vista. Como remedio, el marco ofrece un mecanismo de filtrado táctil que se puede utilizar para mejorar la seguridad de las vistas que proporcionan acceso a funcionalidades sensibles.
Para habilitar el filtrado táctil, llama a
setFilterTouchesWhenObscured(boolean)
o establece el atributo de diseño android:filterTouchesWhenObscured en true. Cuando se habilita, el marco descartará los toques que se reciban siempre que la ventana de la vista esté oculta por otra ventana visible. Como resultado, la vista no recibirá toques cada vez que aparezca una ventana emergente, un cuadro de diálogo u otra ventana por encima de la ventana de la vista.
Secuestro de tareas
{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}
Almacenamiento de datos inseguro
Almacenamiento interno
Los archivos creados en el almacenamiento interno son accesibles solo por la aplicación. Esta protección está implementada por Android y es suficiente para la mayoría de las aplicaciones. Pero los desarrolladores a menudo usan MODE_WORLD_READBALE
y MODE_WORLD_WRITABLE
para dar acceso a esos archivos a otra aplicación, pero esto no limita a otras aplicaciones (maliciosas) para acceder a ellos.
Durante el análisis estático, comprueba el uso de esos modos, durante el análisis dinámico, comprueba los permisos de los archivos creados (tal vez algunos de ellos sean legibles / escribibles en todo el mundo).
Más información sobre esta vulnerabilidad y cómo solucionarla aquí.
Almacenamiento externo
Los archivos creados en el almacenamiento externo, como las tarjetas SD, son legibles y escribibles globalmente. Debido a que el almacenamiento externo puede ser eliminado por el usuario y también modificado por cualquier aplicación, no debes almacenar información confidencial utilizando el almacenamiento externo.
Al igual que con los datos de cualquier fuente no confiable, debes realizar la validación de entrada al manejar datos del almacenamiento externo. Recomendamos encarecidamente que no almacenes archivos ejecutables o archivos de clase en el almacenamiento externo antes de la carga dinámica. Si tu aplicación recupera archivos ejecutables desde el almacenamiento externo, los archivos deben estar firmados y verificados criptográficamente antes de la carga dinámica.
Información tomada de aquí.
El almacenamiento externo se puede acceder 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 directorios que limita el acceso de una aplicación al directorio que es específico para esa aplicación. Esto evita que una aplicación maliciosa obtenga acceso de lectura o escritura a los archivos de otra aplicación. {% endhint %}
Datos sensibles almacenados en texto claro
- Preferencias compartidas: Android permite que cada aplicación guarde fácilmente archivos xml en la ruta
/data/data/<nombrepaquete>/shared_prefs/
y a veces es posible encontrar información sensible en texto claro en esa carpeta. - Bases de datos: Android permite que cada aplicación guarde fácilmente bases de datos sqlite en la ruta
/data/data/<nombrepaquete>/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 el CA de Burp dentro del dispositivo. Además, se puede generar con Burp un certificado para un nombre de host diferente y usarlo.
Criptografía rota
Procesos de gestión de claves deficientes
Algunos desarrolladores guardan datos sensibles en el almacenamiento local y los cifran con una clave codificada/predictiva en el código. Esto no debería hacerse ya que algunos procesos de reversión podrían 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 comprobaciones de autorización, almacenar o enviar datos. Algunos de estos algoritmos son: RC4, MD4, MD5, SHA1... Si se usan hashes para almacenar contraseñas, por ejemplo, se deben usar hashes resistentes a la fuerza bruta con sal.
Otras comprobaciones
- 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 comprobaciones para ver si el móvil está rooteado y actuar en consecuencia.
- Si la aplicación es sensible (como las aplicaciones bancarias), debería comprobar si se está utilizando un emulador.
- Si la aplicación es sensible (como las aplicaciones bancarias), debería comprobar su propia integridad antes de ejecutarse para verificar si fue modificada.
- Usar APKiD para comprobar qué compilador/packer/ofuscador se usó para construir el APK.
Aplicación React Native
Lea la siguiente página para aprender cómo acceder fácilmente al código JavaScript de las aplicaciones React:
{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}
Aplicaciones Xamarin
Las aplicaciones Xamarin están escritas en C#, para acceder al código C# descomprimido, es necesario obtener los archivos del apk:
7z r app.apk #Or any other zip decompression cmd
Luego, descomprime todos los DLsL usando xamarin-decompress:
python3 xamarin-decompress.py -o /path/to/decompressed/apk
Análisis de código estático automatizado
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 está controlada por el usuario), sumideros (que indican a la herramienta lugares peligrosos donde la entrada malintencionada 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, URL ocultas, subdominios...) dentro de ella que podrías descubrir. Podrías usar una herramienta como https://github.com/dwisiswant0/apkleaks
Saltar la 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(), código nativo:system()
- Enviar SMS:
sendTextMessage, sendMultipartTestMessage
- Funciones nativas declaradas como
native
:public native, System.loadLibrary, System.load
Otros trucos
{% content-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}
Sigue a HackenProof para aprender más sobre errores web3
🐞 Lee tutoriales de errores web3
🔔 Recibe notificaciones sobre nuevos errores de recompensa
💬 Participa en discusiones comunitarias
Análisis dinámico
En primer lugar, 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
Puedes usar algún emulador como:
- Android Studio (Puedes crear dispositivos x86 y arm, y según esto las últimas versiones x86 admiten bibliotecas ARM sin necesidad de un emulador ARM lento).
- Si quieres intentar instalar una imagen y luego quieres eliminarla, puedes hacerlo en Windows:
C:\Users\<User>\AppData\Local\Android\sdk\system-images\
o Mac:/Users/myeongsic/Library/Android/sdk/system-image
- Este es el emulador principal que recomiendo usar y puedes aprender a configurarlo en esta página.
- Si quieres intentar instalar una imagen y luego quieres eliminarla, puedes hacerlo en Windows:
- Genymotion (Versión gratuita: Personal Edition, necesitas crear una cuenta. Se recomienda descargar la versión CON VirtualBox para evitar posibles errores.)
- Nox (Gratis, pero no admite 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 %}
Como la mayoría de la gente usará Genymotion, ten en cuenta este truco. Para instalar servicios de Google (como AppStore) 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 el modo de red de Bridge Network (esto será útil si te conectarás a la VM de Android desde una VM diferente con las herramientas).
O podrías usar un dispositivo físico (necesitas activar las opciones de depuración y sería genial si pudieras rootearlo):
- Configuración.
- (Desde Android 8.0) Selecciona Sistema.
- Selecciona Acerca del teléfono.
- Presiona Número de compilación 7 veces.
- Vuelve atrás 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 sentirte cómodo con ella.
Sugeriría realizar este análisis dinámico inicial utilizando el análisis dinámico de MobSF + pidcat, para que puedas aprender cómo funciona la aplicación mientras MobSF captura muchos datos interesantes que puedes revisar más tarde.
Fuga de datos no intencional
Registro
A menudo, los desarrolladores dejan información de depuración públicamente. Por lo tanto, cualquier aplicación con permiso READ_LOGS
puede acceder a esos registros y puede obtener información confidencial a través de ellos.
Mientras navegas por la aplicación, usa pidcat(Recomendado, es más fácil de usar y leer) o adb logcat para leer los registros creados y buscar información confidencial.
{% hint style="warning" %}
Ten en cuenta que a partir de las versiones posteriores a Android 4.0, las aplicaciones solo pueden acceder a sus propios registros. Por lo tanto, las aplicaciones no pueden acceder a los registros de otras aplicaciones.
De todos modos, todavía se recomienda no registrar información confidencial.
{% endhint %}
Caché del portapapeles
Android proporciona un marco basado en el portapapeles para proporcionar la función de copiar y pegar en las aplicaciones de Android. Pero esto crea un problema grave cuando alguna otra aplicación puede acceder al portapapeles que contiene algunos datos confidenciales. La función de copiar/pegar debería estar deshabilitada para la parte sensible de la aplicación. Por ejemplo, deshabilita la copia de detalles de tarjetas de crédito.
**Registros
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" %} Tenga en cuenta que un bypass de autorización no siempre es una vulnerabilidad, dependerá de cómo funcione el bypass y qué información se exponga. {% endhint %}
Fuga de información sensible
Las actividades también pueden devolver resultados. Si logra encontrar una actividad exportada y no protegida que llame al método setResult
y devuelva información sensible, hay una fuga de información sensible.
Explotando Proveedores de Contenido - Accediendo y manipulando información sensible
Lea esto si desea recordar 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 pueda extraer datos sensibles de ellos. También es interesante probar posibles inyecciones SQL y travesías de ruta ya que podrían ser vulnerables.
Aprenda cómo explotar los Proveedores de Contenido con Drozer.
Explotando Servicios
Lea esto si desea recordar qué es un Servicio.
Recuerde 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, debe verificar el código para entender qué está haciendo y probarlo dinámicamente para extraer información confidencial, saltarse medidas de autenticación...
Aprenda cómo explotar los Servicios con Drozer.
Explotando Receptores de Difusión
Lea esto si desea recordar qué es un Receptor de Difusión.
Recuerde 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 maneje el receptor el mensaje, podría ser vulnerable.
Aprenda cómo explotar los Receptores de Difusión con Drozer.
Explotando Esquemas / Enlaces profundos
Puede buscar enlaces profundos manualmente, utilizando herramientas como MobSF o scripts como este.
Puede abrir un esquema declarado usando adb o un navegador:
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
Nota que puedes omitir el nombre del paquete y el móvil automáticamente llamará a la aplicación que debería abrir ese enlace.
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
Código ejecutado
Para encontrar el código que se ejecutará en la aplicación, ve a la actividad llamada por el enlace profundo y busca la función onNewIntent
.
Información sensible
Cada vez que encuentres un enlace profundo, comprueba 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 enlace profundo y robar esos datos.
Parámetros en la ruta
También debes comprobar si algún enlace profundo 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 una travesía 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 una Redirección Abierta (si parte de la ruta se utiliza como nombre de dominio), toma de cuenta (si puedes modificar los detalles de los usuarios sin token CSRF y el endpoint vulnerable utilizó el método correcto) y cualquier otra vulnerabilidad. Más información sobre esto aquí.
Más ejemplos
Un informe interesante de recompensa por errores sobre enlaces (/.well-known/assetlinks.json).
Protección insuficiente de la capa de transporte
- Falta de inspección de certificados: la aplicación de Android no verifica la identidad del certificado presentado. La mayoría de las aplicaciones ignoran las advertencias y aceptan cualquier certificado autofirmado presentado. Algunas aplicaciones, en cambio, pasan el tráfico a través de una conexión HTTP.
- Negociación de handshake débil: la aplicación y el servidor realizan un handshake SSL/TLS pero utilizan un conjunto de cifrado inseguro que es vulnerable a ataques MITM. Por lo tanto, cualquier atacante puede descifrar fácilmente esa conexión.
- Fuga de información de privacidad: la mayoría de las veces sucede que las aplicaciones hacen autenticación a través de un canal seguro pero todas las demás conexiones a través de un canal no seguro. Eso no añade seguridad a la aplicación porque el resto de los datos sensibles como la cookie de sesión o los datos de usuario pueden ser interceptados por un usuario malintencionado.
De los 3 escenarios presentados, vamos a discutir cómo verificar la identidad del certificado. Los otros 2 escenarios dependen de la configuración TLS del servidor y si la aplicación envía datos sin cifrar. El pentester debe comprobar por su cuenta la configuración TLS del servidor (aquí) y detectar si se envía alguna información confidencial por un canal no cifrado/vulnerable.
Más información sobre cómo descubrir y solucionar este tipo de vulnerabilidades aquí.
SSL Pinning
Por defecto, al realizar una conexión SSL, el cliente (aplicación de Android) comprueba que el certificado del servidor tiene una cadena de confianza verificable hasta un certificado de confianza (raíz) y coincide con el nombre de host solicitado. Esto lleva al problema de ataques Man in the Middle (MITM).
En el certificate Pinnning, una aplicación de Android contiene el certificado del servidor y solo transmite datos si se presenta el mismo certificado.
Se recomienda aplicar SSL Pinning para los sitios donde se va a enviar información sensible.
Inspección del tráfico HTTP
En primer lugar, debes (debes) instalar el certificado de la herramienta proxy que vas a utilizar, probablemente Burp. Si no instalas el certificado CA de la herramienta proxy, es probable que no veas el tráfico cifrado en el proxy.
Por favor, lee esta guía para aprender cómo instalar un certificado CA personalizado.
Para las aplicaciones que apuntan a API Level 24+ no es suficiente instalar el certificado Burp en el dispositivo. Para evitar esta nueva protección, debes modificar el archivo de configuración de seguridad de red. Por lo tanto, podrías modificar este archivo para autorizar tu certificado CA o puedes leer esta página para un tutorial sobre cómo forzar a la aplicación a aceptar de nuevo todos los certificados instalados en el dispositivo.
SSL Pinning
Ya hemos discutido qué es SSL Pinning solo 2 párrafos antes. Cuando se implementa en una aplicación, deberás omitirlo para inspeccionar el tráfico HTTPS o no lo verás.
Aquí voy a presentar algunas opciones que he utilizado para omitir esta protección:
- Modificar automáticamente el apk para omitir SSLPinning con apk-mitm. El mejor pro de esta opción es que no necesitarás root para omitir 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 omitir 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 omitir automáticamente SSL Pinning usando objection:
objection --gadget com.package.app explore --startup-command "android sslpinning disable"
- También puedes intentar omitir automáticamente SSL Pinning usando MobSF dynamic analysis (explicado a continuación)
- Si todavía crees que hay algún tráfico que no estás capturando, puedes intentar reenviar el tráfico a burp usando iptables. Lee este blog: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62
Vulnerabilidades web comunes
Ten en cuenta que en este paso debes buscar vulnerabilidades web comunes. Se puede encontrar mucha información sobre vulnerabilidades web en este libro, así que no las mencionaré aquí.
Frida
Herramienta de instrumentación dinámica para desarrolladores, ingenieros inversos e investigadores de seguridad. Obtén más información en www.frida.re.
Es increíble, 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 código diferente...
Si quieres hacer pentesting de aplicaciones de Android, debes saber cómo usar Frida.
Aprende a usar Frida: [Tutorial de Frida](fr
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Ten en cuenta que MobSF puede analizar aplicaciones de Android (apk), IOS (ipa) y Windows (apx) (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 de Android o IOS (ve a la carpeta raíz de la aplicación, selecciona todo y crea un archivo ZIP), también podrás analizarlo.
MobSF también te permite comparar análisis y 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á cargado 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 realizadas por ti, capturas de pantalla realizadas por "Exported Activity Tester", correos electrónicos, bases de datos SQLite, archivos XML y otros archivos creados). Todo esto se hace automáticamente excepto las capturas de pantalla, debes presionar cuando quieras una captura de pantalla o debes 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
A partir de las versiones de Android > 5, iniciará automáticamente Frida y establecerá la configuración global del proxy para capturar el tráfico. Solo capturará el tráfico de la aplicación probada.
Frida
Por defecto, también usará algunos scripts de Frida para omitir la validación SSL, detección de root y detección de depurador y para monitorear APIs interesantes.
MobSF también puede invocar actividades exportadas, capturar capturas de pantalla de ellas y guardarlas para el informe.
Para iniciar las pruebas dinámicas, 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 los métodos enganchados, los argumentos pasados y los 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 Friday 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 selecciona uno, 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:
- Enumerate Loaded Classes: Imprimirá todas las clases cargadas
- Capture Strings: Imprimirá todas las cadenas capturadas mientras se usa la aplicación (muy ruidoso)
- Capture String Comparisons: Podría ser muy útil. Mostrará las 2 cadenas que se están comparando y si el resultado fue verdadero o falso.
- Enumerate Class Methods: Pon el nombre de la clase (como "java.io.File") y se imprimirán todos los métodos de la clase.
- Search Class Pattern: Buscar clases por patrón
- Trace Class Methods: 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 Android Api.
Una vez que hayas seleccionado el módulo auxiliar que deseas usar, debes 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 MobSF y comandos shell comunes 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, se puede ver una vista poco atractiva del tráfico capturado en la parte inferior de "HTTP(S) Traffic" o una vista más agradable en el botón verde "Start HTTPTools". Desde la segunda opción, se pueden enviar las solicitudes capturadas a proxies como Burp o Owasp ZAP.
Para hacerlo, encienda Burp --> apague Intercept --> en MobSB HTTPTools seleccione la solicitud --> presione "Send to Fuzzer" --> seleccione la dirección del proxy (http://127.0.0.1:8080\).
Una vez que haya terminado el análisis dinámico con MobSF, puede presionar "Start Web API Fuzzer" para fuzzear solicitudes http 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 se podrá solucionar desde la GUI. Puede solucionar 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 utiliza algunos Hooks para informarte qué está sucediendo en la aplicación mientras realizas un análisis dinámico.
{% content-ref url="inspeckage-tutorial.md" %} inspeckage-tutorial.md {% endcontent-ref %}
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 de seguridad relacionadas con aplicaciones de Android, ya sea en código fuente o en APK empaquetados. La herramienta también es capaz de crear un APK desplegable de "Prueba de Concepto" y comandos ADB, para explotar algunas de las vulnerabilidades encontradas (actividades expuestas, intenciones, 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
- Descompila automáticamente los archivos APK al formato Java y Smali
- Analiza AndroidManifest.xml en busca de vulnerabilidades y comportamientos comunes
- Análisis estático del código fuente en busca de vulnerabilidades y comportamientos comunes
- Información del dispositivo
- Intenciones
- Ejecución de comandos
- Referencias SQLite
- Referencias de registro
- Proveedores de contenido
- Receptores de difusión
- Referencias de servicio
- Referencias de archivo
- Referencias de criptografía
- Secretos codificados
- URL's
- Conexiones de red
- Referencias SSL
- Referencias de WebView
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 los APK y aplicando una serie de reglas para detectar esas vulnerabilidades.
Todas las reglas se centran en un archivo rules.json
, y cada empresa o probador podría crear sus propias reglas para analizar lo que necesitan.
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 errores y hackers éticos a realizar análisis de código estático en aplicaciones móviles*.
El concepto es que arrastres y sueltes el archivo de tu 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.
Descarga la última versión:
./stacoan
AndroBugs
AndroBugs Framework es un sistema de análisis de vulnerabilidades de Android que ayuda a desarrolladores o hackers a encontrar posibles vulnerabilidades de seguridad en aplicaciones de Android.
Versiones para Windows
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 posibles comportamientos 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 flujo 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 Framework de Reverse Engineering y Análisis de Aplicaciones Móviles. Es una herramienta que reúne herramientas comúnmente utilizadas para el reverse engineering 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 hacer que esta tarea sea más fácil y 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 los dominios encontrados usando: pyssltest, testssl y whatweb
- Desofuscar APK a través de apk-deguard.com
Koodous
Útil para detectar malware: https://koodous.com/
Sigue a HackenProof para aprender más sobre errores web3
🐞 Lee tutoriales de errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones comunitarias
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
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 el bytecode y 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 compilar la aplicación en modo de lanzamiento.
De: https://en.wikipedia.org/wiki/ProGuard_(software)
DexGuard
Encuentra una guía paso a paso para desofuscar el apk en https://blog.lexfo.fr/dexguard.html
(De esa guía) La última vez que comprobamos, el modo de operación de Dexguard era:
- cargar un recurso como un InputStream;
- alimentar el resultado a una clase que hereda de FilterInputStream para descifrarlo;
- hacer alguna ofuscación inútil para perder unos minutos de tiempo de un reversor;
- alimentar el resultado descifrado a un ZipInputStream para obtener un archivo DEX;
- finalmente cargar el DEX resultante como un recurso usando el método
loadDex
.
DeGuard
DeGuard invierte el proceso de ofuscación realizado por las herramientas de ofuscación de Android. Esto permite numerosos análisis de seguridad, incluyendo la inspección de código y la predicción de bibliotecas.
Puede cargar un APK ofuscado en su plataforma.
Simplify
Es un desofuscador genérico de Android. Simplify ejecuta virtualmente una aplicación para entender su comportamiento y luego trata de 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 el tipo específico de ofuscación que se utilice.
APKiD
APKiD te da información sobre cómo se hizo un APK. Identifica muchos compiladores, empaquetadores, ofuscadores y otras cosas raras. Es PEiD para Android.
Manual
Lea este tutorial para aprender algunos trucos sobre cómo revertir la ofuscación personalizada
Laboratorios
Androl4b
AndroL4b es una máquina virtual de seguridad de Android basada en ubuntu-mate que incluye la colección de los últimos marcos, tutoriales y laboratorios de diferentes geeks y investigadores de seguridad para el reverse engineering y análisis de malware.
OWASP
{% embed url="https://github.com/OWASP/owasp-mstg%0Ahttps://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06g-testing-network-communication" %}
Repositorios de Git
https://github.com/riddhi-shree/nullCommunity/tree/master/Android
https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
Referencias
Para obtener más información, visite:
- 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
Para probar
Sigue a HackenProof para aprender más sobre errores web3
🐞 Lee tutoriales de errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones comunitarias
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿o quieres tener acceso a la última versión del PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre [The PEASS Family](https://opensea.io