Android es un sistema más seguro de lo que imaginas

Android tiene mala fama cuando se trata de seguridad debido principalmente a su popularidad, la gran cantidad de dispositivos sin soporte que lo usan, la nada desdeñable presencia de aplicaciones maliciosas y en el pasado a la gran cantidad de incidencias de seguridad que ha protagonizado Java, una de las principales tecnologías en las que se basa, pero implementándola a su manera.

Sin embargo, y aunque esto sorprenda a muchos, Android está bien planteado en términos de seguridad tanto frente a software malicioso como incidencias, sobre todo porque enfoca dicha seguridad en el contexto del usuario final. Para empezar, se trata de un sistema operativo inmutable que en su configuración predeterminada no puede ser modificado. Esto, que algunos interpretan como una forma de limitar la libertad que el usuario, termina siendo una medida muy efectiva para evitar roturas accidentales o que derivan de una manipulación incorrecta.

Otro punto básico está en cómo funciona la concesión de permisos, que se basa en distintos aspectos y periféricos presentes en el dispositivo o el sistema operativo. Por ejemplo, con el fin de reforzar la privacidad proporcionada por un navegador web, es posible denegarle el acceso a partes de un móvil o una tablet como las cámaras y el micrófono. Las sucesivas versiones de Android han pulido esta faceta para que los permisos puedan ser concedidos de forma puntual y así evitar su reconfiguración constante en los Ajustes, dentro de la sección de Aplicaciones.

La concesión de los permisos se basa en aspectos que son fáciles de entender para el usuario común, como las cámaras, el micrófono, los ficheros y contenidos multimedia almacenados, los contactos (por cuestiones de privacidad) y la ubicación. Estos permisos pueden ser configurados a voluntad, pero recomiendo tener mucho cuidado en su configuración y conceder siempre lo mínimo imprescindible para minimizar en lo máximo posible la filtración o el robo de datos confidenciales. En caso de no estar seguro, lo sensato es denegar.

Después de exponer las partes más superficiales, voy a profundizar en un aspecto avanzado que por lo general es invisible para el usuario común, en exponer brevemente algunas de las características más destacadas del frente que me ocupa en esta entrada y en mencionar el último giro de tuerca impulsado por Google.

SELinux, el módulo de seguridad para Linux está presente en Android

SELinux es la abreviatura de Security Enhanced Linux y es un módulo de seguridad para el kernel Linux, que a día de hoy sigue siendo el motor de Android a pesar del empuje de Fuchsia y su núcleo Zircon.

SELinux despierta recelos dentro de la comunidad Linux debido a que su creadora fue la NSA, la archiconocida agencia de seguridad de Estados Unidos. Esto le ha costado muchas acusaciones de ser un sypware, pero la realidad es que la institución decidió liberarlo bajo la licencia GPLv2, así que ofrece bastante transparencia en ese sentido. Por otro lado, desde hace muchos años su principal desarrollador es Red Hat, el mayor gigante que existe en torno al sistema operativo de código abierto.

Con SELinux es posible definir los controles de acceso para aplicaciones, procesos y ficheros en el sistema operativo. Para ello utiliza políticas de seguridad que consisten en un conjunto de reglas para indicar a qué elementos se pueden acceder. Cuando una aplicación o un proceso solicita acceso a un objeto, el cual puede ser un fichero, el módulo de seguridad consulta la caché de vector de acceso (AVC), donde se encuentran almacenados los permisos de los objetos y los sujetos.

En caso de no poder determinar el acceso en función de los permisos almacenados en caché, SELinux envía la solicitud al servidor de seguridad, que se encarga de analizar el contexto de seguridad de la aplicación o del proceso y el fichero. El contexto de seguridad se aplica desde la base de datos de políticas de SELinux y luego se otorga o deniega el acceso.

Logo de SELinux.

SELinux puede estar en modo inhabilitado, permisivo e impositivo (que en la documentación oficial de Android es llamado “cumplimiento”). El primer modo es bastante autoexplicativo y básicamente inhabilita el módulo de seguridad. El modo permisivo hace que las denegaciones de permisos queden registradas, pero no se aplican, mientras que el impositivo, como es de esperar, se encarga de que las denegaciones se registren y se apliquen.

En lo que respecta a Android, que es lo que nos ocupa en esta entrada, SELinux empezó a ser introducido en la versión 4.3 y desde Android 5.0 se aplica por completo y en modo impositivo. Google ha ido endureciendo la configuración e implementando más restricciones en las sucesivas versiones del sistema.

A día de hoy SELinux está presente de manera predeterminada en algunos sistemas Linux como Fedora, Red Hat Enterprise Linux y los inmutables del espectro SUSE, tanto SUSE Linux Enterprise como openSUSE. Los mencionados lo tienen en modo impositivo por defecto, pero otros como el actual Amazon Linux tienen el módulo de seguridad configurado en permisivo.

SELinux es un componente que genera debate dentro de la comunidad Linux. Sus defensores argumentan que es la mejor y más avanzada solución en su terreno, mientras que sus detractores lo acusan de ser excesivamente complejo, difícil de configurar, intrusivo y acaparador de recursos. Su principal competidor es AppArmor, cuyo desarrollo desde 2009 es responsabilidad de Canonical, la compañía encargada de Ubuntu, mientras que anteriormente estuvo en manos de Immunix, empresa que lo creó en 1998, y de SUSE, que adquirió Immunix en el año 2005.

Otras medidas de seguridad o privacidad presentes en Android

