proteccion android

7
1 UNIVERSIDAD TECNICA PARTICULAR DE LOJA La Universidad Católica de Loja Escuela de Ciencias de la Computación Titulación de Sistemas Informáticos y Computación PROTECCION EN ANDROID Integrantes: Freddy Vera Carlos Ojeda Francisco Vargas Jessica Guevara Docentes: Fernanda Maricela Soto Guerrero Fecha: 25/06/13 Periodo académico Abril 2013 - Agosto 2013

Upload: carlos-francisco-ojeda-urena

Post on 03-Jul-2015

94 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Proteccion android

1

UNIVERSIDAD TECNICA PARTICULAR DE LOJA

La Universidad Católica de Loja

Escuela de Ciencias de la Computación

Titulación de Sistemas Informáticos y Computación

PROTECCION EN ANDROID

Integrantes: Freddy Vera

Carlos Ojeda

Francisco Vargas

Jessica Guevara

Docentes: Fernanda Maricela Soto Guerrero

Fecha: 25/06/13

Periodo académico

Abril 2013 - Agosto 2013

Page 2: Proteccion android

2

INTRODUCCIÓN

La seguridad es un aspecto clave de todo sistema. Si nos descargáramos una aplicación

maliciosa de Internet o del Play Store, esta podría leer nuestra lista de contactos, averiguar

nuestra posición GPS, mandar toda esta información por Internet y terminar enviando 50

mensajes SMS.

En algunas plataformas, como Windows Mobile, estamos prácticamente desprotegidos ante

este tipo de aplicaciones. Por lo tanto, los usuarios han de ser muy cautos antes de instalar

una aplicación.

En otras plataformas, como en iOS del iPhone, toda aplicación ha de ser validada por Apple

antes de poder ser instala en un teléfono. Esto limita a los pequeños programadores y da un

poder excesivo a Apple. Se trata de un planteamiento totalmente contrario al software libre.

Android propone un esquema de seguridad que protege a los usuarios, sin la necesidad de

imponer un sistema centralizado y controlado por una única empresa. La seguridad en

Android se fundamenta en los siguientes tres pilares:

Como se comentó en el primer capítulo Android está basado en Linux, por lo tanto, vamos

a poder aprovechar la seguridad que incorpora este SO. De esta forma Android puede

impedir que las aplicaciones tengan acceso directo al hardware o interfieran con recursos

de otras aplicaciones.

Toda aplicación ha de ser firmada con un certificado digital que identifique a su autor. La

firma digital también nos garantiza que el fichero de la aplicación no ha sido modificado. Si

se desea modificar la aplicación está tendrá que ser firmada de nuevo, y esto solo podrá

hacerlo el propietario de la clave privada. No es preciso (ni frecuente) que el certificado

digital sea firmado por una autoridad de certificación.

Si queremos que una aplicación tenga acceso a partes del sistema que pueden comprometer

la seguridad del sistema hemos de utilizar un modelo de permisos, de forma que el usuario

conozca los riesgos antes de instalar la aplicación.

En los siguientes apartados se describe con más detalle el primer y tercer punto. El proceso

de firmar una aplicación será descrito en el último capítulo.

Page 3: Proteccion android

3

La protección en Android

Para proteger el acceso a recursos utilizados por otras aplicaciones, Android crea una

cuenta de usuario Linux (user ID) nueva por cada paquete (.apk) instalado en el sistema.

Este usuario es creado cuando se instala la aplicación y permanece constante durante toda

su vida en el dispositivo.

Cualquier dato almacenado por la aplicación será asignado a su usuario Linux, por lo que

normalmente no tendrán acceso otras aplicaciones. No obstante, cuando crees un fichero

puedes usar los

modos MODE_WORLD_READABLE y/o MODE_WORLD_WRITEABLE para permitir

que otras aplicaciones puedan leer o escribir en el fichero. Aunque otras aplicaciones

puedan escribir el fichero, el propietario siempre será el usuario asignado a la aplicación

que lo creó.

Dado que las restricciones de seguridad se garantizan a nivel de proceso, el código de dos

paquetes no puede, normalmente, ejecutarse en el mismo proceso. Para ello sería necesario

usar el mismo usuario. Puedes utilizar el

atributo sharedUserId en AndroidManifest.xml para asignar un mismo usuario Linux a dos

aplicaciones. Con esto conseguimos que a efectos de seguridad ambas aplicaciones sean

tratadas como una sola. Por razones de seguridad, ambas aplicaciones han de estar firmadas

con el mismo certificado digital.

El esquema de permisos en Android

