the_open_door
café
ESEN
← Volver al índice

APK analysis (reversing Android apps)

Cuando un servicio web ofrece una app Android para descargar, ese .apk es una mina de información: no es más que un ZIP que empaqueta el código de la aplicación, sus recursos y su configuración. Como el cliente móvil tiene que saber a qué API hablar y cómo autenticarse, suele llevar grabados dentro endpoints, subdominios, claves y a veces tokens que desde fuera no se ven.

El flujo típico es decompilar el paquete y buscar entre el resultado. Con apktool se desensambla el .apk a su forma legible (los .smali, que son el bytecode Dalvik en texto, más los recursos y el AndroidManifest.xml):

apktool d instant.apk

A partir de ahí se greppea el árbol decompilado por cadenas interesantes. Los dominios y rutas de la API revelan la superficie real (a menudo vhosts que no estaban enlazados en la web, ver fuzzing de vhosts):

grep -r "ejemplo.htb" .          # subdominios y endpoints embebidos
grep -r "api/v1" .               # rutas de la API
grep -rE "ey[A-Za-z0-9_-]+\." .   # posibles JWT (siempre empiezan por "ey")

El hallazgo más jugoso es un secreto codificado en duro: una clave de API, una contraseña o, como aquí, un JWT de administrador dejado en una clase de pruebas. Ese token concede directamente el rol privilegiado contra la API sin necesidad de romper la autenticación.

El porqué. Los desarrolladores asumen que lo que va dentro del binario está "oculto", pero cualquiera que descargue la app puede leerlo. El network_security_config.xml del manifiesto también lista los dominios que la app considera de confianza, lo que confirma los vhosts a atacar.

Cómo detectarlo. El análisis del .apk es offline y no deja rastro, pero su fruto sí: el uso de un secreto que solo vive en el cliente móvil (una API key, un JWT de administrador embebido) desde un cliente que no es la app es la firma, un User-Agent distinto, sin las cabeceras propias del móvil, o desde una IP nueva. En el servidor, peticiones directas a endpoints/vhosts que solo aparecían en el APK (nunca enlazados en la web) poco después de una descarga del .apk es el otro indicador. Rotar/vencer esos tokens convierte el hallazgo en inútil.

Defensa. No incrustar credenciales ni tokens en el cliente; emitir tokens de vida corta por usuario; ofuscar no es protección (solo retrasa). Cualquier secreto que viaje en el binario debe considerarse público.

HerramientasapktoolJD-GUI

Máquinas donde se aplica