Seguridad y Protección de Datos en Android. 22 o Escuela de Verano de Ciencias Informáticas RIO 2015



Documentos relacionados
TEMA 1. Introducción

Tema 2: Introducción a Android

Android 4 Principios del desarrollo de aplicaciones Java

Android 5 Principios del desarrollo de aplicaciones Java

Programación Android Completo

Capitulo 2 Android SDK

Unidad II. Interfaz Grafica (continuación ) Basado en clases de Ing. Carlos A. Aguilar

Desarrollo de Aplicaciones Web Por César Bustamante Gutiérrez. Módulo I: Conceptos Básicos Tema 1: Concepto iniciales.

Capitulo 4: Componentes Android

U2. Introducción al desarrollo de aplicaciones móviles Smartphone y Android Desarrollo de Aplicaciones III TIC-UTSV Enero 2015 I.S.C.

* Introducción al mundo móvil. Qué es Android. Instalación y primeros pasos con Android.

Capitulo 1: Plataforma Android

Instalación del entorno de desarrollo

Construcción y Empaquetado

Curso de Desarrollo en Android Básico

Desarrollo de apps para móviles Android. Conceptos básicos de las aplicaciones Android


Índice. Herramientas de desarrollo. Historia Qué es Android? Arquitectura del sistema. Componentes Android Modelos de Negocio

Desarrollo de apps para móviles Android. Introducción a Android

Android Programming. Código: S15 Duración: 25 horas OBJETIVOS

Curso de Android con Java

Diseño de aplicaciones móviles seguras en Android.

Android Professional

App Android: Desarrollo de aplicaciones en Android.

Curso Técnico de Android 4

Android Guía de desarrollo de aplicaciones para Smartphones y Tabletas

Desarrollando con android sin conexión

PROGRAMA DE MATERIA DATOS DE IDENTIFICACIÓN DESCRIPCIÓN GENERAL OBJETIVO (S) GENERAL (ES) OPTATIVA PROFESIONALIZANTE II

Propuesta ANDROID ATC

Entorno de desarrollo Instalación y configuración

Servicios - Ejercicios

PROGRAMA DE MATERIA MATERIA:

Ejecutar el instalador y seleccionar los paquetes necesarios. En nuestro caso son los siguientes: Android SDK Tools (ya vendrá instalado) Android SDK

CAPÍTULO 1. Visión general y entorno de desarrollo... 21

1 de Mayo 2015 al 1 de Mayo 2016 Capacitación Android nivel Básico y Experto MexicoFirst

Programación en Android LSUB, GSYC, URJC

Curso de Android con Java

Desarrollo de apps para móviles Android. Entorno de desarrollo


Tutorial 1. Instalación del entorno de desarrollo de Android. Curso de perfeccionamiento: Programación de Android TUTORIAL 1: INSTALACIÓN DEL SOFTWARE

Capacitación Android Básico

ANDROID BÁSICO - E-LEARNING - EN LÍNEA

Descripción y Análisis Formal del Modelo de Seguridad de Android

Ejercicios - Servicios

online Programación para dispositivos Android 4.x

SISTEMAS OPERATIVOS DE DISPOSITIVOS MÓVILES HÉCTOR DOMÍNGUEZ KRYSLER PINTO

Por medio de la presente nos complace presentar a ustedes nuestra propuesta de certificaciones de alta cobertura por volumen.

Cursos de orientación profesional

IVista: es la interfaz con la que el Presentador se comunica con la vista.

Taller Desarrollo Mobile. Tecnólogo Informática - 6to Semestre Montevideo

- Qué es una Máquina Virtual?

Hola Android. Introducción al desarrollo de aplicaciones para Android

Nombre del curso: Seminario Desarrollo de sistemas embebidos en Android

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

AVD, el emulador de Smartphone y Tablets Android que incluye el SDK de Google

SOBRE LA GUÍA. Atribución-NoComercial-CompartirIgual 3.0 Unported (CC BY-NC-SA 3.0)

MODELO DE IMPLEMENTACIÓN

La obra se proporciona bajo los términos de esta licencia pública de Sisoft de México

TOMO II. Línea de Investigación. Redes y Sistema Operativo. Nombre del egresado. Antonio Nicolás Rodríguez Andrade.

Conceptos Básicos de Software. Clase III

2 de 6