Para proteger ciertos recursos y características especiales del hardware, Android define un esquema de

permisos. Toda aplicación que acceda a estos recursos está obligada a declarar su intención de usarlos.

En caso de que una aplicación intente acceder a un recurso del que no ha solicitado permiso, se generará

una excepción de permiso y la aplicación será interrumpida inmediatamente.

Cuando el usuario instala una aplicación este podrá examinar la lista de permisos que solicita la aplicación y

decidir si considera oportuno instalar dicha aplicación. Veamos la descripción de algunos permisos. Abajo se

describe el esquema utilizado:

NOMBRE_DEL_PERMISO Grupo al que pertenece – descripción del permiso que se mostrará al usuario antes

de instalar la aplicación (grado de relevancia de seguridad a juicio del autor) Descripción y comentarios.

A continuación se muestra una lista con algunos de los permisos más utilizados en Android:

CALL_PHONE Servicios por los que tienes que pagar – llamar directamente a números de teléfono (muy alta)

Permite realizar llamadas sin la intervención del usuario.

SEND_SMS Servicios por los que tienes que pagar – envío SMS/MMS (muy alta) Permite a la aplicación

mandar SMS.

Page 4: Proteccion android

4

WRITE_EXTERNAL_STORAGEAlmacenamiento – modificar/borrar archivos en SD (alta) Permites la lectura de

archivos y su modificación, típico en aplicaciones de backup.

READ_OWNER_DATA Tu información personal – leer datos de contacto (alta) Permiten leer información sobre

el propietario del teléfono (nombre, correo electrónico, número de teléfono). Muy peligroso, algunas

aplicaciones podrían utilizar esta información de forma no lícita.

READ_CALENDAR Tu información personal – leer datos de calendario (moderada) Solo da este permiso si

consideras que la aplicación realmente lo necesita.

WRITE_CALENDAR Tu información personal – escribir datos de calendario (moderada) Este permiso no

permite leer el calendario. Por las mismas razones que el anterior permiso, hay que plantearse si una

aplicación nos pide este permiso con sentido o no.

READ_PHONE_STATELlamadas de teléfono - leer estado del teléfono e identidad (alta) Muchas aplicaciones

piden este permiso para ponerse en pausa mientras hablas por teléfono. Sin embargo, también permite el

acceso al IMEI, IMSI y al identificador único de 64 bits que Google asigna a cada terminal. En las primeras

versiones de SDK este permiso no era necesario.

ACCESS_FINE_LOCATIONTu ubicación – precisar la ubicación (GPS) (moderada) Localización basada en GPS.

ACCESS_COARSE_LOCATIONTu ubicación – ubicación común (basada en red) (moderada) Localización basada

en telefonía móvil (Cel-ID) y Wi-Fi.

BLUETOOTH Comunicación de red crear conexión Bluetooth (baja) Conexión con otro dispositivo Bluetooth.

INTERNET Comunicación de red – acceso íntegro a Internet (muy alta) Permite establecer conexiones a través

de Internet. Este es posiblemente el permiso más importante, en el que más hay que fijarse a quién se le

otorga. Muchas aplicaciones lo piden, pero no todas lo necesitan. Cualquier malware necesita una conexión

para poder enviar datos de nuestro dispositivo.

ACCESS_WIFI_STATE Comunicación de red – ver estado de conexión, ver estado de Wi-Fi(baja) Información

sobre redes WiFi disponibles.

WAKE_LOCKHerramientas del sistema – Impedir que el teléfono entre en modo de suspensión (baja) Algunas

aplicaciones pueden necesitar de este permiso, y realmente a lo único que puede afectar es a nuestra batería.

CHANGE_CONFIGURATIONHerramientas del sistema – Modificar la configuración global del

sistema (moderada) Permite cambiar la configuración (como locale). Pese a que es importante en sí, es muy

común, así por ejemplo los widgets lo necesitan.

READ_SYNC_SETTINGSHerramientas del sistema – leer ajustes de sincronización (baja) tan solo permite saber

si tienes sincronización en segundo plano con alguna aplicación (como con un cliente de Twitter o Gmail).

WRITE_APN_SETTINGSHerramientas del sistema – Escribir configuración del Punto de

Acceso (moderada) Permite la configuración del punto de acceso a la red. Por ejemplo, encender y a apagar tu

conexión de red o Wi-Fi.

MANAGE_APP_TOKENSHerramientas del sistema – recuperar aplicaciones en ejecución(moderada) Permite

saber qué aplicaciones están corriendo en segundo plano y cambiar el orden.

Page 5: Proteccion android

