Seguridad y Protección de Datos en Android

44
Seguridad y Protecci´ on de Datos en Android Juan Heguiabehere Joaqu´ ın Rinaudo 22 o Escuela de Verano de Ciencias Inform´ aticas RIO 2015

Transcript of Seguridad y Protección de Datos en Android

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

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)

Componentes de Android

Fuente: A. Gorla, Static and Dynamic Analysis Techniques for Mobile Security

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 deAndroid

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

Aplicaciones Android

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

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.

Herramientas de desarrollo

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 Studio: Eligiendo version de API

Android Studio: Tipos de pantalla

Android Studio: El desarrollo

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