El objetivo de la ponencia es extraer todos los datos relativos a la aplicación Android, tanto a nivel de código como de archivos generados durante el análisis dinámico de la misma.Una vez obtenidos todos los archivos empezaríamos con un análisis de código en busca de fugas de información relativa a entornos de preproducción, conexiones a servidor, credenciales...Por otro lado, analizaremos los archivos creados por la aplicación y los datos almacenados en estos, como pueden ser bases de datos, archivos de log, caché, archivos xml como el sharedpreferences...Una vez se han analizado los archivos creados por la aplicación pasaríamos a un análisis de las comunicaciones entre la aplicación y el servidor, datos que se envían, cómo se envían, archivos enviados, datos recibidos, etc.Enfocado a un nivel medio y si da tiempo, veremos también en que consistiría la evasión de controles proporcionados por la aplicación, como pueden ser controles de root, controles de integridad, certificate pinning, etc. Esto se llevaría a cabo mediante Xposed Framework.Adicionalmente, en este nivel medio hablaríamos del análisis estático del código en smali en lugar del código java obtenido, donde además de poder obtener más detalle del comportamiento de la aplicación nos permitiría modificar dicha aplicación y recompilarla para que ejecute el código que nosotros hayamos modificado.
8. Auditando Aplicaciones Android 8
• Obtención de la APK desde el dispositivo
$ adb pull /data/app/game2048.b2048game.twozerofoureight2048.game.apk
[100%] /data/app/game2048.b2048game.twozerofoureight2048.game.apk
$ unzip game2048.b2048game.twozerofoureight2048.game.apk
• Estructura de la APK:
$ tree -L 1
.
├── AndroidManifest.xml
├── META-INF/
├── assets/
├── build-data.properties
├── classes.dex
├── classes2.dex
├── res/
└── resources.arsc
Deficiencias en la protección del código
9. Auditando Aplicaciones Android 9
• Obtención de la APK desde el dispositivo
• AndroidManifest.xml: Manifiesto de la aplicación en formato binario. Contiene la
definición de permisos, actividades, proveedores de servicio, etc...
• META-INF: Contiene el certificado de la aplicación y el SHA-1 de todos los
recursos
• assets: Esta carpeta contiene archivos auxiliares del código, por ejemplo, xmls.
• res: Es carpeta es exactamente equivalente a su homónima en el código y
contiene recursos, como por ejemplo, imágenes, videos, etc...
• classes.dex: Contiene todo el código de la aplicación en bytecodes de Dalvik
• classes[2...n].dex: Contienen código adicional (MultiDex)
• resources.arsc: Contiene recursos precompilados como por ejemplo XMLs
Deficiencias en la protección del código
10. Auditando Aplicaciones Android 10
• Obtención de la APK Google Play
• APK Downloader
• https://apps.evozi.com/apk-downloader/
Deficiencias en la protección del código
11. Auditando Aplicaciones Android 11
• Decodificando la APK a Java
• $ unzip game2048.b2048game.twozerofoureight2048.game.apk
.
├── AndroidManifest.xml
├── META-INF
├── assets
├── build-data.properties
├── classes.dex
├── classes2.dex
├── res
└── resources.arsc
• $ d2j-dex2jar classes.dex
dex2jar classes.dex -> ./classes-dex2jar.jar
• Abrir el .jar con JD-GUI
Deficiencias en la protección del código
13. Auditando Aplicaciones Android 13
• Decodificando la APK a Smali
• $ apktool d game2048.b2048game.twozerofoureight2048.game.apk
I: Using Apktool 2.2.2 on game2048.b2048game.twozerofoureight2048.game.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /Users/barri/Library/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files…
Deficiencias en la protección del código
14. Auditando Aplicaciones Android 14
• Decodificando la APK a Smali
• $ tree –L 1
.
├── AndroidManifest.xml
├── apktool.yml
├── assets
├── original
├── res
├── smali
├── smali2
└── unknown
Deficiencias en la protección del código
17. Auditando Aplicaciones Android 17
• Buscando Logs en el código Java
• Descripción
Android implementa un sistema de log llamado logcat que permite a las
aplicaciones generar de manera sencilla un log centralizado para el debugging
de las aplicaciones.
Se considera una mala practica el uso de logs en aplicaciones en producción,
el riesgo aumenta si la aplicación escribe en el log información sensible como
usuarios o contraseñas.
Logs
20. Auditando Aplicaciones Android 20
• Buscando Webviews en el código Java
• Descripción
El WebView de Android es un componente que permite a las aplicaciones
cargar páginas web e incrustar el resultado en una aplicación.
Google ha anunciado que este componente dejará de recibir soporte <4.4 por
lo que las vulnerabilidades públicas ya existentes o las nuevas que se podrían
encontrar no serán resueltas.
Uso del Webview con minsdk < 19 (4.4)
21. Auditando Aplicaciones Android 21
• Analizando el AndroidManifest.xml de la aplicación
• Descripción
El parámetro del manifest “AllowBackup” establece si la aplicación permite
copias de seguridad en el cloud o un dispositivo físico. Por defecto, este
atributo se establece a “True”, con lo que es necesario ponerla a “False”.
Por otro lado, el atributo “debuggable”, si se define a “True” permite ejecutar
la aplicación en modo debug incluso con el dispositivo en en modo usuario.
Archivo de configuración de la aplicación (AndroidManifest.xml)
22. Auditando Aplicaciones Android 22
• Analizando la protección del código de la aplicación
• ProGuard: ofusca los nombre de las classes, funciones y variables. (gratiuto)
Nivel de protección/ofuscación del código (ProGuard, DexGuard, Arxan…)
23. Auditando Aplicaciones Android 23
• Analizando la protección del código de la aplicación
• DexGuard: ofusca nombres, cadenas de texto, flujo y utiliza reflection. Puede
tener una clase propia con controles de seguridad (de pago)
Nivel de protección/ofuscación del código (ProGuard, DexGuard, Arxan…)
26. Auditando Aplicaciones Android 26
• Analizando la protección del código de la aplicación
• Arxan: similar a DexGuard con un módulo de whitebox (de pago)
Nivel de protección/ofuscación del código (ProGuard, DexGuard, Arxan…)
28. Auditando Aplicaciones Android 28
• Analizando código Java en busca
de métodos que implementen CP
Implementación de CertificatePinning
29. Auditando Aplicaciones Android 29
• Analizando código Java en busca de controles de seguridad
• Detección de root
Detección de controles de seguridad (Root, Integridad, Emulador)
30. Auditando Aplicaciones Android 30
• Analizando código Java en busca de controles de seguridad
• Control de integridad
Detección de controles de seguridad (Root, Integridad, Emulador)
31. Auditando Aplicaciones Android 31
• Analizando código Java en busca de controles de seguridad
• Detección de emuladores
Detección de controles de seguridad (Root, Integridad, Emulador)
33. Auditando Aplicaciones Android 33
• Obtención e instalación del certificado de Burp en el dispositivo
• Abrir Burp en el PC
• Configurar proxy en el dispositivo
• Ajustes -> Wifi -> Modificar Red -> Opciones Avanzadas -> Proxy Manual -> IP y Puerto
• Abrir http://burp:8080 en el dispositivo
• Descargar el certificado (por defecto .der)
• Modificar la extensión a .cer (dependiendo del dispositivo puede funcionar sin cambiar
extensión)
• Ajustes -> Seguridad -> Instalar certificados desde SD -> Seleccionar certificado
Certificado para MITM
34. Auditando Aplicaciones Android 34
• Instalación de Xposed y sus módulos en el dispositivo
• Descargar e instalar XposedInstaller_*.apk de xda-developers en el dispositivo
• https://forum.xda-developers.com/attachment.php?attachmentid=4393082&d=1516301692
• Descargar y flashear con custom recovery (TWRP) xposed*.zip de xda-developers en
el dispositivo (escogiendo el SDK adecuado)
• https://dl-xda.xposed.info/framework/
• Descargar e instalar los .apk correspondientes a cada uno de los módulos que se
quieren instalar
• https://forum.xda-developers.com/xposed/modules/index-xposed-modules-collection-post-t2327541
XposedFramework
36. Auditando Aplicaciones Android 36
• Análisis del tráfico de la aplicación con Burp
• Una vez se ha instalado el certificado del Burp en el teléfono y se ha configurado un proxy
manual debemos “jugar” con la aplicación mientras observamos las conexiones que la aplicación
realiza.
• Modificamos parámetros enviados tanto por GET como por POST con el fin de alterar la
información enviada al servidor.
Man in the middle
37. Auditando Aplicaciones Android 37
• Análisis de logs en dinámico
• adb logcat / adb logcat –s TAG
• Usar PidCat (https://github.com/JakeWharton/pidcat)
• python pidcat.py package
• python pidcat.py –t TAG package
Logcat
39. Auditando Aplicaciones Android 39
• Alteración de los métodos de la aplicación
• Localizar packagename, clase y método que queremos alterar
• Picar código que queremos ejecutar en dicho método
• Instalar módulo de Xposed (como si de una app cualquiera se tratara)
Xposed Framework
40. Auditando Aplicaciones Android 40
• Análisis de los archivos generados por la aplicación
• Último paso de todos, ya que llevaremos toda la auditoría “jugando” con la app
• $ adb shell
• # su
• # cd /data/data/com.pandiandcode.perrankana.esecretsantapp
• # tree –L 2
Almacenamiento Interno
42. Auditando Aplicaciones Android 42
• Análisis de los archivos generados por la aplicación
• $ adb shell
• # su
• # cd /data/data/game2048.b2048game.twozerofoureight2048.game
• # tree –L 2
Almacenamiento Interno