06 julio 2011

Android y el uso de la SD Card

No llevo mucho tiempo manejando Android pero la verdad es que la facilidad con la que una aplicación puede hacer más de lo que dice me está sorprendiendo... No es nada raro descargarse aplicaciones que no provienen de fuentes "de confianza", y viendo el nulo control que hay en el Market por parte de Google (ver 'La cruda realidad del Market de Android'), puedes llevarte una sorpresa.

Dejando de lado las posibles técnicas para saltarse los permisos que el usuario otorga (más bien acepta) a la aplicación, me gustaría hacer hincapié en algo mucho más simple, lo que todos pueden ver pero que no debería ser público, el típico 'read4all'.

Cuando instalamos una aplicación se nos muestran unos permisos que tenemos que aceptar. En el blog El Android Libre tenéis un artículo en el que se explica cada uno de ellos. Estos permisos delimitan bastante las capacidades de las aplicaciones pero, ¿son suficientes?.

Voy a poner un par de ejemplos en los que los permisos igual no son lo suficientemente restrictivos:

1. Tu información personal – Leer datos de contacto
Cuando estaba realizando la aplicación QuoteIt me sorprendió que el permiso fuera tan genérico, pudiendo acceder a todos los datos de cualquier contacto. Si la aplicación solo necesita el email de los contactos, ¿por qué debería tener acceso también a su dirección, teléfono, etc? Creo que se debería mantener el permiso global pero crear subpermisos para que podamos controlar algo más a qué datos accede la aplicación.

2. Almacenamiento – modificar/borrar archivos en SD
Al igual que hay un permiso para poder escribir en 'sdcard', ¿por qué no lo hay para la lectura?. Como veremos más tarde, hay demasiada información delicada almacenada en 'sdcard' como para que no haya un control de qué aplicaciones pueden acceder a ella.

3. Comunicación de red – acceso íntegro a Internet
Al igual que en el primer ejemplo, programando QuoteIt Slim me sorprendió que la ejecución de comandos no necesitara declaración de permisos de seguridad. Es cierto que los comandos disponibles permiten hacer muy pocas cosas pero sigue siendo un problema. En la RootedCON 2011, Francisco Jesús Gómez y Carlos Juan Diaz ('Cloud Malware Distribution: DNS will be your friend') comentaron como era posible almacenar y distribuir malware a través de la infraestructura de servidores DNS Caché públicos de Internet. Relacionado con este tema, puesto que una aplicación no necesita ningún permiso para realizar un ping por consola, podría aprovecharse de este método para controlar la aplicación u obtener información del dispositivo de forma transparente.

Vistos estos tres ejemplos, ahora toca profundizar un poco más con el tema del 'read4all' y la 'sdcard'.

El problema, a parte de lo ya comentado anteriormente, creo que se encuentra en el uso que hacen las aplicaciones de la SD. Entiendo que en él se almacene información que pueda resultarle util al usuario cuando conecta el teléfono al ordenador en modo USB, pero ¿es recomendable sabiendo que cualquiera puede acceder a esos datos?. ¡Las fotos sí pero mis conversaciones de WhatsApp no!

Alguna de la información que se almacena en la SD (p.e de las aplicaciones que tengo instaladas en mi teléfono):

1. La cache de la aplicación de Tuenti.
2. Fotos y videos de la cámara (y capturas de pantalla).
3. Descargas realizadas.
4. Titanium Backup.
5. Backup Dolphin HD
6. Databases (automáticas) de WhatsApp
7. Caché de Dropbox.

Como ya he dicho, hay algunas que entiendo que estén ahí almacenadas pero, ¿la caché de Tuenti?, ¿backups sin proteger?, ¿la caché de Dropbox?, etc. Con respecto a los backups, Titanium debería de protegerlos pues es un peligro que cualquier aplicación pueda acceder a esos archivos, el de Dolphin HD no se genera salvo que el usuario lo haga manualmente por lo que si se hace, hay que retirarlo lo antes posible (puedes tener credenciales almacenadas, etc) aunque todos los backups deberían protegerse. Con respecto a WhatsApp, ahora las bases de datos ya están cifradas (aunque desconozco lo seguro que pueda ser) aunque por ese mismo motivo, como el usuario no puede acceder a su contenido, no veo comprensible que estén ahí. Finalmente, lo que más me sorprendió es la carpeta Dropbox que contiene todos los archivos que hayas visualizado... (desde la aplicación puedes borrar la caché)

Como véis, si las aplicaciones utilizan la SD para almacenar información sensible sin proteger, cualquier aplicación podrá acceder a ella sin problemas. Sobretodo hay que tener cuidado con el tema de backups, como el caso de Titanium.

-------------------------

Artículo cortesía de Luis Delgado

5 comments :

Madrikeka dijo...

La verdad que es una vergüenza la administración por parte de android de los permisos, pero también es culpa de las aplicaciones que se están subiendo al carro de.....pues yo pongo estos permisos y a ver si cuela!

Por ejemplo, lo último que me he encontrado han sido los permisos de la última actualización de "angry birds" y de un foro....

que para instalarlas, piden "Tu ubicación", "Precisar la ubicación (GPS)" y "Leer la identidad y el estado del teléfono".

Ya lo estuve hablando con los del foro, a ver, para que demonios quiere un juego o un lector del foro saber donde me encuentro o saber a que número estoy llamando, o mi número de teléfono.

La verdad que android en este aspecto me está decepcionando bastante.

Waskas dijo...

Supongo que es mas seguro un iphone... mientras no necesites leer pdfs...

Marcos Orallo dijo...

Lo de almacenar las cachés en la SD a mí me parece correcto, para que no ocupen espacio en el almacenamiento interno del teléfono que en muchos casos escasea.

Por supuesto, toda información sensible debe ir cifrada.

CagandoBits dijo...

Estoy realizando un máster con los señores del inteco sobre seguridad, mi proyecto se basa en dispositivos móviles, la verdad que me a sorprendido mucho la indiferencia con la que tratan datos sensibles tanto la gente de android como los desarrolladores de aplicaciones, ahora me da mas miedo perder el teléfono por lo que puedan sacar de él que por el valor del terminal... :$

Ahriman89 dijo...

Me encanta este blog, gracias por la info.