5

SET_PREFERRED_APPLICATIONS Herramientas del sistema – establecer aplicaciones preferidas(moderada)

Permite la asignación a una aplicación para que haga determinada tarea. Por ejemplo, la reproducción de

vídeos.

VIBRATEControles de hardware – control de la vibración (baja) Permite hacer vibrar al teléfono. Los juegos

lo suelen utilizar bastante.

CAMERAControles de hardware – realizar fotografías (baja) Permite acceso al control de la cámara y a la

toma de imágenes.

RECORD_AUDIO Controles de hardware – grabar audio (moderada) Permite grabar sonido desde el micrófono

del teléfono.

Para solicitar un determinado permiso en tu aplicación, no tienes más que incluir una etiqueta<uses-

permission> en el fichero AndroidManifest.xml de tu aplicación. En el siguiente ejemplo se solicitan dos

permisos:

<manifest package="org.example.mi_aplicacion" >

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

<uses-permission android:name="android.permission.SEND_SMS"/>

</manifest>

Permisos definidos por el usuario en Android

Además de los permisos definidos por el sistema, los desarrolladores vamos a poder crear nuevos permisos

para restringir el acceso a elementos de nuestro software.

Abordaremos el estudio de la creación de nuevos permisos utilizando el siguiente ejemplo. Somos la

empresa PayPerView especializada en ofrecer servicios de reproducción de vídeos bajo demanda. Queremos

crear un software que permita a cualquier desarrollador reproducir nuestros vídeos desde sus aplicaciones. No

obstante, este servicio no es gratuito, por lo que nos interesa que el usuario sea advertido cuando se instale la

aplicación del tercero, indicándole que esta aplicación va hacer uso de un servicio no gratuito.

Para definir el nuevo permiso utilizaremos el tag <permission> en el ficheroAndroidManifest.xml de

nuestro software. A continuación se muestra un ejemplo:

<permission

android:name="com.payperview.servicios.VER_VIDEOS"

android:description="@string/descripcion"

android:label="@string/etiqueta"

android:permissionGroup="android.permission-group.COST_MONEY"

android:protectionLevel="dangerous" />

El atributo android:name indica el nombre del permiso. Como ves ha de estar dentro del mismo dominio que

nuestra aplicación. El atributo android:permissionGroup es opcional y permite incluir nuestro permiso en un

grupo. En el ejemplo se ha incluido en el grupo de permisos que pueden suponer un coste económico al

usuario. El atributo android:protectionLevelinforma al sistema cómo el usuario ha de ser informado y qué

aplicaciones tienen acceso al permiso. Los valores posibles se indican a continuación:

Page 6: Proteccion android

6

normal El usuario no es advertido de que se va utilizar el

permiso. dangerous El usuario es advertido. signature Solo aplicaciones firmadas con la misma firma digital

que la aplicación que declara el permiso signatureOrSystem Igual que signature pero además puede ser usado por

el sistema. Caso poco frecuente donde varios

fabricantes necesitan compartir características a través

de la imagen del sistema.

Los atributos android:label y android:description son opcionales y han de ser introducidos a través de un recurso

de cadena. En estas cadenas hay que describir el permiso de forma abreviada y extensa, respectivamente.

Veamos cómo podría ser en el ejemplo:

<string name="etiqueta"> reproducción de videos bajo demanda </string>

<string name="descripcion">Permite a la aplicación reproducir

videos de la empresa PayPerView sin tu intervención. Se trata

de un servicio no gratuito, por lo que puede afectar al saldo

de tu cuenta con esta empresa. Si no tienes una cuenta

abierta los videos no podrán ser reproducidos. </string>

Page 7: Proteccion android

7

BIBLIOGRAFÍA

Recursos web disponibles en las siguientes URLs:

Acerca de sistemas operativos móviles:

Vacas Aguilar, F. (2007). "Telefonía móvil: la cuarta ventana". Recurso

disponible en: http://www.ehu.es/ojs/index.php/Zer/article/view/3656

Agualimpia, C., & Hernández, R. Análisis forense en dispositivos móviles

con Symbian OS. Documento de maestría, Dept. Ingeniería electrónica,

Pontifica Universidad Javeriana, http://www. criptored. upm.

es/guiateoria/gt_m142e1. htm.

Acerca de android:

http://www.android.com/

http://en.wikipedia.org/wiki/Android_(operating_system)

http://androidos.in/

Acerca de la protección en android:

http://www.androidcurso.com/index.php/recursos-didacticos/tutoriales-

android/41-unidad-7-seguridad-y-posicionamiento