Blog

Seguridad en Android – Parte II – Amenazas en Android y mecanismos de seguridad (I)

En el post anterior vimos una pequeña introducción a la arquitectura de Android así como a la de sus aplicaciones. En este post vamos a centrarnos en los mecanismos de seguridad ofrecidos por Android a nivel de plataforma y a nivel de aplicación.

Antes de empezar con los mecanismos de seguridad de Android, me gustaría definir las principales amenazas en los sistemas generales de seguridad de la información. Para ello voy a utilizar la clasificación usada por Stallings. Stallings agrupa los ataques de la siguiente forma:

  • Intercepción. El atacante intercepta los mensajes pero no los modifica ni los borra. Esto es un ataque pasivo. Afecta a la privacidad del usuario y al operador de red. El atacante puede usar los datos obtenidos para analizar el tráfico y eliminar la competencia proporcionada por el operador de red.
  • Repetición. En este caso, el atacante inserta mensajes en el sistema.
  • Modificación de recursos. El atacante modifica datos, mensajes o lógica de servicio.
  • Denegación de servicios. En este caso, el adversario intenta sobrecargar la red para negar el servicio a los usuarios.
  • Interrupción. El adversario causa interrupción destruyendo datos, mensajes o lógica de servicio.

Aunque es una forma muy genérica de definir y agrupar los distintos ataques, sirve para no olvidarnos de que el objetivo primordial que debemos alcanzar es evitar estos ataques.

Como ya vimos, Android es un sistema multi-proceso donde cada aplicación se ejecuta en su propio proceso. Casi siempre, la seguridad entre las aplicaciones y el sistema es realizada a nivel de proceso a través de las facilidades del estándar Linux (UID y GID). Además, el control de acceso es proporcionado a través de un mecanismo de permisos que restringe el acceso a recursos a las aplicaciones. Los mecanismos de seguridad de Android se pueden clasificar en tres grupos: mecanismos de Linux, características del entorno y mecanismos específicos de Android.

Mecanismos de Linux

  • POSIX (Portable Operating System Interface). Cada apk instalada en Android tiene su propio identificador de usuario de Linux (POSIX). Este ID es asignado cuando la aplicación se instala en el dispositivo. Como consecuencia de ello, el código de dos aplicaciones distintas no puede ejecutarse en el mismo proceso. Esto crea un sandbox que evita que una aplicación acceda a los recursos de otra.

    sandbox1

    Si una aplicación quiere compartir los mismos recursos que otra e incluso ejecutarse en el mismo proceso, deben compartir el ID. Esto se puede conseguir a través de “sharedUserID” declarado en el manifiesto de la aplicación. A su vez, puede ocurrir si dos aplicaciones son firmadas con las misma clave por error. Por ello, hay que destacar la importancia de que los desarrolladores firmen sus aplicaciones de forma segura.

sandbox2

  • Acceso a archivos. Los ficheros en Android están sujetos al mecanismos de permisos de Linux. Cada archivo está asociado con su propio usuario, con su GID y con tres tuplas de permisos Read,Write y Execute (rwx). La primera tupla corresponde al propietario; la segunda a los usuarios que pertenecen al grupo; y la tercera al resto de los usuarios.
    El permiso de accesos deriva del mecanismo de usuarios de Linux y refleja el nivel de acceso permitido a otros usuarios. De la misma forma, los sistemas de archivos están protegidos de otras aplicaciones. Los ficheros creados por una aplicación son asignados al ID de usuario de dicha aplicación y no son accesibles por otras aplicaciones.
    Un aspecto que refuerza estas medidas de seguridad es que la imagen del sistema esta montada en modo de lectura. Todos los ejecutables y archivos de configuración importantes están localizados o en RAM (que es solamente de lectura pero se reinicia en cada encendido del dispositivo) o en la imagen del sistema. Por lo tanto, un atacante que obtenga la habilidad de escribir en ficheros en cualquier parte del sistema de archivos, no obtiene los permisos necesarios de remplazar archivos críticos. No obstante, un atacante podría remontar la imagen del sistema siempre y cuando tenga acceso de superusuario (root).
    Otros dos aspectos importantes en el sistema de archivos de Android son la tarjeta SD y la partición de datos. La partición de datos es donde todos los datos de usuarios y aplicaciones son almacenados. Esto previene al sistema de daños en caso que el usuario (o un atacante) instale demasiadas aplicaciones o cree demasiados archivos. Cuando un dispositivo Android es ejecutado en modo seguro, los datos de la partición de datos no son cargados, haciendo posible recuperarse de este tipo de ataques. La tarjeta SD puede ser manipulada off-line y fuera del control del dispositivo ya que es almacenamiento externo.

Características del entorno

  • Unidad de Gestión de Memoria (MMU). Un prerrequisito para muchos de los sistemas operativos modernos y para Linux en particular, es la Unidad de Gestión de Memoria, un componente hardware que facilita la separación de los procesos de diferentes espacios de direcciones de memoria virtual. Varios sistemas operativos emplean la MMU de tal forma que un proceso es incapaz de leer las páginas de memoria de otro proceso o de corromper su memoria.
  • Seguridad de tipos. Es una propiedad de los lenguajes de programación modernos. Fuerza al contenido de una variable a corresponderse con un formato específico y así prevenir usos erróneos. Sin esta característica se puede llegar a corromper la memoria y a realizar ataques de overflow. Java es un lenguaje fuertemente tipado por lo que estos ataques son evitados. No obstante, Android permite componentes escritos en C, con el riesgo de reducir la seguridad.
    Binder, el IPC específico de Android, también tiene seguridad de tipos.
  • Características de seguridad móvil. Un set básico de atributos de la telefonía móvil viene de la necesidad de identificar al usuario, monitorizar su uso y tarifar al cliente de forma correcta. Un término más general es AAA (Authentication, Authorization y Accounting). Android obtiene estos clásicos de la seguridad a través del diseño del dispositivo móvil.

En el siguiente post veremos los mecanismos específicos de Android. Estos merecen especial atención ya que estudiaremos los permisos y los manifiestos de Android.

Autor:  Borja Simancas (@borjasr92)

Leave a Reply

*

    No Twitter Messages