viernes, 6 de junio de 2014

Metodología de Seguridad en Android

En esta nueva entrada vamos a ver cómo trabaja los sistemas Android en cuanto a la metodología que sigue de seguridad a la hora de ejecutar sus aplicaciones y los permisos que requieren. En primer lugar vamos a ver algunos conceptos previos sobre Android que debemos conocer:
  • Apk (aplicación en Android): conjunto de actividades y servicios relacionados entre si para resolver un objetivo común. Cada apk se ejecuta en un proceso, es decir, tenemos un proceso por aplk.
  • Actividad: se llama así a cada una de las pantallas de una aplicación en Android. Cada aplicación tiene una actividad principal y desde aquí se va llamando al resto de actividades de la aplicación.
  • Estados de una actividad: son los diferentes momentos en los cuales se encuentra una actividad.
  • Máquina Virtual Dalvik (DVM): es una máquina virtual que utilizan los dispositivos que usan Android, la idea es ejecutar cada proceso en una DVM diferente (ya que consume muy pocos recursos), consiguiendo con esto un aislamiento en cuanto a código fuente, gestión de memoria e hilos de ejecución, lo que hace que ningún proceso pueda acceder a código o variables de otro, salvo permiso expreso.
Una vez aclarados estos conceptos, quién no se ha preguntado alguna vez ¿por qué aplicaciones que hemos cerramos desde cualquier apk de administración de tareas como Advanced Task Killer, siguen abiertas en memoria tras cerrarlas?

La respuesta es muy sencilla, en Android un proceso sigue residiendo en memoria aunque el usuario cierre todas sus actividades y/o servicios. Una aplicación sólo se elimina de memoria si el sistema necesita memoria para otra cosa, por tanto, el sistema necesita ordenar jerárquicamente los procesos por orden de importancia, de manera que cuando necesite eliminar alguno, elimine el menos importante.

La importancia se establece en el sistema según las actividades activas y el estado de las mismas, sin embargo en cuanto a los servicios sólo pueden estar corriendo o detenidos. Vamos por tanto a ver el ciclo de vida de de un proceso en Android, donde podremos ver los estados y los eventos que se generan.

Ciclo de Vida de un proceso en Android



Eventos:
  • onCreate(): se inicializa la apk, se crea la interfaz y puede recibir datos.
  • onStart(): se presenta la apk al usuario, ya es utilizable.
  • onResume(): cuando el usuario comienza a interactuar con la apk.
  • onPause(): la actividad va a pasar a segundo plano.
  • onStop(): la actividad va a dejar de ser visible en la interfaz.
  • onRestart(): se llama de nuevo a la actividad, que está en memoria, tras haber estado parada. No se pierde la información con la que estaba trabajando ya que normalmente se suele almacenar en un fichero de preferencias, para cada apk se guarda dentro de la memoria interna en: data/data/nombre.del.paquete/files/shared_prefs/nombre.dpaquete_preferences,xml
  • onDestroy(): actividad destruida totalmente.
Estados:
  • Activa (Runing): en la pila de ejecución, visible y activa.
  • Visible (Paused): cuando se llama a otra actividad desde la actividad actual y se pierde el foco (no está visible o sólo parcialmente).
  • Parada (Stopped): la actividad ya no está visible, pero sigue estando en memoria.
  • Destruida (Destroyed): cuando el sistema necesita espacio saca de la pila de ejecución las actividades.
He desarrollado una pequeña aplicación en Android para que entendáis bien los estados y eventos por los que pasa una aplicación y como esto hace que se sitúe más arriba o más abajo del orden jerárquico a la hora de matar un proceso por falta de memoria. No requiere ningún tipo de permiso, por tanto podéis estar tranquilos de que no hace nada malo.


Descarga la aplicación EventosWWH.apk: http://goo.gl/Q0YaFb
MD5 checksums: f5ea4ebedaacaaf1563dc99413250012

Aquí os dejo un videotutorial para explicar la aplicación. Si alguno desea el código de aplicación, se lo facilito sin problema, tan solo contactar a través del blog o de mi cuenta personal de twitter @eduSatoe


Orden Jerárquico de Procesos a la hora de liberar memoria

