Busqueda de vulnerabilidades - Analisis
dinamico
Juan Heguiabehere Joaquın Rinaudo
22o Escuela de Verano de Ciencias InformaticasRIO 2015
Sobre el curso
I Lunes: Android como plataforma de desarrollo - Malware
I Martes: Malware (cont) - Diseno seguro en aplicaciones
I Jueves: Busqueda de vulnerabilidades - Analisis estatico
I Viernes: Busqueda de vulnerabilidades - Analisis dinamico
Contenidos
Sobre el curso
Analisis dinamico
Herramientas
Caso 1: Incorrecta validacion de certificados
Caso 2: Logging de informacion privada
Caso 3: Server local expuesto a otras apps
Caso 4: Transmision insegura de datos
Caso 5: Incorrecta validacion del servidor
Caso 6: Almacenamiento de informacion privada en SD
Caso 7: Inyectando Javascript en un contexto
Caso 8: Interfaces Javascript-Java / comunicacion HTTP
¿Que es analisis dinamico?
I Analisis a partir de la ejecucion del programa yobservacion de comportamientos
I Ejecucion en entorno controlado
I Tipos de analisis dinamicos que vamos a ver:I TraficoI IPCI Acceso y modificaciones a recursos, archivos, etcI Acceso a informacion privada del usuario
adb (Android Debug Bridge)
I Inspeccionar almacenamiento interno de la aplicacion:/data/data/PKGNAME
I Subir o bajar archivos del dispositivo: adb push/pull
I Logs de aplicaciones: logcat
I am para comenzar Activity, Service o Receiver
I sqlite3 para analizar bases sql
Proxies
I Utilizar proxy para capturar y modificar HTTP/HTTPS:I BurpI ZAPI mitmproxy
I Wireshark para capturar el resto del trafico
Drozer
I Framework de testing de seguridad para Android
I Buscar vulnerabilidades asumiendo rol de app permite:I Buscar informacion de aplicaciones instaladasI Interactuar con Activities, Receivers, Content Providers
y Servicios de otras appsI Utilizar un shell para comunicarse con el OS de linuxI Buscar la superficie de ataque de otras apps y
vulnerabilidades conocidas
Como conectarse a Drozer
I Instalar:I Consola que corre en la PCI Agente en el dispositivo o emuladorI Prender el agente desde el dispositivoI adb forward tcp:31415 tcp:31415I drozer console connect
Usando la consola Drozer
I shell: Shell del dispositivo en el contexto del agente
I list: Lista modulos Drozer que se pueden ejecutar en lasesion
I run: Correr un moduloI run app.package.attacksurface PKG: Lista
componentes exportadosI run app.package.info PKG: Informacion general de la
appI run app.COMPONENT.info -p PKG: Informacion
detallada de cada tipo de componente exportadoI run run scanner.misc.readablefiles: Buscar
archivos leıbles para todas las appsI help MODULE: Explicacion y parametros para cada
modulo
Cydia Substrate
I Instrumentacion dinamica: Modifica la aplicacion enRuntime
I Permite agregar codigo/hooks a metodos existentes
I Crear extensiones de aplicaciones modificando susmetodos
I Sin necesidad de desensamblar, modificar y recompilarnuevamente la aplicacion
I No se modifica el apk
I Sı hay que desensamblar los apks para encontrar cosasinteresantes para instrumentar
Extensiones de Cydia
I Android-SSL-TrustKillerI Fuerza a las apps a no validar certificados al
comunicarse con servidores via HTTPSI Analizar trafico con un proxy de apps que hacen
Certificate Pinning o usan certificados validos
Extensiones de Cydia
I IntroSpyI Ayuda a entender que hace una app cuando correI Logea:
I Uso general criptografıaI HashingI Claves utilizadasI Accesos a archivos en la memoria internaI Lectura y escritura a SDI Mecanismos de IPC utilizados e Intents enviadosI Lectura y escritura de shared prefsI Uso de SSL, falta de validacionI Uso de Webviews y si hay JS, FS y JSinterfaces
habilitadosI Accesos a base SQL
Creando tu propia extension de Cydia
Caso 1: Incorrecta validacion de certificados
I Si proxy captura https, la app no valida los certificadoscorrectamente
I Si no, se puede instalar Android-SSL-TrustKiller o instalarel certificado del proxy en el dispositivo
I Una vez que se encontro que es vulnerable, estaticamentebuscar la causa:
I TrustManager customI HostNameVerifier customI Override de onReceiveSSLErrorI SSLSocketFactory getInsecureI HttpsURLConnection setDefaultSSLSocketFactory
Caso 1: MercadoLibre
I MercadoLibre hasta 3.10.6
I Atacantes podıan montar ataques de Man-in-the-Middle
I Android apps that fail to validate SSL: Documento con23 mil apps que fallan
Caso 2: Logging de informacion privada
I Clase android.util.Log para logear informacion:I Log.d(Debug)/Log.e(Error)I Log.i(Info)/Log.v(Verbose)/Log.w(Warn)
I Permiso android.permission.READ LOGS para leer
I adb logcat para leer los logs de todas las aplicaciones
Caso 2: Logging de informacion privada
I Hasta 4.0, una aplicacion con READ LOGS obtenıa los logsde todas las apps
Caso 2: Logging de informacion privada
I Ahora, una aplicacion con READ LOGS NO obtiene los logsde las otras apps
I Pero conectando el dispositivo a una PC, se puedenseguir obteniendo todos los logs
Caso 2: Facebook SDKI Facebook SDK permite a integrar funcionalidades de
Facebook a aplicaciones de tercerosI Token de acceso es un identificador de FB dado a una
app para hacer pedidos por el usuarioI Cuando un usuario se logea utilizando Facebook a la app
se le da un token
Caso 2: Facebook SDK
I Vulnerabilidad: SDK logeaba los tokens cuando unusuario se logeaba con esa app
I Apps maliciosas podıan leer los logs y obtener estostokens y usarlos para publicar como el usuario
Caso 3: Server local expuesto a otras apps
I Algunas aplicaciones utilizan servidores locales HTTP
I Bind en localhost o 0.0.0.0
I localhost: Aplicaciones maliciosas
I global: Atacantes en LAN,WAN
Caso 3: Facebook
I Facebook hasta la version 13
I Incluıa un servidor que funcionaba como caching proxypara los video
I GenericHttpServer que es escuchaba en 0.0.0.0
I Un atacante podıa conectarse:I Utilizarlo como Open ProxyI Agotar la memoria del dispositivoI Consumirle datos de la red 3g o LTE de la vıctima
I Solucion: Escuchar en 127.0.0.1
Caso 4: Transmision insegura de datos
I La red es insegura:I SniffingI Inyeccion de datosI Hijacking de sesionI Man-in-the-MiddleI DNS PoisoningI SSL Strip
I Informacion privada debe utilizar protocolos seguros(no HTTP, UDP, TCP, VOIP)
Caso 4: Facebook
I Facebook hasta la version 10
I App enviaba y recibıa las grabaciones de audio demensajes privados por HTTP
I App enviaba pedidos a CDNs por HTTP para reproducirlos videos
Caso 4: InstagramI Instagram todavıa utiliza HTTPI Session Hijacking
Caso 5: Incorrecta validacion del servidor
I Los servidores deberıan:I Validar el formato de inputs que vienen de la aplicacionI Prevenir ataques de replayI Validar que el pedido esta siguiendo la logica esperada:
I AutenticacionI AutorizacionI Control de recursos
Caso 5: PicsArt
I Todavıa es explotable!
I Se puede enviar pedidos maliciosos para bypassear laautenticacion
I Desde la cuenta, se puede obtener tokens de acceso deredes sociales asociadas
Caso 6: Almacenamiento de informacion privada en
SDI Almacenamiento externo (/sdcard,/mnt/sdcard) es
compartido con otras aplicacionesI Leıble para todas las apps hasta 4.3 y antes o las que
declaren READ EXTERNAL STORAGE para 4.4 en adelanteI Escritura para todos bajo WRITE EXTERNAL STORAGEI Si se va a guardar contenido sensible en la SD, encriptarlo
Caso 6: Evernote
I Evernote guardaba todas las notas en/sdcard/Android/data/com.evernote/files/
I Contenido sin encriptar
Caso 7: Inyectando Javascript en un contexto
I Aplicacion con una actividad exportada con una Webview(p.e. navegadores)
I Actividad anotada como singleTask
I Ademas intent-filter con:<data android:scheme="javascript"/>
I Aplicacion maliciosa puede correr JS en un contextodeterminado para robar cookies
I Ataque consiste en:I Enviar un Intent para cargar la pagina vıctima (p.e.www.google.com)
I Enviar otro Intent, usando el esquema javascript, paracorrer JS en el contexto de esa pagina
Caso 7: Sleipnir Browser
Caso 7: Sleipnir Browser
Caso 8: Interfaces Javascript-Java / comunicacion
HTTP
I Webview y addJavascriptInterface
I Utilizado en librerıas de ads, Phonegap, navegadores
I Ataque: Inyectar JS a pedidos HTTP a librerıas o codigoJS con MITM
I Abusar interfaz para correr codigo nativo u exfiltrar datos
I Codigo a inyectar depende de:I Metodos interfaz expuestaI target-SDK de la aplicacion / Version de AndroidI Permisos de la aplicacion
Caso 8: Interfaces Javascript-Java / comunicacion
HTTP
Bibliografıa:
1. Vulnerabilidad Facebook SDK
2. Android Secure Coding: JPCERT
3. Vulnerabilidad PicsArt
4. Vulnerabilidad Facebook
5. Vulnerabilidad MercadoLibre
6. Vulnerabilidad Instagram
7. Vulnerabilidad Evernote