Comment on page

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.