En Android los usuarios no tenemos permisos para finalizar los procesos, es el sistema operativo quien decide cuando finalizar un proceso para liberar memoria, lo cual se puede hacer:
  1. Porque se necesite memoria para otro proceso.
  2. Porque se produzca un cambio de configuración como un giro de pantalla, cambio de idioma, conexión de un dispositivo de entrada, etc.
El orden jerárquico u orden de prioridad de los procesos es el siguiente:
  1. Procesos en primer plano (Foreground process): sólo puede haber uno, es la actividad que ha llamado a onResume().
  2. Proceso visible (Visible process): actividad visible aunque no en primer plano (onPaused())
  3. Proceso en servicio (Service process): proceso en servicio iniciado con startService().
  4. Proceso de fondo (Background process): actividad no visible, está en segundo plano, llamo a onStop(). El sistema debe grabar el estado.
  5. Proceso vacío (Empty process): sin componente activo, pero no se quita de memoria.
Los principios de Seguridad en Android

Android basa su seguridad en tres principios que comentamos a continuación:
  • Se crea un usuario para cada apk que se instala en el sistema, de tal forma que se pueda restringir el acceso sobre el hardware y otros recursos del sistema, dicho usuario sólo puede tener acceso a sus recursos, es decir, sólo dicho usuario puede acceder a su carpeta de la apk.
  • Toda apk debe estar firmada digitalmente por su autor, de tal forma que si alguien quiere cambiar su código deberá firmarla de nuevo.
  • Se establece un modelo de permisos, de tal forma que para cada acción comprometida que realice una apk debe estar registrada. Con esto conseguimos que a la hora de instalar una apk, el usuario conocerá los permisos que dicha apk solicita, como acceso a Internet, posición GPS, datos del teléfono, registro de llamadas, etc.
¿Cómo se rompen estos principios de seguridad?
  • Respecto a lo de crear un usuario por apk y restringir el acceso a hardware y otros recursos del sistema es una buena idea, pero este principio de seguridad se rompe en el momento en el que rooteemos el teléfono. El hecho de rootear el teléfono es un arma de doble filo, nos permite instalar aplicaciones que tendrán permiso de acceso a cualquier recurso del sistema, con la ventaja que esto supone, herramientas de seguridad como dsPloit o Intercepter-ng, pero el problema vendría cuando le diéramos vía libre a una aplicación para acceder por ejemplo a carpetas como /data/data/com.whatsapp/databases/ donde whatsapp almacena todas las conversaciones y contactos. 

  • En cuanto a la firma digital de las aplicaciones, es muy común que además de usar Google Play, descarguemos aplicaciones directamente desde Internet e instalemos en nuestro teléfono, todo por ahorrarnos algunos euros y no pagar el precio que vale en Google Play. Es entonces cuando se nos requiere en nuestro sistema que activemos la casilla "Fuentes Desconocidas", y ahí es donde estamos rompiendo otro principio de seguridad de Android, ya que cualquier usuario con conocimientos puede comprar una apk de Google Play, hacerle ingeniería inversa al paquete apk e inyectar un código malicioso, para después publicar la aplicación en Internet de manera gratuita. Dicho paquete no puede estar firmado por la persona que desarrollo la apk que aparece en Google Play, pero por tal de ahorrarnos unos euros aceptamos lo que sea. 

  • Y por último tenemos el modelo de permisos que utiliza Android, mediante el cual se nos muestra los permisos que requiere una aplicación y que nosotros debemos aceptar si queremos que instalar dicha aplicación, en cuanto a estos, los desarrolladores se aprovechan mucho del desconocimiento de la gente, ya que por tal de jugar al juego de moda de turno (Candy Crash) o instalar la última versión de la apk de la red social más famosa (Facebook) somos capaces de dar permiso para acceder a nuestros datos personales, contactos, correos,etc, que acabaran posteriormente en manos de terceros que les paguen buen dinero por ello. Este modelo de permisos está muy bien, pero teniendo en cuenta que el usuario final es el eslabón más débil de la cadena, hace que dicho principio de la seguridad no se le de la importancia que tiene por parte de los usuarios y sean los propios usuarios quien lo rompan.
