Análisis de los permisos en Android

En alguna ocasión hemos hablado sobre los virus en Android y hemos intentado quitarle importancia al asunto ya que los virus no dejan de ser aplicaciones maliciosas creadas por desarrolladores con pocos escrúpulos.

Como en cualquier sistema operativo, Android no esta libre de malware pero siempre se llega a la misma conclusión, al final el sentido común es el mejor antivirus que puedes tener instalado en tu sistema.

Las aplicaciones en Android funcionan en los dispositivos porque somos nosotros los que voluntariamente les otorgamos los permisos necesarios para que puedan funcionar y no todo el mundo presta atención a esos permisos (realmente un porcentaje muy bajo que no me atrevo a especular).

Vamos a poner como ejemplo los permisos de la aplicación Whatsapp:

Click para ampliar

Click para ampliar

Click para ampliar

 

 

 

 

 

 

 

 

 

 

 

Como se aprecia en las imágenes esta aplicación pide muchos permisos y posiblemente sea una de las aplicaciones más usadas en el mundo en todos los dispositivos móviles ya que es es multi plataforma y no sólo funciona en Android, también está para Blackberry, Nokia (alta gama) y  Apple (Iphone y Ipod). Creo que no he pasado ninguna plataforma por alto.

El escoger esta aplicación es por el simple hecho de la cantidad de permisos que pide y en ningún caso para desprestigio (yo mismo uso esta aplicación). Analicemos los permisos uno por uno.

  • Comunicación de red: Nombre clave para desarrolladores android.permission.INTERNET. Este permiso permite el acceso a la red ya sea por wifi o por 3g, no hace distinción alguna.
  • Herramientas del sistema: Aquí se pueden agrupar muchos permisos a la vez y el nombre clave variará dependiendo del tipo de permiso. El market te indica las herramientas del sistema que usará la aplicación a las cuales debes prestar bastante atención.
  • Almacenamiento: Nombre clave android.permission.WRITE_EXTERNAL_STORAGE. En este caso el permiso Almacenamiento sólo va a acceder a la tarjeta microSD externa y, normalmente, el acceso a la tarjeta es para guardar la configuración de la aplicación.
  • Llamadas de teléfono:  Este permiso concreto usa el nombre clave de android.permission.READ_PHONE_STATE. La aplicación que use este permiso tendra acceso en modo lectura al estado del teléfono y a su identidad.
  • Tu información personal: Aquí la aplicación usa dos permisos al igual que en las herramientas del sistema. Uno es el de leer los contactos y otro el de escribir contactos existentes de la agenda personal.
  • Tus mensajes: La aplicación podrá recepcionar los mensajes sms como si del gestor de mensajes se tratara. Nombre clave del permiso android.permission.READ_SMS.
  • Servicios por los que tienes que pagar: Aquí se agrupan dos permisos, el envío de sms y la realización de llamadas.
  • Controles de hardware: Aquí concretamente la aplicación podrá grabar sonidos con el nombre clave android.permission.RECORD_AUDIO.
  • Tu ubicación: Tenemos dos permisos, el acceso por gps a tu ubicación y el acceso por redes 3g o wireless a tu ubicación.
  • Tus cuentas: Se usan 3 permisos en este caso, uso de tus credenciales para autenticación (login y clave), administración de tus cuentas y autenticador de cuentas. La aplicación que use estos permisos tendrá acceso a datos de tus cuentas y podría autentificarse como uno mismo.

Cada uno de los permisos tienen distinto grado de peligrosidad dependiendo del perfil de usuario que use el teléfono. Para muchos una localización gps puede ser irrelevante, quien tenga sms gratuitos e infinitos le puede dar igual que una app use el envío de sms sin embargo a cualquier otro el sms cuesta dinero (teniendo en cuenta que el email es gratis).

