Pentesting Android
Android es la plataforma móvil más abierta y, por tanto, la más fácil de auditar: las apps se distribuyen como APK (un ZIP con el código compilado a DEX, recursos y el manifest), y con herramientas estándar puedes descompilarlas, leer su código casi como el original, instrumentarlas en ejecución e interceptar su tráfico. Esta ficha cubre el flujo específico de Android: obtener el APK, análisis estático, dinámico y los vectores típicos.
El APK y sus piezas
Sección titulada «El APK y sus piezas»APK = ZIP con: AndroidManifest.xml permisos, componentes, deeplinks, exported, debuggable classes.dex bytecode Dalvik (el código de la app) resources.arsc / res/ recursos, strings, layouts lib/ librerías nativas (.so) assets/ ficheros embebidos (a veces secretos/config)Obtener el APK
Sección titulada «Obtener el APK»# desde el dispositivo (app instalada)adb shell pm list packages | grep targetadb shell pm path com.target.app # ruta del APKadb pull /data/app/.../base.apk# o descargarlo de una tienda/mirror (APKPure, etc.)Análisis estático
Sección titulada «Análisis estático»# descompilar a smali + recursos legiblesapktool d base.apk # manifest y smali# DEX -> Java (lectura cómoda)jadx-gui base.apk # decompilador a Javad2j-dex2jar base.apk ; jd-gui # alternativa# todo automatizadomobsf # análisis estático+dinámico con informeQué revisar:
android:debuggable="true" # app depurable -> extraes datos fácilandroid:allowBackup="true" # backup extraíble (adb backup)<activity ... android:exported="true"> # componentes accesibles por otras apps<data android:scheme="..."> # deeplinks (ver mob-deeplinks)# secretos en código/recursos/assetsgrep -riE 'api_key|secret|password|BEGIN RSA|http' ./ # claves, endpointsstrings lib/*/*.so # secretos en código nativoEntorno dinámico
Sección titulada «Entorno dinámico»# emulador o dispositivo rooteadoadb devices ; adb shell# proxy para interceptar tráfico (ver mob-ssl)# configurar Burp como proxy + instalar su CA# instrumentación en ejecuciónfrida / objection (ver mob-frida) # hooking, bypass de pinning/root detectionVectores de ataque típicos
Sección titulada «Vectores de ataque típicos»# componentes exportados (Activities, Services, Content Providers, Broadcast Receivers)adb shell am start -n com.target/.AdminActivity # lanzar una activity exportadaadb shell content query --uri content://com.target.provider/users # Content Provider# deeplinks (ver mob-deeplinks)adb shell am start -W -a android.intent.action.VIEW -d "targetapp://..."# almacenamiento inseguro (ver mob-storage)adb shell run-as com.target cat /data/data/com.target/shared_prefs/*.xml# WebViews inseguras: JavaScript habilitado, addJavascriptInterface -> RCE/XSS en WebView# backup: adb backup -f backup.ab com.target (si allowBackup=true)Content Providers e IPC
Sección titulada «Content Providers e IPC»Los componentes exportados son una superficie clave: una Activity/Service/Provider/Receiver con exported="true" (o con intent-filter) puede ser invocado por cualquier otra app (o por adb), saltándose controles de la UI.
# enumerar componentes exportados (del manifest descompilado)# probar inyección SQL en Content Providers, path traversal, acceso a datosdrozer # framework de análisis de IPC/componentesPara la defensa
Sección titulada «Para la defensa»- No hardcodear secretos;
debuggable=false,allowBackup=falseen producción. - Minimizar componentes exportados; proteger los necesarios con permisos; validar toda entrada (intents, Content Providers).
- Almacenamiento cifrado (ver Almacenamiento inseguro), TLS + pinning (SSL pinning y bypass).
- WebViews seguras: sin
addJavascriptInterfaceinnecesario, sin cargar contenido no confiable. - Protecciones RESILIENCE (root/tamper/debug detection, ofuscación con R8/ProGuard) — elevan el coste, no sustituyen la seguridad del backend.
Checklist de prueba
Sección titulada «Checklist de prueba»- Obtener el APK (adb pull / tienda)
- Descompilar (apktool/jadx) y revisar manifest
- debuggable/allowBackup/exported en el manifest
- Secretos en código/recursos/assets/.so
- Componentes exportados e IPC (drozer, am/content)
- Deeplinks (Deeplinks e IPC)
- Almacenamiento inseguro (Almacenamiento inseguro)
- Tráfico + SSL pinning (SSL pinning y bypass); WebViews; backend