¿Cómo protegernos?

Para protegernos de estas amenazas existen algunas herramientas que debemos tener instaladas en nuestro móvil Android, la principal es tener un antivirus como puede ser AVG, el cual además de detectar posibles amenazas tiene una base de datos de aplicaciones de Google Play que están tipificadas como peligrosas y que a la hora de instalarlas te avisa de que pueden ser dañinas para tu terminal.

La otra aplicación de reciente aparición es Conan Mobile de Inteco, una aplicación que examina todos los principios de la seguridad de Android: si tenemos aplicaciones con acceso root, aplicaciones que no están firmadas digitalmente y los permisos que requieren todas las aplicaciones del nuestro terminal, os aseguro que os podéis sorprender de lo que hemos llegado a aceptar por tal de instalar una aplicación en el teléfono.

Cual fue mi sorpresa, cuando tras instalar Conan Mobile y revisar todos los permisos de seguridad de las aplicaciones, encuentro una aplicación que todos tenemos en nuestro móvil, como es la de la linterna, la cual requiere permisos tales como saber tu posición GPS, tu número de IMEI o incluso saber quien me llama por teléfono. Acto seguido me voy a la información de la aplicación y me encuentro los siguientes permisos:

Es decir, que a cambio de poder usar la maldita linterna, podían meterse hasta en la "cocina" de mi teléfono, la aplicación en concreto es "Linterna Brillante Gratis" de la compañía Goldenshores Technologies LLC. Indagando por Internet encontré el siguiente artículo sobre como dicha aplicación roba información que después facilita a terceros, incumpliendo lo que dice su contrato de privacidad con el usuario, aquí os dejo el enlace goo.gl/rekD3M

A continuación os dejo algunos enlaces de interés relacionados con el tema que seguro son de vuestro agrado.

Desempaquetar aplicaciones en Android. Ingeniería Inversa sobre una APK. Analizando aplicaciones con Andrubis. Auditoría de aplicaciones en Android. Blog: White Walking of Hacking. Eduardo Sánchez @eduSatoe http://goo.gl/fm3MED

Unos estafadores utilizan la imagen de La Sexta, RTVE, Menéame o Antena3 para robar tus datos de tu Android. Blog: Un informático en el lado del mal. Chema Alonso@chemaalonso http://goo.gl/OY3GVu

Uso de Conan Mobile, la última aplicación de INTECO para comprobar la seguridad en tu móvil. 
Blog: Hacking Ético. Miguel Ángel Arroyo @Miguel_Arroyo76 http://goo.gl/Z3nHGN

Lista de permisos que podemos encontrar en el fichero AndroidManifest.xml de cualquier aplicación Android junto con su descripción. http://goo.gl/Dl2cjL

Espero que hayáis aprendido algo nuevo sobre la metodología que usa Android en cuanto a su seguridad.

Un saludo !!

@eduSatoe


"La seguridad de un sistema es igual a la seguridad de su punto más débil"


4 comentarios:

  1. Actualmente estoy usando una gran aplicación que recomiendo: XPrivacy. Puedes ver en detalle todos los permisos que están empleando las aplicaciones, el momento en el que lo hacen, proporcionarles información falsa e incluso bloquearlos por completo a placer.

    Se diría que es como una mezcla de la Araña y Meñique, no se le escapa nada :D

    ResponderEliminar
  2. Muchas gracias por tu aporte Jesús, actualmente yo estoy usando una distribución de Android que incorpora la misma metodología que XPrivacy, se llama Privacy Guard 2.0 y lo trae ya incorporado el núcleo del sistema en esta ROM de Cyamodgen. También existen otras aplicaciones en Google Play como App Ops. Un saludo desde WWH !!

    ResponderEliminar
  3. hola Eduardo gracias por este gran aporte cada día me entero de grandes cosas me gustaría aprender de ti como podemos hablar te envié un twit a tu cuenta de twtter personal y nunca me respondiste tal vez si podrías darme tu correo electrónico asi contactarme contigo porfavor un gran saludo

    ResponderEliminar
  4. Gracias. Indícame tu twitter y hablamos en privado! ;)

    ResponderEliminar