Analisis Estatico Android

Herramientas

Entre las herramientas más conocidas tenemos:

IMPORTANTE! ES NECESARIO TENER EN CUENTA QUE CUALQUIER HERRAMIENTA AUTOMATICA PUEDE GENERAR FALSOS POSITIVOS, POR LO QUE SE DEBEN ANALIZAR LOS RESULTADOS OBTENIDOS MANUALMENTE PARA DESCARTARLOS.

Analizar

Permisos de AndroidManifest.xml

  • Debuggable

Este atributo permite depurar la aplicación.

android:debuggable="true"|"false"

En el caso de no estar indicado el valor (es decir, si nos encontramos solamente android:debuggable), el apk NO es depurable.

  • AllowBackup

android:allowBackup="true"|"false"

En el caso de estar como "true", permite realizar backups de los datos que contiene a través de ADB.

adb backup -f app_backup.ab -apk [apkName.apk]
  • WAKE_LOCK

<uses-permission android:name="android.permission.WAKE_LOCK" />

Permite que el dispositivo permanezca activo y evita que entre en estado de suspensión.

  • GET_TASKS

<uses-permission android:name="android.permission.GET_TASKS" />

Permite a la aplicación acceder a los procesos que se encuentran activos/corriendo en el dispositivo.

  • WRITE_EXTERNAL_STORAGE

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Permite a la aplicación acceso de escritura al contenido de la tarjeta SD.

Directorios y ficheros

Para analizar el código fuente de la aplicación, podemos usar JADX.

En los WebView, debemos tener en cuenta myWebView.settings.javaScriptEnabled = true ya que puede facilitar la ejecución de XSS.

Almacenamiento y Base de datos

Buscar palabras clave y llamadas a APIs usadas para almacenar información. Algunas de las clases y funciones son:

  • clase SharedPreferences ( almacena parejas de clave-valor)

  • clase FileOutPutStream (usa almacenamiento interno o externo)

  • funciones getExternal* (usa almacenamiento externo)

  • funcióngetWritableDatabase (devuelve una bdd SQLiteDatabase con permisos de escritura)

Buscar en el código fuente:

this.db = localUserSecretStore.getWritableDatabase("Password");
  • función getReadableDatabase (devuelve una bdd SQLiteDatabase con permisos de lectura)

  • funciones getCacheDir y getExternalCacheDirs (usan ficheros cacheados)

Ubicación común de claves/API keys/contraseñas:

  • res/values/strings.xml

  • build configs (local.properties o gradle.properties)

  • /data/data/<package-name>/shared_prefs

  • /data/data/<package-name>/files/

Base de datos

La ruta donde se almacenan las bdd de las aplicaciones es

/data/data/<package-name>/databases/

Copiar la base datos de la aplicación al entorno de pruebas con

adb pull /data/data/AppName/.. /destination/path/for/the/file

y posteriormente abrir SQLite e importar la base de datos.

Last updated