Unidad I. Introducción a la programación de Dispositivos Móviles

ANDROID INTERMEDIO - E-LEARNING - EN LÍNEA

Con este tutorial podrás aprender a cómo empezar a crear apps en Android, empezaremos con algo muy simple para que poco a poco vayas conociendo.

INTRODUCCIÓN A ANDROID

PROGRAMACIÓN DE APLICACIONES PARA ANDROID. 30 horas 45 días

Prototipado y ejecución de aplicaciones SD con GeneXus

Web Services en Java. Taller de Programación. Instituto de Computación Facultad de Ingeniería Universidad de la República

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO

Crear una Activity en Android. Paso por paso

Framework ATLAS. Entorno de Desarrollo

Cookbook Creando un Proyecto Android (ADT-Eclipse)

DESARROLLADOR ANDROID INTRODUCCIÓN ANDROID. Ing. Marco Antonio Toscano Freire tw: martosfre

App para realizar consultas al Sistema de Información Estadística de Castilla y León

UNIVERSIDAD DE OVIEDO

Programación Android. Alejandro Alcalde. elbauldelprogramador.com

Lista de acrónimos Cómo leer este libro? La clase Application Uso del patrón Singleton... 25

BeatIt! Especificación de Requerimientos de Software para BeatIt! Versión 1.2.2

Mi Primer Proyecto en Android Studio

Curso Tecnologías Móviles

1.1. Instalación del entorno de desarrollo

INTRODUCCIÓN A JAVA. Índice

Lista de siglas y acrónimos... xvii. Cómo leer este libro?... xix

Curso Online de Programación Android

Curso de Desarrollo en Android Básico

Contenido QUÉ ES SERVIDOR CLOUD?... 3 ACCESO AL SERVIDOR CLOUD... 3 ADMINISTRACIÓN DEL SISTEMA... 6

INSTALACIÓN DE UBUNTU SERVER 12.4 EN MÁQUINA VIRTUAL

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

Lista de acrónimos... xv. Cómo leer este libro?... xvii

Android Mobile & Web Development Training

Producto. Información técnica y funcional. Versión 2.8

Windows Server 2012: Infraestructura de Escritorio Virtual

Cursos El cerdito feliz. Programación de dispositivos Móviles con Android.

Curso de Desarrollo en Android Experto

PAG. 1. Administración Remota

Acceso al Disco Compartido y Dispositivos USB y DVD

Descripción. Este Software cumple los siguientes hitos:

Presentación del Curso Virtual

Entre los más conocidos editores con interfaz de desarrollo tenemos:

MANUAL DE USUARIO Guía de Entregas con Subversion de proyectos de movilidad

Transcripción:

Seguridad y Protección de Datos en Android Juan Heguiabehere Joaquín Rinaudo 22 o Escuela de Verano de Ciencias Informáticas RIO 2015

Sobre el curso Lunes: Android como plataforma de desarrollo - Malware Martes: Malware (cont) - Diseño seguro en aplicaciones Jueves: Búsqueda de vulnerabilidades - Análisis estático Viernes: Búsqueda de vulnerabilidades - Análisis dinámico

Sobre el curso Lunes: Android como plataforma de desarrollo Arquitectura de Android Kernel de Linux Bibliotecas nativas Java - Dalvik VM Android SDK - Clases nativas Modelo de seguridad de Android Aplicaciones Android Herramientas de desarrollo Malware Martes: Malware (cont) - Diseño seguro en aplicaciones Jueves: Búsqueda de vulnerabilidades - Análisis estático Viernes: Búsqueda de vulnerabilidades - Análisis dinámico

Contenidos Sobre el curso Arquitectura de Android Componentes de Android Kernel de Linux Zygote Runtime Componentes nativos de userspace Modelo de Seguridad de Android Sandbox Permisos Problema: Cómo llegan las actualizaciones Aplicaciones Android Componentes de una aplicación Android Actividades Servicios Receptores de notificaciones Generando un paquete de Android Herramientas

Arquitectura de Android

Arquitectura de Android Cinco componentes principales: Kernel de Linux Código nativo de userspace Ambiente Android (bibliotecas/servicios escritos en Java) Máquina virtual Dalvik / ART Aplicaciones Android (escritas en Java)

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

Kernel de Linux Provee acceso al hardware Sandboxes Modificaciones de Google Baseband del teléfono Binder para IPC Optimizaciones varias

