Seguridad y Proteccion de Datos en
Android
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
Sobre el curso
I Lunes: Android como plataforma de desarrolloI Arquitectura de AndroidI Kernel de LinuxI Bibliotecas nativasI Java - Dalvik VMI Android SDK - Clases nativasI Modelo de seguridad de AndroidI Aplicaciones AndroidI Herramientas de desarrolloI Malware
I Martes: Malware (cont) - Diseno seguro en aplicaciones
I Jueves: Busqueda de vulnerabilidades - Analisis estatico
I Viernes: Busqueda de vulnerabilidades - Analisis dinamico
ContenidosSobre el curso
Arquitectura de AndroidComponentes de Android
Kernel de LinuxZygoteRuntimeComponentes nativos de userspace
Modelo de Seguridad de AndroidSandboxPermisos
Problema: Como llegan las actualizaciones
Aplicaciones AndroidComponentes de una aplicacion Android
ActividadesServiciosReceptores de notificaciones
Generando un paquete de AndroidHerramientas
Arquitectura de Android
Cinco componentes principales:
I Kernel de Linux
I Codigo nativo de userspace
I Ambiente Android (bibliotecas/servicios escritos en Java)
I Maquina virtual Dalvik / ART
I Aplicaciones Android (escritas en Java)
Kernel de Linux
I Provee acceso al hardware
I ”Sandboxes”
I Modificaciones de GoogleI Baseband del telefonoI Binder para IPCI Optimizaciones varias
Zygote
Zygote es el proceso que levanta todas las aplicacionesAndroid
I Crea la primera VM
I Levanta clases y recursos basicos de Android
I Levanta un socket Unix y espera pedidos
I Al recibir un pedido, hace fork()
I La VM nueva ya tiene todos los recursos y clases basicos
I Copy-on-Write agrega eficiencia (pero perjudica el ASLR)
Dalvik/ART
Disenadas especıficamente para proveer una capa deabstraccion eficiente hacia el SO
I Maquinas virtuales basadas en registros
I Interpretan bytecode DEX (Dalvik EXecutable)
I Se apoyan en funcionalidades provistas por bibliotecas desoporte de codigo nativo
I Compilan el bytecode a nativo:I Dalvik compila Just In TimeI ART compila Ahead Of Time
Componentes nativos de userspace
I Incluyen servicios y bibliotecas de sistema
I Se comunican con servicios y drivers de bajo nivel
I Facilitan operaciones de bajo nivel
I Pueden tener ganancias de eficiencia
Ciclo de vida de un APK
Fuente: http://www.anandtech.com/show/8231/a-closer-look-at-android-runtime-art-in-android-l
Modelo de Seguridad de Android
Android utiliza dos modelos complementarios de permisos:
I Bajo nivel: Permisos de usuarios y grupos de Linux(conocido como Sandbox de Android).
I Regula la separacion entre aplicaciones.I A nivel Kernel de Linux.
I Alto nivel: permisos de aplicaciones, para efectuaracciones especıficas.
I Regula el acceso de las aplicaciones a los recursos dehardware
I A nivel Runtime/Dalvik.
Sandbox de Android
I Procesos de usuarios diferentes no pueden interactuardirectamente entre sı (enviar senales, leer/escribirmemoria)
I Un usuario no puede acceder a los archivos de otro
I Aplicaciones diferentes casi siempre pertenecen a usuariosdiferentes.
I Tambien se utilizan grupos suplementarios de Linux paraacceder a determinados recursos (como la tarjeta SD)
Permisos de AndroidManejados por Dalvik/Android Runtime
I Llamadas a las API de sistema
I IPC (enviar o recibir Intents)
I Operaciones de bases de datos (Content Providers)
I Varios niveles de proteccion:I Normal: riesgo mınimo de abusoI Dangerous: Acceso a datos personales o riesgo de abuso
sobre el dispositivoI Signature: Solo accesible a aplicaciones firmadas con el
mismo certificado que la que registra el permisoI SignatureOrSystem: Acceso como el anterior, mas las
aplicaciones que vienen pre instaladas
I Al instalar una aplicacion, se muestran los permisossolicitados
I Si no se aprueban, la aplicacion no se instala
El problema de las actualizaciones
I Google actualiza el Android base
I El fabricante lo adapta a los modelos correspondientes(no todos)
I El carrier le aplica sus modificaciones (si le parece)
I El carrier pone la actualizacion a disposicion del usuario
Resultado:
La mayorıa de los telefonos Android corre una versiondesactualizada del SO
Actualizaciones II
Google Play Services:
I Proceso a nivel de sistema
I Se actualiza solo
I Se puede otorgar permisos por su cuenta
I Da soporte a las APIs de Google
I GPS no es parte del SO: no es Open Source
I GPS se puede deshabilitar, pero dejan de funcionar lasapps de Google
Entonces:
I GPS agiliza las actualizaciones, siendo por afuera del SO
I La parte del SO que es Open Source es mas basica
I Las vulnerabilidades del kernel no se ven afectadas
Componentes de una aplicacion AndroidI Actividades
I Partes de la aplicacion que interactuan con el usuarioI Una por pantalla de la aplicacion
I ServiciosI Corren en segundo plano (no hay interfaz de usuario)I Suelen aceptar solicitudes de otras aplicaciones
I Receptores de notificacionesI Permiten a la aplicacion reaccionar ante eventos del
aparato
I Proveedores de contenidosI Dan acceso a bases de datos centralizadasI Se consultan desde otras aplicaciones
I Archivo Manifest.xmlI Enumera actividades, servicios, receptores, proveedores
de contenidos, y permisos requeridos por la aplicacion
Actividades
I Funcionan en base a callbacksI onCreate()I onStart()I onPause()I onResume()I onStop()I onRestart()I onDestroy()
I Contienen widgets: elementos de IUI Los widgets tienen sus propios callbacks
I Pueden ser habilitadas para usar desde otras apps (conIntents)
Servicios
I Son como los servicios de Unix:I Corren en segundo planoI Usualmente reciben pedidos de otras aplicaciones
I Se manejan tambien por callbacks:I onCreate()I onStartCommand()I onBind()I onDestroy()I onHandleIntent() (thread unico)
I Tıpicamente se lanzan, detienen e invocan a traves deIntents.
Receptores de notificaciones
I Sirven para reaccionar ante eventos del sistema:I Fin del proceso de bootI Salida del suenoI SMS enviadoI ...
I Callback: onReceive
I Pueden ser registrados en runtime (no solo en el Manifest)
I Muy usado por servicios de segundo plano... y malware
Proveedores de Contenidos
I Interfaz estructurada hacia repositorios de datoscompartidos (usualmente SQLite)
I Una aplicacion puede funcionar como ContentProvider,y puede exponer ese servicio a otras aplicaciones
I Se registran con un ContentResolver, que rutea lospedidos segun el tipo de contenidos
I Ejemplo: Contacts, o Calendar
Intents
I Parte fundamental del mecanismo de IPC
I Descripcion abstracta de la operacion a realizar
I Pueden llevar o no un destinatario especıfico
I Tres tipos:I startActivityI broadcastIntentI startService
I Informacion que lleva el Intent:I Accion (ACTION DIAL, ACTION VIEW, ...)I Datos (‘tel:123’, ‘content://contacts/people/’, ...)I Informacion adicional:
I categorıa de la accion a ejecutarI tipo de los datos del IntentI componente especıfico a utilizar para la accionI extras: Informacion adicional
AndroidManifest: Actividades
<activity android:name=".ExampleActivity"
android:process=":new process"
android:exported="true"
android:permission="android.permission.SEND SMS"
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
AndroidManifest: Servicios
<service
android:enabled =["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:isolated process=["true" | "false"]
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string"
...
</service>
AndroidManifest: Receptores de notificaciones
<receiver android:enabled =["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string"
...
</receiver>
AndroidManifest: Proveedores de contenidos
<provider android:authorities ="list"
android:enabled =["true" | "false"]
android:exported=["true" | "false"]
android:grantUriPermissions=["true" | "false"]
android:icon="drawable resource"
android:initOrder="integer"
android:multiprocess=["true" | "false"]
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string"
android:readPermission="string"
android:syncable=["true" | "false"]
android:writePermission="string"
...
</service>
Generando un paquete Android (cont)
Fuente: http://developer.android.com/sdk/installing/studio-build.html
Generacion de un paquete Android
I La herramienta aapt compila los recursos de la aplicacion(como parametros de la UI, layouts, y otros archivos XMLdel proyecto) a forma binaria. Tambien genera un archivoR.java que los referencia.
I La herramienta aidl compila los archivos .aidl eninterfaces Java.
I El codigo Java generado, mas el de la aplicacion, soncompilados a archivos .class.
Generacion de un paquete Android(cont)
I La herramienta dex convierte los archivos .class enbytecode Dalvik, junto con otras bibliotecas que se hayanincluido como archivos .class.
I Todos los archivos que no se compilan, mas loscompilados, mas los archivos .dex, son empaquetadoscon la herramienta apkbuilder.
I El archivo apk generado debe ser firmado, o bien con unaclave de prueba o con una de produccion.
I Si la aplicacion se firma en modo produccion, tambiendebe alinearse con la herramienta zipalign.
Eclipse con ADT
I Eclipse IDE + Android Developer Tools
I Builds utilizan Ant
I Android SDK
I Editor de layouts
I Emulador de Android
I URL:http://developer.android.com/sdk/index.html
Android Studio
I Basado en IntelliJ IDEA
I Builds utilizan Gradle
I Android SDK
I Editor de layouts
I Emulador de Android
I En beta, pero el Eclipse con ADT se esta abandonando
I URL:http://developer.android.com/sdk/installing/studio.html
Diferencias entre Android Studio y Eclipse+ADT
Caracterıstica AndroidStudio Eclipse+ADTBuild system Gradle AntDependencias basadas en Maven Sı NoGeneracion de variantes Sı NoRefactoreo y completamiento avanzado Sı NoEditor grafico de layout Sı SıFirma de APK y manejo de keystores Sı SıSoporte para NDK Pronto Sı
Android Debug Bridge - adb
I Permite conectarse a un telefono via USB o a unemulador
I Permite:I Copiar archivosI Redireccionar portsI Instalar programasI Abrir un shell:
I am - Activity Manager, interactua con aplicacionesI pm - Package Manager, administra aplicacionesI sqlite3 - Maneja bases de datos de aplicacionesI logcat - Acceso a los logsI Otros comandos, en /system/bin
Comandos de Activity Manager
I start [options] <INTENT>
I startservice [options] <INTENT>
I broadcast [options] <INTENT>
I instrument [options] <COMPONENT>
I profile start <PROCESS> <FILE>
I profile stop <PROCESS>
I dumpheap [options] <PROCESS> <FILE>
I set-debug-app [options] <PACKAGE>
I clear-debug-app
I monitor [options]
I force-stop <PACKAGE>
I kill [options] <PACKAGE>
I kill-all
Comandos de Package Manager
I list packages [options] <FILTER>
I list permission-groups
I list permissions [options] <GROUP>
I list instrumentation
I list features
I list libraries
I list users
I path <PACKAGE>
I install [options] <PATH>
I uninstall [options] <PACKAGE>
I clear <PACKAGE>
I enable <PACKAGE OR COMPONENT>
I disable <PACKAGE OR COMPONENT>
Comandos de Package Manager (sigue)
I disable-user [options] <PACKAGE OR COMPONENT>
I grant <PACKAGE PERMISSION>
I revoke <PACKAGE PERMISSION>
I set-install-location <LOCATION>
I get-install-location
I set-permission-enforced <PERMISSION>
[true|false]
I trim-caches <DESIRED FREE SPACE>
I create-user <USER NAME>
I remove-user <USER ID>
I get-max-users
Top Related