Resumiendo un poco, si una aplicación como por ejemplo una linterna te pide permisos de información personal o de tus cuentas deberías escribir en una pizarra 100 veces “no instalaré esta aplicación” y si para cuando termines aún te quedan ganas de instalar esa aplicación volver a escribir otras 100 veces en la pizarra y así sucesivamente hasta que se te vayan las ganas de instalar dicha aplicación.

A partir de aquí voy a exponer todos los permisos que hay en Android en su nombre clave para desarrolladores, los que no sean desarrolladores o no les interese simplemente podéis ir a los comentarios directamente :)

  • android.permission.ACCESS_CHECKIN_PROPERTIES: Permite la lectura/escritura de la tabla de propiedades de la base de datos del registro pudiendo cambiar los valores que son actualizables.
  • android.permission.ACCESS_COARSE_LOCATION: Permite la localización usando las redes inalámbricas a las que te encuentres como por ejemplo el wifi. Básicamente es una localización por ip.
  • android.permission.ACCESS_FINE_LOCATION: Permite la localización usando la antena gps del dispositivo.
  • android.permission.ACCESS_LOCATION_EXTRA_COMMANDS: Permite el acceso a la localización otorgada por los operadores de telefonía. Podría definirse como lo que se ve en las películas americanas cuando hacen triangulación con las antenas (en España necesitas unas 25 órdenes judiciales para poder usar ese permiso).
  • android.permission.ACCESS_MOCK_LOCATION: Es un permiso de debug, emula a un operador de telefonía y sirve para la localización.
  • android.permission.ACCESS_NETWORK_STATE Permite conocer el estado de la red.
  • android.permission.ACCESS_SURFACE_FLINGER: Permite el acceso a las características de bajo nivel del deflector. Una aplicación normal no podrá usar este permiso.
  • android.permission.ACCESS_WIFI_STATE: Permite leer información sobre las redes wifi.
  • android.permission.ACCOUNT_MANAGER: Solo el sistema y aplicaciones del sistema pueden obtener este permiso. Permite el acceso a los identificadores de cuenta.
  • android.permission.AUTHENTICATE_ACCOUNTS: Permite a una aplicación emular un identificador de cuenta para acceder al administrador de cuentas.
  • android.permission.BATTERY_STATS: Permite el acceso a las estadísticas de la batería.
  • android.permission.BIND_APPWIDGET: Permite la comunicación entre una aplicación y los datos que gestiona el servicio AppWidget. El AppWidget es el encargado de manejar los widgets de la pantalla y el permiso se usa para acceder a los datos que hayan sido generados por los distintos widgets.
  • android.permission.BIND_DEVICE_ADMIN: Este permiso es requerido por el receptor de la administración del dispositivo para asegurar que sólo el sistema puede interactuar con él. Es complicado de explicar para que sirve este permiso, y la traducción no ayuda demasiado, el que quiera profundizar puede contactarme con el formulario de contacto.
  • android.permission.BIND_INPUT_METHOD: Este permiso es requerido por un InputMethodService para asegurarse que sólo el sistema puede unirse a él.
  • android.permission.BIND_REMOTEVIEWS: Este permiso es requerido por un RemoteViewsService para asegurarse que sólo el sistema puede unirse a él.
  • android.permission.BIND_WALLPAPER: Este permiso es requerido por WallpaperService para asegurarse que sólo el sistema puede unirse a él.
  • android.permission.BLUETOOTH: Permite la conexión entre aplicaciones y dispositivos pareados por bluetooth.
  • android.permission.BLUETOOTH_ADMIN: Permite a una aplicación buscar y parear dispositivos bluetooh.
  • android.permission.BRICK: Si alguna aplicación os pide este permiso y la ejecutáis convertiréis vuestro Android en un pisapapeles (y no estoy bromeando).
  • android.permission.BROADCAST_PACKAGE_REMOVED: Permite a una aplicación difundir una notificación cuando una aplicación ha sido desinstalada.
  • android.permission.BROADCAST_SMS: Permite a una aplicación difundir una notificación de “mensaje sms recibido”.
  • android.permission.BROADCAST_STICKY: Permite la difusión de mensajes “sticky intents” (mejor no traducirlo).
  • android.permission.BROADCAST_WAP_PUSH: Permite a una aplicación difundir notificaciones de mensajes wap entrantes.
  • android.permission.CALL_PHONE: Permite a una aplicación realizar llamadas de teléfono sin necesidad de usar el dialer de Android.
  • android.permission.CALL_PRIVILEGED: Igual que la anterior que además permite usar las llamadas de emergencia.
  • android.permission.CAMERA: Permite usar la cámara de fotos/video.
  • android.permission.CHANGE_COMPONENT_ENABLED_STATE: Permite a una aplicación cambiar de estado si un componente (que no sea de la aplicación)está iniciado o no. Dicho de otro modo es como tener un interruptor de dos posiciones ON/OFF y permite cambiar entre esos dos estados.
  • android.permission.CHANGE_CONFIGURATION: Permite cambiar la configuración del sistema (como por ejemplo los “locale”).
  • android.permission.CHANGE_NETWORK_STATE: Permite el cambio de la conectividad de la red.
  • android.permission.CHANGE_WIFI_MULTICAST_STATE: Permite a las aplicaciones acceder al modo “wifi multicast”.
  • android.permission.CHANGE_WIFI_STATE: Permite el cambio de estado de la conexión wifi.
  • android.permission.CLEAR_APP_CACHE: Permite a una aplicación a borrar la caché creada por otras aplicaciones.
  • android.permission.CLEAR_APP_USER_DATA: Permite a una aplicación el borrado de los datos de usuario.
  • android.permission.CONTROL_LOCATION_UPDATES: Permite activar/desactivar la ubicación sobre las actualizaciones de el proveedor de telefonía. No se suele usar por aplicaciones normales.
  • android.permission.DELETE_CACHE_FILES: Permite el borrado de los ficheros en caché.
  • android.permission.DELETE_PACKAGES: Permite el borrado de aplicaciones.
  • android.permission.DEVICE_POWER: Permite el acceso de bajo nivel al administrador de energía del dispositivo.
  • android.permission.DIAGNOSTIC: Permite el acceso de lectura/escritura a las herramientas de diagnóstico.
  • android.permission.DISABLE_KEYGUARD: Permite a una aplicación el desbloqueo del “bloqueo de teclado” (valga la redundancia).
  • android.permission.DUMP: Permite a una aplicación recuperar la información volcada por los servicios del sistema.
  • android.permission.EXPAND_STATUS_BAR: Permite expandir o contraer la barra de estado.
  • android.permission.FACTORY_TEST: Sirve para iniciar una aplicación en modo text. Solo el usuario root puede usar este permiso en una rom compilada en modo de pruebas.
  • android.permission.FLASHLIGHT: Permite el acceso al flash.
  • android.permission.FORCE_BACK: Permite a una aplicación volver atrás sea cual sea la aplicación que haya en primer plano.
  • android.permission.GET_ACCOUNTS: Permite acceder al listado de cuentas registradas en el sistema.
  • android.permission.GET_PACKAGE_SIZE: Permite a una aplicación saber el tamaño de cualquier paquete.
  • android.permission.GET_TASKS: Permite saber las aplicaciones que hay en ejecución.
  • android.permission.GLOBAL_SEARCH: Este permiso es complicado de explicar y no se usa en aplicaciones normales.
  • android.permission.HARDWARE_TEST: Permite el acceso a los periféricos de hardware. Está diseñado para testear hardware.
  • android.permission.INJECT_EVENTS: Permite a una aplicación insertar eventos tales como una pulsación en pantalla, uso de trackball,…etc.
  • android.permission.INSTALL_LOCATION_PROVIDER: Permite a una aplicación instalar un proveedor de localización en el “location manager”.
  • android.permission.INSTALL_PACKAGES: Permite a una aplicación la instalación de otras aplicaciones.
  • android.permission.INTERNAL_SYSTEM_WINDOW: Permite a una aplicación abrir ventanas usadas por la interfaz de usuario del sistema. No es usado por aplicaciones normales.
  • android.permission.INTERNET: Permite a una aplicación abrir sockets.
  • android.permission.KILL_BACKGROUND_PROCESSES: Permite a una aplicación llamar al killBackgroundProccesses.
  • android.permission.MANAGE_ACCOUNTS: Permite a una aplicación administrar las cuentas almacenadas en el “AccountManager”.
  • android.permission.MANAGE_APP_TOKENS: Sólo es usado por el sistema, permite crear o destruir tokens.
  • android.permission.MASTER_CLEAR: No pone nada sobre este permiso en la documentación de Android, aunque por su traducción podría servir para un borrado general.
  • android.permission.MODIFY_AUDIO_SETTINGS: Permite la modificación de las características del sonido.
  • android.permission.MODIFY_PHONE_STATE: Permite la modificación del estado del teléfono (encendido, apagado,….). No permite realizar llamadas.
  • android.permission.MOUNT_UNMOUNT_FILESYSTEMS: Permite montar unidades de almacenamiento externo.
  • android.permission.MOUNT_FORMAT_FILESYSTEMS: Permite formatear sistemas de almacenamiento externos.
  • android.permission.NFC: Permite las operaciones de entrada/salida de los dispositivos NFC.
  • android.permission.PROCESS_OUTGOING_CALLS: Permiso obsoleto, no lo uses.
  • android.permission.READ_CALENDAR: Permite leer los datos almacenados en el calendario por el usuario.
  • android.permission.READ_CONTACTS: Permite a una aplicación acceder a la lectura de los datos de tus contactos.
  • android.permission.READ_FRAME_BUFFER: Permite a una aplicación tomar una camtura de pantalla y más generalmente el acceso a los datos del “frame buffer”.
  • com.android.browser.permission.READ_HISTORY_BOOKMARKS: Permite el acceso en modo lectura al historial y los favoritos del buscador.
  • android.permission.READ_INPUT_STATE: Permite a una aplicación recuperar el estado de teclas o interruptores. Sólo es usado por el sistema.
  • android.permission.READ_LOGS: Calificado como permiso peligroso. Permite el acceso a los logs creados por el sistema. En los logs puedes encontrar desde una chorrada a claves de usuario y esas cosas.
  • android.permission.READ_PHONE_STATE: Acceso de sólo lectura al estado del teléfono.
  • android.permission.READ_SMS: Permite a una aplicación leer los sms.
  • android.permission.READ_SYNC_SETTINGS: Permite a una aplicación leer los datos de sincronización.
  • android.permission.READ_SYNC_STATS: Permite a una aplicación leer estadísticas de la sincronización.
  • android.permission.RECEIVE_BOOT_COMPLETED: Permite a una aplicación recibir el “ACTION_BOOT_COMPLETED“.
  • android.permission.RECEIVE_MMS: Permite monitorizar los mms recibidos.
  • android.permission.RECEIVE_SMS: Permite monitorizar los sms recibidos.
  • android.permission.RECEIVE_WAP_PUSH: Permite a una aplicación monitorizar las notificaciones wap entrantes.
  • android.permission.RECORD_AUDIO: Permite grabar audio.
  • android.permission.REORDER_TASKS: Permite a una aplicación reorganizar las tareas.
  • android.permission.RESTART_PACKAGES: Permiso obsoleto, no lo uses.
  • android.permission.SEND_SMS: Permite a una aplicación enviar sms.
  • android.permission.SET_ACTIVITY_WATCHER: Sólo se usa en modo de depuración.
  • com.android.alarm.permission.SET_ALARM: Permite a una aplicación crear una alarma en el sistema.
  • android.permission.SET_ALWAYS_FINISH: Permite a una aplicación controlar si las activities en segundo plano son finalizadas.
  • android.permission.SET_DEBUG_APP: Configura una aplicación para ser depurada.
  • android.permission.SET_ORIENTATION: Permite a una aplicación acceder a los parámetros de la rotación de pantalla. No se suele usar en aplicaciones normales.
  • android.permission.SET_POINTER_SPEED: Acceso de bajo nivel al puntero (normalmente el puntero no se ve). No se usa en aplicaciones normales.
  • android.permission.SET_PREFERRED_APPLICATIONS: Permiso obsoleto, no lo uses.
  • android.permission.SET_PROCESS_LIMIT: Permite a una aplicación limitar el número de aplicaciones que se pueden ejecutar en un sistema Android.
  • android.permission.SET_TIME: Permite cambiar la hora del sistema.
  • android.permission.SET_TIME_ZONE: Permite cambiar la zona horaria.
  • android.permission.SET_WALLPAPER: Permite a una aplicación poner un salvapantallas.
  • android.permission.SET_WALLPAPER_HINTS: Permite a una aplicación poner texto en el salvapantallas.
  • android.permission.SIGNAL_PERSISTENT_PROCESSES: Permite a una aplicación enviar una señal a los procesos persistentes.
  • android.permission.STATUS_BAR: Permite a una aplicación abrir, cerrar o deshabilitar la barra de estado y sus iconos.
  • android.permission.SUBSCRIBED_FEEDS_READ: Permite a una aplicación acceder al feed del proveedor de contenido.
  • android.permission.SUBSCRIBED_FEEDS_WRITE: No hay información disponible sobre este permiso.
  • android.permission.SYSTEM_ALERT_WINDOW: Permite a una aplicación abrir ventanas usando TYPE_SYSTEM_ALERT.
  • android.permission.UPDATE_DEVICE_STATS: Permite actualizar las estadísticas del dispositivo. No es usado por aplicaciones normales.
  • android.permission.USE_CREDENTIALS: Permite a una aplicación solicitar tokens de autenticación del “account manager”.
  • android.permission.USE_SIP: Permite a una aplicación usar el servicio SIP.
  • android.permission.VIBRATE: Permite el acceso al vibrador del dispositivo.
  • android.permission.WRITE_APN_SETTINGS: Permite a una aplicación modificar los ajustes APN.
  • android.permission.WAKE_LOCK: Permite el acceso a los bloqueos de energía para mantener el procesador durmiendo o mantener la pantalla apagada.
  • android.permission.WRITE_CALENDAR: Permite escribir datos en el calendario. No permite leer los datos.
  • android.permission.WRITE_CONTACTS: Permite escribir contactos en la agenda. No permite leer los datos.
  • android.permission.WRITE_EXTERNAL_STORAGE: Permite a una aplicación escribir en el almacenamiento externo.
  • android.permission.WRITE_GSERVICES: Permite a una aplicación modificar el servicio de mapa de Google.
  • com.android.browser.permission.WRITE_HISTORY_BOOKMARKS: Permite a una aplicación añadir favoritos y modificar el historial del navegador. No permite la lectura.
  • android.permission.WRITE_SECURE_SETTINGS: Permite a una aplicación leer o escribir los ajustes de seguridad.
  • android.permission.WRITE_SETTINGS: Permite a una aplicación leer o escribir los ajustes del sistema.
  • android.permission.WRITE_SMS: Permite a una aplicación escribir sms.
  • android.permission.WRITE_SYNC_SETTINGS: Permite a una aplicación escribir los ajustes de sincronización.

Muchos de estos permisos no los he utilizado nunca o igual son complicados para explicarlos en un par de líneas. Incluso hay permisos que me resultan complicados de explicar debido a que son muy específicos y sólo se pueden comprender en un ejemplo de programación.

Hay otros en los que he puesto palabras inglesas y no los he traducido totalmente porque del mismo modo es complicado tener que explicar que es un “content provider” por ejemplo.

Espero que os sirva esta guía, y si quieres profundizar en el tema sigue el enlace oficial

One thought on “Análisis de los permisos en Android

  1. Pingback: Bitacoras.com