SELinux: El Modelo de Seguridad Andriod

El modelo de seguridad de Android se basa parcialmente en la utilización de “cajas de arena” para cada aplicación y se fundamenta principalmente en 3 pilares:

  1. Dado que Android es un sistema basado en el kernel de Linux, es posible impedir a las aplicaciones del sistema móvil que accedan directamente al hardware del dispositivo, o que interfieran con los recursos de otras aplicaciones.
  2. Toda aplicación del sistema debe ser firmada con un certificado que identifique a sus autores. Mediante esta firma también se puede verificar que dicha aplicación no ha sido modificada externamente
  3. Si una aplicación necesita acceder a recursos del sistema que puedan comprometer la seguridad del mismo, deberá solicitarlo mediante un modelo de permisos, de forma que el usuario los conozca y acepte antes de instalar la aplicación. Esto se ve ligeramente modificado en versiones actuales Android.

En versiones anteriores a Android 4.3, se utilizaba una seguridad a nivel de kernel con la ejecución de cada aplicación como si de un usuario se tratase. Así pues, a cada aplicación se le asignaba un identificador de usuario y grupo propio. Sin embargo, dos aplicaciones distintas podían compartir dichos identificadores en caso de haber sido firmados por la misma clave (al generar el fichero apk). Sin embargo, en versiones posteriores, se comenzó a utilizar adicionalmente SELinux para restringir los limites asociados a una aplicación y su caja de arena.

Cada aplicación define que permisos necesita para realizar sus servicios y actividades y se le comunican al usuario. En versiones anteriores de Android, dichos permisos debían ser aceptados antes de instalar la aplicación. Sin embargo, las últimas versiones realizan la petición de permisos una vez instalada, la primera vez que dicho recurso sea requerido, y, en caso de no aceptarse, la aplicación puede seguir siendo utilizada sin dicho recurso.

Como parte del modelo de seguridad de Android, el sistema operativo utiliza Security-Enhanced Linux (SELinux) para hacer cumplir el acceso de control mandatorio (MAC), frente al modelo de seguridad estándar y tradicional de Linux (DAC); en todos los procesos, incluso procesos que estén ejecutándose con permisos especiales root. Sin embargo, a qué procesos afecta dependerá de la implementación concreta de la versión de Android.

SELinux es un módulo de seguridad que se integra con el kernel de las distribuciones Linux desde la 2.6 y que, mediante un conjunto de políticas de seguridad, asegura el sistema bloqueando un conjunto de accesos. Muchas compañías y organizaciones han apoyado la implementación de SELinux, dado que, con ello, Android puede proteger y limitar mejor los recursos y servicios del sistema, controlar el acceso a los datos y registros del sistema por parte de cada aplicación, reducir las consecuencias de un software malicioso y proteger a los usuarios de posibles errores de código en dispositivos móviles.

SELinux trabaja con el principio de denegación por defecto, es decir, todo lo que no se permita explícitamente está denegado. En base a esto, SELinux puede operar en 2 modos:

  • Modo permisivo, en el que las negaciones de permisos se registran, pero no se aplican
  • Modo obligatorio, en el que las negaciones de permisos se registran y aplican.

El modo utilizado en Android depende de la versión concreta a la que nos estemos refiriendo, ya que la implementación ha ido variando a lo largo de las diferentes actualizaciones:

  • En Android 4.3 se hace uso de SELinux en modo permisivo (Las acciones no permitidas son registradas, pero no bloqueadas)
  • En Android 4.4, se hace un uso parcial del modo obligatorio. Es decir, solo se hace uso de este modo en un conjunto crítico de procesos, como el proceso Zygote. Para el resto de procesos se continúa utilizando el modo permisivo.
  • A partir de Android 5.0, se hace uso de un modo obligatorio completo, es decir, aplicable a todo tipo de procesos.

A partir de Android Lollipop se introduce Seccomp, que permite la implementación de sandboxes, es decir, entornos de ejecución restringidos donde un proceso sólo dispone de un número limitado de llamadas al sistema, y únicamente sobre los ficheros que tenía previamente abiertos. Si el proceso intenta realizar una llamada al sistema fuera de su rango de actuación, automáticamente se finaliza su ejecución.

Android Nougat introduce actualizaciones en la configuración de SELinux, incrementado la cobertura asociada a Seccomp. Además, en esta versión se introducen protecciones de memoria adicionales para las nuevas versiones del kernel de Linux, marcando nuevas zonas de memoria del kernel de únicamente lectura, y restringiendo el acceso del kernel a direcciones de memoria del espacio de usuario.

SELinux implementa el modelo de permisos mediante la definición de etiquetas asociadas a recursos y que marcan qué acciones están permitidas. Las políticas de acceso a un determinado objeto establecen qué se permite para una determinada etiqueta.

Además, SELinux en Android incorpora elementos de protección del espacio de kernel, mediante la división de los segmentos de memoria en secciones lógicas y el establecimiento de restricciones de acceso a su espacio de direcciones.

En último lugar, otra de las características de SELinux es la restricción de acceso por parte de las aplicaciones a los comandos ioctl, es decir, las llamadas al sistema asociadas al control y comunicación con controladores. De esta forma, sólo una pequeña lista de sockets ioctl está disponible para las aplicaciones, limitando el acceso a identificadores de dispositivos, y evitando vulnerabilidades de escalada de privilegios y ejecución de código en el contexto del kernel. 

07 July 2022
close
Tu email

Haciendo clic en “Enviar”, estás de acuerdo con nuestros Términos de Servicio y  Estatutos de Privacidad. Te enviaremos ocasionalmente emails relacionados con tu cuenta.

close thanks-icon
¡Gracias!

Su muestra de ensayo ha sido enviada.

Ordenar ahora

Utilizamos cookies para brindarte la mejor experiencia posible. Al continuar, asumiremos que estás de acuerdo con nuestra política de cookies.