Después de mencionar algunos de los aspectos de la seguridad de Android, ya sea frente a amenazas externas o como medidas para evitar la rotura del sistema, voy a mencionar otros que están presentes con el fin de aportar seguridad y/o privacidad. La mayoría de estas cosas son conocidas por los usuarios que tengan ciertos conocimientos, pero no viene mal recordarlas para mostrar que Android no es ni por asomo un desastre en este sentido al menos en lo que respecta al diseño y lo que tiene implementado.

Aislamiento de aplicaciones (sandbox)

Consiste en aprovecharse de la protección basada en el usuario de Linux para identificar y aislar los recursos de las aplicaciones. Para hacer esto, Android asigna un único identificador de usuario (UID) a cada aplicación y las ejecuta en su propio proceso, además de emplear el UID para establecer el aislamiento de la aplicación a nivel del kernel.

Firmado de aplicaciones

El firmado de las aplicaciones permite identificar al autor legítimo de una aplicación y actualizarla sin necesidad de crear complicados permisos e interfaces. Todas las aplicaciones deben estar firmadas por su desarrollador para poder ser instalada al menos desde la Play Store y si no se abre la verja a la instalación de aplicaciones procedentes de fuentes no confiables.

Recuerdo que Google ha anunciado que mejorará el funcionamiento de las tiendas de tercero en Android 14, muy posiblemente debido a la presión cada vez mayor que tienen los desarrolladores de sistemas operativos en lo que respecta a permitir la incorporación de tiendas de terceros.

Autenticación

Android emplea el concepto de claves criptográficas activadas por autenticación del usuario que requiere de almacenar las claves criptográficas, proveedores de servicios y autenticadores de usuarios. La versión 9 del sistema incluye Confirmación de protección, que proporciona una vía para que los usuarios puedan confirmar formalmente transacciones críticas como pagos.

En la documentación oficial se menciona el sensor de huellas dactilares y la API para la autenticación biométrica, pero estas vías, con especial mención a la huella dactilar, puede que no resulten las más seguras a pesar de evitar el uso de un medio tan cuestionado como las contraseñas.

Cifrado del dispositivo

El cifrado del dispositivo permite cifrar todos los datos del usuario antes de enviarlos al disco y todas las lecturas descifran automáticamente los datos antes de devolverlos al proceso de llamada. Lo que se pretende con el uso del cifrado del dispositivo es impedir el acceso a los datos por parte de una persona no autorizada.

Almacenamiento de claves

Android ofrece almacenamiento de claves respaldado por hardware que proporciona generación de claves, importación y exportación de claves asimétricas, importación de claves simétricas sin procesar, cifrado y descifrado asimétrico con modos de relleno apropiados, además de otras cosas.

Entorno de ejecución confiable de Trusty

Trusty es sistema operativo seguro que proporciona un entorno de ejecución confiable (TEE) para Android. Se ejecuta en el mismo procesador que Android, pero se encuentra aislado del resto del sistema tanto por hardware como por software.

Arranque verificado

Esta característica es conocida incluso por muchas personas que no se dedican a la informática, y básicamente consiste en una comprobación que se encarga de verificar que el software ejecutado en el dispositivo provenga de una fuente confiable con el fin de evitar corrupciones o la intrusión de malware o algún actor malicioso. Establece una cadena de confianza completa que va desde una raíz de confianza protegida por hardware hasta el gestor de arranque, la partición de arranque y otras particiones verificadas.

Actualizaciones continuas, el último intento de Google dar otro giro de tuerca

Google no se conforma con lo implementado hasta ahora. Una medida que ha impulsado es la implementación de unas actualizaciones continuas del sistema A/B basado en un esquema virtual.

No es la primera vez que el gigante del buscador intenta implementar este mecanismo de actualizaciones, ya que en un principio lo introdujo en Android 7. Sin embargo, la mayoría de los OEM lo rechazaron debido a la redundancia integrada en el diseño y al espacio adicional que requería en el almacenamiento de datos. Debido a eso, Google le dio una vuelta de tuerca en Android 11 para introducir un esquema de partición A/B virtual.

Simplificando mucho, el modelo A/B significa que hay dos particiones o sistemas raíz, A y B, las cuales se intercambian en cada proceso de actualización. Si la partición raíz activa es A y esta es actualizada, B pasa a estar por defecto y A queda como respaldo, dando como resultado un mecanismo que impide que el dispositivo acabe inutilizado en caso de error.

Conclusión

Como vemos, Android tiene implementadas muchas medidas para garantizar su seguridad, ya sea frente a incidencias de seguridad o de software que funciona mal. Lejos de lo que muchos creen, se trata de un sistema operativo bien planteado en ese sentido.

Sin embargo, la efectividad o fiabilidad de toda esa seguridad queda en entredicho si vemos que los dispositivos Android están hechos para ser mantenidos durante muy poco tiempo por parte de sus fabricantes, y a eso hay que sumar la poca diligencia de muchos a la hora suministrar los últimos parches de seguridad. En estos casos merece la pena plantearse la instalación de una ROM personalizada, aunque eso haga obligatoria la rotura de al menos algunas de las medidas seguridad vinculadas al arranque.

El planteamiento de Android puede recordar al ecosistema de Apple, tanto iOS como macOS, además de a algunos sistemas Linux inmutables que se han dado a conocer en los últimos tiempos, principalmente Fedora Silverblue, Fedora Kinoite, openSUSE MicroOS (en un futuro Aeon y Kalpa) y VanillaOS.

La entrada Android es un sistema más seguro de lo que imaginas se publicó primero en MuyComputer.