Zygote Zygote es el proceso que levanta todas las aplicaciones Android Crea la primera VM Levanta clases y recursos básicos de Android Levanta un socket Unix y espera pedidos Al recibir un pedido, hace fork() La VM nueva ya tiene todos los recursos y clases básicos Copy-on-Write agrega eficiencia (pero perjudica el ASLR)

Dalvik/ART Diseñadas específicamente para proveer una capa de abstracción eficiente hacia el SO Máquinas virtuales basadas en registros Interpretan bytecode DEX (Dalvik EXecutable) Se apoyan en funcionalidades provistas por bibliotecas de soporte de código nativo Compilan el bytecode a nativo: Dalvik compila Just In Time ART compila Ahead Of Time

Componentes nativos de userspace Incluyen servicios y bibliotecas de sistema Se comunican con servicios y drivers de bajo nivel Facilitan operaciones de bajo nivel 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

Modelo de Seguridad de Android Android utiliza dos modelos complementarios de permisos: Bajo nivel: Permisos de usuarios y grupos de Linux (conocido como Sandbox de Android). Regula la separación entre aplicaciones. A nivel Kernel de Linux. Alto nivel: permisos de aplicaciones, para efectuar acciones específicas. Regula el acceso de las aplicaciones a los recursos de hardware A nivel Runtime/Dalvik.

Sandbox de Android Procesos de usuarios diferentes no pueden interactuar directamente entre sí (enviar señales, leer/escribir memoria) Un usuario no puede acceder a los archivos de otro Aplicaciones diferentes casi siempre pertenecen a usuarios diferentes. También se utilizan grupos suplementarios de Linux para acceder a determinados recursos (como la tarjeta SD)

Permisos de Android Manejados por Dalvik/Android Runtime Llamadas a las API de sistema IPC (enviar o recibir Intents) Operaciones de bases de datos (Content Providers) Varios niveles de protección: Normal: riesgo mínimo de abuso Dangerous: Acceso a datos personales o riesgo de abuso sobre el dispositivo Signature: Sólo accesible a aplicaciones firmadas con el mismo certificado que la que registra el permiso SignatureOrSystem: Acceso como el anterior, más las aplicaciones que vienen pre instaladas Al instalar una aplicación, se muestran los permisos solicitados Si no se aprueban, la aplicación no se instala

El problema de las actualizaciones Google actualiza el Android base El fabricante lo adapta a los modelos correspondientes (no todos) El carrier le aplica sus modificaciones (si le parece) El carrier pone la actualización a disposición del usuario Resultado: La mayoría de los teléfonos Android corre una versión desactualizada del SO

Actualizaciones II Google Play Services: Proceso a nivel de sistema Se actualiza solo Se puede otorgar permisos por su cuenta Da soporte a las APIs de Google GPS no es parte del SO: no es Open Source GPS se puede deshabilitar, pero dejan de funcionar las apps de Google Entonces: GPS agiliza las actualizaciones, siendo por afuera del SO La parte del SO que es Open Source es más básica Las vulnerabilidades del kernel no se ven afectadas

Aplicaciones Android

Componentes de una aplicación Android Actividades Partes de la aplicación que interactúan con el usuario Una por pantalla de la aplicación Servicios Corren en segundo plano (no hay interfaz de usuario) Suelen aceptar solicitudes de otras aplicaciones Receptores de notificaciones Permiten a la aplicación reaccionar ante eventos del aparato Proveedores de contenidos Dan acceso a bases de datos centralizadas Se consultan desde otras aplicaciones Archivo Manifest.xml Enumera actividades, servicios, receptores, proveedores de contenidos, y permisos requeridos por la aplicación

Actividades Funcionan en base a callbacks oncreate() onstart() onpause() onresume() onstop() onrestart() ondestroy() Contienen widgets: elementos de IU Los widgets tienen sus propios callbacks Pueden ser habilitadas para usar desde otras apps (con Intents)

Servicios Son como los servicios de Unix: Corren en segundo plano Usualmente reciben pedidos de otras aplicaciones Se manejan también por callbacks: oncreate() onstartcommand() onbind() ondestroy() onhandleintent() (thread único) Típicamente se lanzan, detienen e invocan a través de Intents.

