Auditando Aplicaciones
Android
Cristian Barrientos
Auditando Aplicaciones Android 2
1. WHOAMI
2. ESTRUCTURA DE LA AUDITORÍA
3.- REVERSING
4.- ANÁLISIS ESTÁTICO
5.- PREPARACIÓN DEL ENTORNO
6.- ANÁLISIS DINÁMICO
7.- ELABORACIÓN DE RESULTADOS
Auditando Aplicaciones Android 3
01 WHOAMI
Auditando Aplicaciones Android 4
• Cristian Barrientos Beltrán
• Consultor/Auditor en Wise Security
• Especializado en auditoría móvil (Android & iOS)
• Graduado en Ingeniería Informática (UPC – FIB)
• Máster en Cybersecurity Management (UPC School)
• Telegram: @SerBarristan
Auditando Aplicaciones Android 5
02
ESTRUCTURA DE LA
AUDITORÍA
Auditando Aplicaciones Android 6
Reversing
• adb
• apktool
• unzip
• dex2jar
• baksmali
• APK Studio
• Sublime
• JD-GUI
• SQLite
• Certificado
• Xposed -
Framework
• JustTrustMe
• Burp Suite
• Xposed Hooks
• Documentación
• Informe
Análisis
Estático
Preparación
entorno
Análisis
Dinámico
Elaboración de
resultados
Auditando Aplicaciones Android 7
03 REVERSING
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
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
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
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
Auditando Aplicaciones Android 12
• Analizando el código Java
Deficiencias en la protección del código
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
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
Auditando Aplicaciones Android 15
• Analizando Smali
Deficiencias en la protección del código
Auditando Aplicaciones Android 16
04 ANÁLISIS ESTÁTICO
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
Auditando Aplicaciones Android 18
• Buscando Logs en el código Java
Logs
Auditando Aplicaciones Android 19
• Buscando URLs y/o IPs en el código Java
Enlaces a Internet (HTTP)
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)
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)
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…)
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…)
Auditando Aplicaciones Android 24
Auditando Aplicaciones Android 25
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…)
Auditando Aplicaciones Android 27
Auditando Aplicaciones Android 28
• Analizando código Java en busca
de métodos que implementen CP
Implementación de CertificatePinning
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)
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)
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)
Auditando Aplicaciones Android 32
05
PREPARACIÓN DEL
ENTORNO
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
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
Auditando Aplicaciones Android 35
06 ANÁLISIS DINÁMICO
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
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
Auditando Aplicaciones Android 38
• Análisis de logs en dinámico
Logcat
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
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
Auditando Aplicaciones Android 41
Almacenamiento Interno – Bases de Datos
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
Auditando Aplicaciones Android 43
Auditando Aplicaciones Android 44
Almacenamiento Interno - Shared Preferences
Auditando Aplicaciones Android 45
Almacenamiento Interno – SQLite Database (Cookies)
Auditando Aplicaciones Android 46
07
ELABORACIÓN DE
RESULTADOS
Auditando Aplicaciones Android 47
EVIDENCIAS
Auditando Aplicaciones Android 48
“Android was built to be very, very secure.”
Sundar Pichai

Cristian Barrientos - Auditando Aplicaciones Android [rooted2018]

  • 1.
  • 2.
    Auditando Aplicaciones Android2 1. WHOAMI 2. ESTRUCTURA DE LA AUDITORÍA 3.- REVERSING 4.- ANÁLISIS ESTÁTICO 5.- PREPARACIÓN DEL ENTORNO 6.- ANÁLISIS DINÁMICO 7.- ELABORACIÓN DE RESULTADOS
  • 3.
  • 4.
    Auditando Aplicaciones Android4 • Cristian Barrientos Beltrán • Consultor/Auditor en Wise Security • Especializado en auditoría móvil (Android & iOS) • Graduado en Ingeniería Informática (UPC – FIB) • Máster en Cybersecurity Management (UPC School) • Telegram: @SerBarristan
  • 5.
    Auditando Aplicaciones Android5 02 ESTRUCTURA DE LA AUDITORÍA
  • 6.
    Auditando Aplicaciones Android6 Reversing • adb • apktool • unzip • dex2jar • baksmali • APK Studio • Sublime • JD-GUI • SQLite • Certificado • Xposed - Framework • JustTrustMe • Burp Suite • Xposed Hooks • Documentación • Informe Análisis Estático Preparación entorno Análisis Dinámico Elaboración de resultados
  • 7.
  • 8.
    Auditando Aplicaciones Android8 • 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 Android9 • 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 Android10 • 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 Android11 • 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
  • 12.
    Auditando Aplicaciones Android12 • Analizando el código Java Deficiencias en la protección del código
  • 13.
    Auditando Aplicaciones Android13 • 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 Android14 • 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
  • 15.
    Auditando Aplicaciones Android15 • Analizando Smali Deficiencias en la protección del código
  • 16.
    Auditando Aplicaciones Android16 04 ANÁLISIS ESTÁTICO
  • 17.
    Auditando Aplicaciones Android17 • 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
  • 18.
    Auditando Aplicaciones Android18 • Buscando Logs en el código Java Logs
  • 19.
    Auditando Aplicaciones Android19 • Buscando URLs y/o IPs en el código Java Enlaces a Internet (HTTP)
  • 20.
    Auditando Aplicaciones Android20 • 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 Android21 • 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 Android22 • 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 Android23 • 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…)
  • 24.
  • 25.
  • 26.
    Auditando Aplicaciones Android26 • 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…)
  • 27.
  • 28.
    Auditando Aplicaciones Android28 • Analizando código Java en busca de métodos que implementen CP Implementación de CertificatePinning
  • 29.
    Auditando Aplicaciones Android29 • 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 Android30 • 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 Android31 • Analizando código Java en busca de controles de seguridad • Detección de emuladores Detección de controles de seguridad (Root, Integridad, Emulador)
  • 32.
    Auditando Aplicaciones Android32 05 PREPARACIÓN DEL ENTORNO
  • 33.
    Auditando Aplicaciones Android33 • 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 Android34 • 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
  • 35.
    Auditando Aplicaciones Android35 06 ANÁLISIS DINÁMICO
  • 36.
    Auditando Aplicaciones Android36 • 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 Android37 • 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
  • 38.
    Auditando Aplicaciones Android38 • Análisis de logs en dinámico Logcat
  • 39.
    Auditando Aplicaciones Android39 • 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 Android40 • 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
  • 41.
    Auditando Aplicaciones Android41 Almacenamiento Interno – Bases de Datos
  • 42.
    Auditando Aplicaciones Android42 • 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
  • 43.
  • 44.
    Auditando Aplicaciones Android44 Almacenamiento Interno - Shared Preferences
  • 45.
    Auditando Aplicaciones Android45 Almacenamiento Interno – SQLite Database (Cookies)
  • 46.
    Auditando Aplicaciones Android46 07 ELABORACIÓN DE RESULTADOS
  • 47.
  • 48.
    Auditando Aplicaciones Android48 “Android was built to be very, very secure.” Sundar Pichai