Android Applications Pentesting

Apoya a HackTricks

¡Ú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:

Android Applications Basics

ADB (Android Debug Bridge)

Esta es la herramienta principal que necesitas para conectarte a un dispositivo Android (emulado o físico). ADB permite controlar dispositivos ya sea 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

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 y maxSdkVersion indican las versiones de Android soportadas, destacando la importancia de no soportar versiones de Android obsoletas y vulnerables por razones de seguridad.

Del archivo strings.xml, se puede descubrir información sensible como claves 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:

Tapjacking

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:

Android Task Hijacking

Almacenamiento de datos inseguro

Almacenamiento Interno

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

  1. Análisis Estático:

  • Asegúrate de que el uso de MODE_WORLD_READABLE y MODE_WORLD_WRITABLE sea examinado cuidadosamente. Estos modos pueden potencialmente exponer archivos a acceso no intencionado o no autorizado.

  1. Análisis Dinámico:

  • Verifica los permisos establecidos en los archivos creados por la aplicación. Específicamente, verifica si algún archivo está configurado para ser legible o escribible a nivel mundial. Esto puede representar un riesgo de seguridad significativo, ya que permitiría que cualquier aplicación instalada en el dispositivo, independientemente de su origen o intención, lea o modifique estos archivos.

Almacenamiento Externo

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

  1. Accesibilidad:

  • Los archivos en almacenamiento externo son globalmente legibles y escribibles. Esto significa que cualquier aplicación o usuario puede acceder a estos archivos.

  1. Preocupaciones de Seguridad:

  • Dada la facilidad de acceso, se 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.

  1. Manejo de Datos desde Almacenamiento Externo:

  • Siempre realiza validación de entrada en los datos recuperados del almacenamiento externo. Esto es crucial porque los datos provienen de una fuente no confiable.

  • Almacenar ejecutables o archivos de clase en almacenamiento externo para carga dinámica está fuertemente desaconsejado.

  • Si tu aplicación debe recuperar archivos ejecutables del almacenamiento externo, asegúrate de que estos archivos estén firmados y verificados criptográficamente antes de ser cargados dinámicamente. Este paso es vital para mantener la integridad de seguridad de tu aplicación.

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

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

Datos sensibles almacenados en texto claro

  • Preferencias compartidas: Android permite a cada aplicación guardar fácilmente archivos xml en la ruta /data/data/<packagename>/shared_prefs/ y a veces es posible encontrar información sensible en texto claro en esa carpeta.

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

TLS Roto

Aceptar Todos los Certificados

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

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:

React Native Application

Aplicaciones Xamarin

Lee la siguiente página para aprender cómo acceder fácilmente al código C# de aplicaciones xamarin:

Xamarin Apps

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

Bypass Biometric Authentication (Android)

Otras funciones interesantes

Otros trucos

content:// protocol

¡Ú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:

AVD - Android Virtual Device
  • Genymotion (Versión gratuita: Edición Personal, necesitas crear una cuenta. _Se recomienda descargar la versión CON VirtualBox para evitar errores potenciales.)

  • Nox (Gratis, pero no soporta Frida o Drozer).

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

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

Además, ten en cuenta que en la configuración de la VM de Android en Genymotion puedes seleccionar Modo de Red Bridge (esto será útil si te conectarás a la VM de Android desde una VM diferente con las herramientas).

Usar un dispositivo físico

Necesitas activar las opciones de depuración y sería genial si puedes rootearlo:

  1. Configuración.

  2. (Desde Android 8.0) Selecciona Sistema.

  3. Selecciona Acerca del teléfono.

  4. Presiona Número de compilación 7 veces.

  5. Regresa y encontrarás las Opciones de desarrollador.

Una vez que hayas instalado la aplicación, lo primero que debes hacer es probarla e investigar qué hace, cómo funciona y familiarizarte con ella. 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.

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

Caché del Portapapeles

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

Registros de Fallos

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

Como pentester, intenta echar un vistazo a estos registros.

Datos de Análisis Enviados a Terceros

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

Bases de Datos SQLite

La mayoría de las aplicaciones utilizarán bases de datos SQLite internas para guardar información. Durante el pentest, echa un vistazo a las bases de datos creadas, los nombres de 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).

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

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:

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

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

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

Código ejecutado

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

Información sensible

Cada vez que encuentres un deep link verifica que no esté recibiendo datos sensibles (como contraseñas) a través de parámetros de URL, porque cualquier otra aplicación podría suplantar el deep link y robar esos datos!

Parámetros en la ruta

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

Más ejemplos

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

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:

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.

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:

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

Datos sensibles en Keystore

En Android, el Keystore es el mejor lugar para almacenar datos sensibles, sin embargo, con suficientes privilegios, 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:

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

Imágenes de Fondo

Cuando pones una aplicación en segundo plano, Android almacena un instantánea de la aplicación para que cuando se recupere al primer plano, comience a cargar la imagen antes de 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 de WebView 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.


¡Ú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

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.

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

adb shell settings put global http_proxy :0

Análisis Dinámico Asistido con Inspeckage

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

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

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

  • 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 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 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 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 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 es un Mobile Application Reverse engineering y Analysis Framework. Es una herramienta que reúne herramientas comúnmente utilizadas para la ingeniería inversa y análisis de aplicaciones móviles, para ayudar en la prueba de aplicaciones móviles contra las amenazas de seguridad móvil de OWASP. Su objetivo es facilitar esta tarea y hacerla más amigable para los desarrolladores de aplicaciones móviles y profesionales de seguridad.

Es capaz de:

Koodous

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

Ofuscando/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.

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.

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 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.

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 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 es una máquina virtual de seguridad de Android basada en ubuntu-mate que incluye la colección de los últimos frameworks, tutoriales y laboratorios de diferentes expertos en seguridad e investigadores para ingeniería inversa y análisis de malware.

Referencias

Aún por probar

Ú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!

Apoya a HackTricks

Last updated