¿Para qué me pides permiso?

En artículos anteriores comentábamos la importancia que han cobrado los dispositivos móviles en nuestras vidas, hasta el punto de ser casi imprescindibles. Por aquel entonces, se habló de la importancia del desarrollo seguro y de posibles vulnerabilidades en las propias aplicaciones Android (APK).

En este artículo adoptaremos un enfoque algo distinto, en concreto, nos acercaremos al mundo del malware en dispositivos Android y el impacto que ciertas características de un APK tienen directamente sobre nuestra seguridad. Nos centraremos, en una primera aproximación, al estudio de los permisos de las App, declaradas (en el caso de Android, nuestro objeto de estudio), en el fichero AndroidManifest.xml.

Para ello utilizaremos como fuente de información Koodous, una plataforma colaborativa para la detección de malware en dispositivos Android, cuyo uso aconsejo enormemente por su gran utilidad.

¿Pensamos que un código dañino para dispositivos móviles, cuyo objetivo sea capturar información sensible del usuario, es algo complejo que requiere de una gran capacidad técnica por parte del atacante, como explotar vulnerabilidades para ‘rootear’ el dispositivo? Nada más lejos de la realidad. Aunque algo así incrementa el alcance del malware y por tanto su impacto, se puede interceptar información concreta del usuario sin tener privilegios en el dispositivo. Tan solo hace falta el permiso del usuario.

Por suerte, a partir de Android 6.0 “Marshmallow” se cambió la forma en que el sistema operativo administra los permisos, incorporando una mayor seguridad y privacidad, ya que solicita al usuario la aprobación de un permiso concreto en el momento que la aplicación necesita utilizarlo. Esto evita el típico efecto “he leído y acepto las condiciones…” en el que el usuario acepta sin leer, que ocurría en versiones anteriores cuando se listaban los permisos necesarios durante el proceso de instalación. Aun así, la seguridad final recae en el eslabón más débil, el usuario.

Pensemos una aplicación maliciosa, por ejemplo un juego, que declara en su AndroidManifest el uso de los permisos android.permission.RECEIVE_SMS y android.permission.RECORD_AUDIO. Si el juego, aparentemente legítimo, consigue “convencer” al usuario de que necesita esos permisos para funcionar o simplemente el usuario no presta atención y acepta la solicitud, podrá jugar con total normalidad pero en segundo plano pueden estar levantándose servicios que interceptan los SMS entrantes o graban las conversaciones telefónicas (ya que se le ha concedido permiso para ello). Eso no es tan divertido.

¿Qué permisos son potencialmente peligrosos? Hay que tener en cuenta que en muchas ocasiones, no es obvio que un permiso se utilice para un fin malintencionado. Para comprobarlo, analizamos 7719 aplicaciones identificadas como maliciosas, extrayendo los permisos utilizados, teniendo en cuenta las apariciones de dicho permiso y el ratio de aparición (sobre el total de aplicaciones analizadas). A continuación mostramos los 20 permisos más utilizados en APK maliciosos.

Hacemos lo mismo con aplicaciones legítimas (no maliciosas), analizando en este caso 9988 muestras. A continuación mostramos los 20 permisos más utilizados en APK legítimos.

A simple vista, vemos que hay permisos utilizados tanto en aplicaciones maliciosas como legítimas, por lo que, por sí solos y en teoría, no supondrían ninguna anomalía:

INTERNET
ACCESS_NETWORK_STATE
WRITE_EXTERNAL_STORAGE
READ_EXTERNAL_STORAGE
ACCESS_WIFI_STATE
WAKE_LOCK
READ_PHONE_STATE
VIBRATE

También existen permisos, dentro de esta pequeña muestra de 20, que aunque también son usados por aplicaciones legítimas, se solicitan de forma significativa por las aplicaciones maliciosas, como pueden ser:

ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
SYSTEM_ALERT_WINDOW
WRITE_SETTINGS
READ_SETTINGS
RECEIVE_BOOT_COMPLETED

Por último, de los datos podemos obtener aquellos permisos que podrían ser catalogados directamente como sospechosos:

SEND_SMS
RECEIVE_SMS
GET_TASKS
INSTALL_SHORTCUT

Si se tuvieran en cuenta otras categorías importantes en una App como intent-filters o receivers, quizás podríamos identificar un camino viable para la detección de malware en dispositivos Android utilizando únicamente información declarada en AndroidManifest, ¿no creen?

Referencias adicionales