El documento «Todo sobre Pentesting en Android: Una Metodología Completa» fue creado por Xcheater
Consulta la Parte I
Análisis del Código Fuente
Al descompilar un APK, se puede acceder al código fuente para su análisis. Sin embargo, muchas aplicaciones actuales utilizan técnicas de ofuscación que dificultan la comprensión de su lógica.
Como se menciona en el artículo anterior, es posible revisar ciertos archivos para obtener pistas sobre la lógica implementada, como la detección de root, SSL Pinning, comprobaciones del depurador, validaciones del lado del cliente, etc. El análisis del código fuente puede ofrecer ideas valiosas para realizar un análisis dinámico eficaz, incluyendo ataques como XSS o inyecciones.
Puedes analizar el código directamente usando semgrep o MobSF, herramientas que proporcionan un panorama rápido sobre el estado de seguridad del código. Aquí tienes el repositorio de semgrep-rules-android-security, que podría ser de gran utilidad.
Aspectos a revisar manualmente en el código fuente:
- Lógica de detección de root: revisa las comprobaciones de `su` y la integridad de SafetyNet/Play.
- Implementación de SSL Pinning: busca `CertificatePinner`, `TrustManager` y validaciones de SSL personalizadas.
- Comprobaciones del depurador: busca `isDebuggerConnected()` y otros indicadores de depuración.
- Validación del lado del cliente: revisa las comprobaciones de autenticación/autorización que podrían omitirse.
- Uso de WebView: revisa el uso de `loadUrl()` y `evaluateJavascript()` (potenciales fuentes de XSS).
- Gestión de intenciones: analiza cómo se procesan las intenciones (riesgo de inyección de intenciones).
- Gestión de enlaces profundos: verifica la validación de URL en los manejadores de enlaces profundos.
Firma del APK – Vulnerabilidad Janus
La verificación de la firma del APK es crucial para garantizar la integridad de la aplicación. No obstante, existe una vulnerabilidad conocida como Janus (CVE-2017–13156), que permite a los atacantes modificar archivos APK sin invalidar su firma.
Comprobación de integridad (anti-tampering): utiliza APKTool para descompilar el APK y modificar algunos archivos, como manifest.xml, cambiando la cadena de «true» a «false». Luego, recompila el APK, fírmalo con tu propia clave, instálalo y ejecútalo.
Si la aplicación detecta algún tipo de manipulación, debería denegar su ejecución o mostrar un error. Si se ejecuta sin problemas, significa que carece de una adecuada detección de manipulaciones, lo que constituye una vulnerabilidad.
Ahora hablemos de dos medidas de seguridad fundamentales: la detección de root y SSL Pinning.
La mayoría de las aplicaciones actuales cuentan con estas medidas de seguridad, lo que significa que para realizar una evaluación dinámica y otras comprobaciones de seguridad, es esencial eludirlas. Veamos una visión general de ambas.
¡Detección de root!
Si una aplicación detecta que el dispositivo está rooteado, puede negarse a ejecutarse, mostrar un error o restringir ciertas funciones.
Las aplicaciones emplean diversas técnicas para identificar el root. A continuación, se detallan las más comunes que podrías encontrar durante una evaluación:
- Uso de bibliotecas de detección de root: muchos desarrolladores no implementan código personalizado para esto, optando por usar bibliotecas como RootBeer o RootCloak.
- Comprobación del binario «su»: busca el binario «su» en rutas comunes como /system/bin/su.
- Buscando aplicaciones de administración de root: verifican si están presentes en el dispositivo herramientas como Magisk o SuperSU.
- Propiedades del sistema: revisan propiedades como ro.debuggable para detectar root.
- Google SafetyNet: ofrece una solución oficial para la verificación de la integridad del dispositivo.
- Detección de particiones del sistema con permisos de escritura: detectan si /system está montado en modo lectura/escritura.
- Detección de Magisk o Zygisk: buscan archivos o procesos relacionados con estas herramientas.
¿Cómo eludir la detección de root?
Existen varios métodos para eludir la detección de root. A continuación, se presentan los más comunes:
- Magisk Hide: habilita la DenyList en la configuración de Magisk e incluye la aplicación objetivo.
- Scripts de Frida: utiliza Frida para interceptar las funciones de detección y hacer que devuelvan falso.
- Objection: proporciona una interfaz de línea de comandos para desactivar las verificaciones de root.
- Parchear el APK: busca y modifica la lógica de detección de root, recompila y firma la aplicación.
- Módulos Magisk/LSposed: emplea módulos para ocultar el root de aplicaciones.
Recuerda que la elusión es más efectiva cuando entiendes cómo detecta la aplicación el root. Lee el código, identifica las verificaciones y selecciona el método de elusión adecuado.
SSL Pinning
La fijación SSL es una medida que permite a la aplicación validar el certificado SSL del servidor con un certificado predefinido o una clave pública integrada. Esto previene ataques de intermediarios (MitM).
Con la fijación SSL, no puedes interceptar el tráfico utilizando Burp Suite ni ningún otro proxy, ya que la aplicación rechazará el certificado del proxy.
¿Cómo se implementa la fijación SSL?
Los desarrolladores pueden llevar a cabo la fijación SSL de diversas maneras. Aquí están las más comunes que podrás encontrar:
- Configuración de seguridad de red (XML): la aplicación define certificados de confianza en un archivo XML.
- TrustManager personalizado: algunos desarrolladores implementan su propio TrustManager para la validación manual de certificados.
- Bibliotecas de terceros: bibliotecas como OkHttp ofrecen implementaciones de anclaje SSL que son fáciles de integrar.
¿Cómo evitar las verificaciones de SSL Pinning?
Para completar tu evaluación, necesitas sortear estas verificaciones. Aunque sería ideal solicitar al desarrollador que las elimine, en un escenario de caja negra no podrás hacerlo.
A continuación, se presentan algunas soluciones para eludir la fijación SSL:
- Objection: desactiva la fijación de SSL con un solo comando.
- Scripts de Frida: utiliza scripts universales para evitar la fijación de SSL.
- HTTP Toolkit: una herramienta que facilita la instalación de certificados y la elusión de la fijación de SSL.
- Aplicación de parches manualmente: descompila, modifica la implementación de fijación y recompila la aplicación.
Conclusión
Hemos abarcado muchos aspectos en este artículo, proporcionando una base sólida para iniciar tus pruebas de penetración en Android. Sin embargo, este campo es mucho más amplio. Existen muchas áreas que aún necesitan ser exploradas, como WebView, enlaces profundos, problemas de memoria y cuestiones relacionadas con la criptografía.
Profundizaré en estos temas en artículos futuros, así que ¡mantente atento!
El documento «Todo sobre Pentesting en Android: Una Metodología Completa» fue creado por Xcheater
Con Información de blog.segu-info.com.ar