Receptores de notificaciones Sirven para reaccionar ante eventos del sistema: Fin del proceso de boot Salida del sueño SMS enviado... Callback: onreceive Pueden ser registrados en runtime (no sólo en el Manifest) Muy usado por servicios de segundo plano... y malware

Proveedores de Contenidos Interfaz estructurada hacia repositorios de datos compartidos (usualmente SQLite) Una aplicación puede funcionar como ContentProvider, y puede exponer ese servicio a otras aplicaciones Se registran con un ContentResolver, que rutea los pedidos según el tipo de contenidos Ejemplo: Contacts, o Calendar

Intents Parte fundamental del mecanismo de IPC Descripción abstracta de la operación a realizar Pueden llevar o no un destinatario específico Tres tipos: startactivity broadcastintent startservice Información que lleva el Intent: Acción (ACTION DIAL, ACTION VIEW,...) Datos ( tel:123, content://contacts/people/,...) Información adicional: categoría de la acción a ejecutar tipo de los datos del Intent componente específico a utilizar para la acción extras: Información 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

Generación de un paquete Android La herramienta aapt compila los recursos de la aplicación (como parámetros de la UI, layouts, y otros archivos XML del proyecto) a forma binaria. También genera un archivo R.java que los referencia. La herramienta aidl compila los archivos.aidl en interfaces Java. El código Java generado, más el de la aplicación, son compilados a archivos.class.

Generación de un paquete Android(cont) La herramienta dex convierte los archivos.class en bytecode Dalvik, junto con otras bibliotecas que se hayan incluido como archivos.class. Todos los archivos que no se compilan, más los compilados, más los archivos.dex, son empaquetados con la herramienta apkbuilder. El archivo apk generado debe ser firmado, o bien con una clave de prueba o con una de producción. Si la aplicación se firma en modo producción, también debe alinearse con la herramienta zipalign.

Herramientas de desarrollo

Eclipse con ADT Eclipse IDE + Android Developer Tools Builds utilizan Ant Android SDK Editor de layouts Emulador de Android URL: http://developer.android.com/sdk/index.html

Android Studio Basado en IntelliJ IDEA Builds utilizan Gradle Android SDK Editor de layouts Emulador de Android En beta, pero el Eclipse con ADT se está abandonando URL: http://developer.android.com/sdk/installing/studio.html

Diferencias entre Android Studio y Eclipse+ADT Característica AndroidStudio Eclipse+ADT Build system Gradle Ant Dependencias basadas en Maven Sí No Generación de variantes Sí No Refactoreo y completamiento avanzado Sí No Editor gráfico de layout Sí Sí Firma de APK y manejo de keystores Sí Sí Soporte para NDK Pronto Sí

Android Studio: Eligiendo versión de API

Android Studio: Tipos de pantalla

Android Studio: El desarrollo

Android Debug Bridge - adb Permite conectarse a un teléfono via USB o a un emulador Permite: Copiar archivos Redireccionar ports Instalar programas Abrir un shell: am - Activity Manager, interactúa con aplicaciones pm - Package Manager, administra aplicaciones sqlite3 - Maneja bases de datos de aplicaciones logcat - Acceso a los logs Otros comandos, en /system/bin

Comandos de Activity Manager start [options] <INTENT> startservice [options] <INTENT> broadcast [options] <INTENT> instrument [options] <COMPONENT> profile start <PROCESS> <FILE> profile stop <PROCESS> dumpheap [options] <PROCESS> <FILE> set-debug-app [options] <PACKAGE> clear-debug-app monitor [options] force-stop <PACKAGE> kill [options] <PACKAGE> kill-all

Comandos de Package Manager list packages [options] <FILTER> list permission-groups list permissions [options] <GROUP> list instrumentation list features list libraries list users path <PACKAGE> install [options] <PATH> uninstall [options] <PACKAGE> clear <PACKAGE> enable <PACKAGE OR COMPONENT> disable <PACKAGE OR COMPONENT>

Comandos de Package Manager (sigue) disable-user [options] <PACKAGE OR COMPONENT> grant <PACKAGE PERMISSION> revoke <PACKAGE PERMISSION> set-install-location <LOCATION> get-install-location set-permission-enforced <PERMISSION> [true false] trim-caches <DESIRED FREE SPACE> create-user <USER NAME> remove-user <USER ID> get-max-users