Introducción al SO de los móviles

De Training B Wiki
Salta a la navegació Salta a la cerca


El SO de Android

Android se desarrollo en 2003 por Android Inc, el objetivo era desarrollar un sistema operativo para cámaras. La idea inicial no era crear un SO de móviles, sino más bien crear un SO para dispositivos electrónicos de carácter más general. En 2003, Andy Rubin, Rich Miner, Nick Sear y Chris White empezaron a desarrollar un sistema operativo avanzado y escalable para diversos operativos.

Pero a medida que avanzo el proyecto, fueron conscienctes del potencial que tenía su tecnologia y decidieron expandir su enfoque hacia los dispositivos móviles, que por aquel entonces, solo había alguna versión de Windows mobile, o las propias BlackBerrys. Así que en 2004, cambió la dirección del proyecto y se entregaron por completo a los móviles. En 2005, Google adquirió la empresa y basó el núcleo del sistema en Linux.

La migración a Linux fué un paso crucial y estratégico en el desarrollod e Android:

  • Código abierto y licencia GPL: Asumiendo Linux como el núcleo de Android, se asumía la política de código fuente accesible y disponible para cualquier persona, ya que Linux es GPL y obliga a todos sus derivados a ser también de código libre.
  • Estabilidad y Rendimiento: Android heredó la estabilidad y rendimiento de Linux, era la base sólia sobre la que se construiria todo el sistema operativo.
  • Compabilitat de Hardware: Asumiendo el núcleo de Linux, Android mejoraba su compatibilidad con los hardwares del mercado, y eso ayudó a los fabricantes a generar nuevos modelos usando como base a Android.
  • Comunidad de desarrolladores: La comunidad de desarrolladores que podía contribuir al proyecto aumento exponencialmente.
  • Comandos y aplicacions de Linux: Android ahora podía disponer de un conjunto de scripts, herramientas y utilidades ya existentes en Linux.

Para competir con Apple, en 2007 Google fundó la Open Handset Alliance, una alianza de varios fabricantes de hardware para promover Android como un sistema operativo de código abierto, permitiendo el soporte de aplicaciones de terceros. El primer teléfono móvil lanzado con este sistema fue el T-Mobile G1, que salió al mercado un año después del primer iPhone, en octubre de 2008. No fue hasta 2012 que todos los fabricantes combinados lograron convertir a Android en el sistema operativo móvil con más dispositivos.

Como resultado, la filosofía de Android, aunque comparte ciertas similitudes con iOS, es estructuralmente diferente. Android está concebido como un sistema abierto, brindando gran libertad a los integradores y a las compañías que lo utilizan para ofrecer servicios de manera más flexible a los usuarios.

Este último punto es, al mismo tiempo, una ventaja crucial, ya que existe una amplia diversidad de dispositivos y sistemas que utilizan el sistema operativo. Esto evita el "Vendor Lock-in" presente en Apple. Sin embargo, al mismo tiempo, cada fabricante tiene sus diferencias, lo que hace más difícil uniformizar el sistema de manera general.

Estructura interna y por capas del sistema operativo Android

Android, como sistema operativo, está diseñado con una arquitectura de capas que permite una organización modular y eficiente de sus componentes. La estructura interna de Android se puede entender mediante sus capas, que van desde el hardware hasta las aplicaciones de usuario. La estructura por capas de Android permite una clara separación de responsabilidades y facilita la flexibilidad y la escalabilidad del sistema operativo, así como el desarrollo de aplicaciones de terceros. A continuación, se describen las capas principales del sistema operativo Android:

Estructura interna de las capas del SO de Android
Estructura interna de las capas del SO de Android


  1. Kernel de Linux: En la capa más baja se encuentra el kernel de Linux. Este proporciona servicios esenciales como gestión de memoria, manejo de procesos, manejo de dispositivos y controladores de hardware. El kernel actúa como interfaz entre el hardware y el resto del sistema operativo.
  2. Abstracción del Hardware (HAL): És la primera capa específica del sistema Android e interacciona con el Hardware propio del dispositivo móvil.
  3. Librerías de Android: Sobre el kernel, se encuentran las librerías de Android, que proporcionan funciones esenciales para el desarrollo de aplicaciones. Estas librerías incluyen la implementación de funciones fundamentales como manipulación de datos, gráficos, acceso a la red y gestión de archivos. Están escritas principalmente en C y C++.
  4. Android Runtime (ART): ART es responsable de la ejecución de las aplicaciones Android. Con la compilación AOT, las aplicaciones se traducen en código nativo durante la instalación, lo que mejora la eficiencia y el rendimiento en comparación con la ejecución JIT (Just-In-Time) utilizada por Dalvik. A más, ART proporciona un entorno de ejecución controlado y un nivel de abstracción entre aplicaciones y hardware.
  5. JAVA API Framework: En esta capa se encuentra el framework de aplicaciones, que proporciona las API y los servicios esenciales para el desarrollo de aplicaciones Android. Esto incluye la gestión de la interfaz de usuario, la administración de recursos, la conectividad de red, la gestión de datos y otros servicios esenciales. El framework está compuesto por módulos como Activity Manager, Content Providers, View System, etc.
  6. Aplicaciones de Sistema y usuario: Este nivel incluye aplicaciones esenciales del sistema que proporcionan funcionalidades básicas, como la aplicación de teléfono, contactos, mensajes, entre otras. Estas aplicaciones son parte integral del sistema y, en algunos casos, son específicas del fabricante. A más, incorpora las aplicaciones que los usuarios instalan desde Google Play u otras fuentes. Estas aplicaciones aprovechan las API proporcionadas por el framework para ofrecer una amplia variedad de funciones y servicios.

Las particiones y el sistema de ficheros en Android

El esquema de particiones de Android

Las particiones del SO de Android son las divisiones físicas del almacenamiento interno de nuestro dispositivo. Cada partición tendrá su propósito específico, con sus directorios específicos, aunque pueden haber variaciones entre dispositivos Android. Las principales particiones son:

  1. Partición raíz(/): Es la partición principal en el sistema de archivos de Android. Contiene los directorios y archivos fundamentales necesarios para el funcionamiento del sistema.
  2. Boot Partition (/boot): Esta partición contiene los archivos necesarios para iniciar el sistema operativo Android. Incluye el kernel del sistema, que es esencial para iniciar el dispositivo.
  3. System Partition (/system): Aquí se encuentran los archivos del sistema operativo Android, como el código del sistema, las bibliotecas compartidas y las aplicaciones del sistema. Esta partición suele estar montada como de solo lectura (read-only) para garantizar la estabilidad y seguridad del sistema.
  4. Recovery Partition (/recovery): Es una partición de Android, contiene el mínimo entorno de ejecución para la recuperación del sistema. Se puede utilizar para su mantenimiento, la instalación de actualizaciones de sistema o el restablecimiento de fábrica.
  5. Data Partition (/data): Esta partición almacena los datos de usuario, incluyendo las aplicaciones instaladas, configuraciones, y otros datos específicos del usuario. A diferencia de la partición del sistema, esta partición suele ser de lectura/escritura.
  6. Cache Partition (/cache): La partición de caché almacena datos temporales utilizados por el sistema operativo y algunas aplicaciones. Limpiar la caché a veces puede resolver problemas de rendimiento.
  7. Vendor Partition (/vendor): En algunos dispositivos, esta partición contiene archivos específicos del fabricante o del proveedor de servicios. Puede incluir controladores de hardware, configuraciones personalizadas y otros archivos relacionados con el firmware del dispositivo.
  8. Sdcard o Data Media Partition (/sdcard o /mnt/sdcard): Esta partición representa el almacenamiento externo del dispositivo, ya sea una tarjeta SD o el almacenamiento interno. Aquí es donde se almacenan archivos multimedia, descargas y otros datos del usuario.
  9. Metadata Partition (/metadata): Algunos dispositivos pueden tener una partición de metadatos que almacena información específica sobre la configuración del dispositivo, el firmware y otros detalles importantes.

El sistema de ficheros de Android

El sistema de ficheros de Android parte también del kernel de Linux. Pero como pasa con Linux, nos podemos encontrar con diferencias entre versiones. Aún así, los principales directorios son:

  1. Root (/): Es la raíz del sistema sistema de archivos y se encuentran los directorios principales, como "system", "data", "proc", y otros. La partición raíz generalmente está montada de solo lectura (read-only) para garantizar la integridad del sistema.
  2. /system: Este directorio contiene los archivos del sistema operativo Android, incluyendo la interfaz de usuario, bibliotecas compartidas, binarios y otros componentes esenciales.
  3. /data: Es donde se almacenan los datos de las aplicaciones y los usuarios. Este directorio es de lectura/escritura y contiene subdirectorios como "data/app" (para las aplicaciones instaladas), "data/data" (datos específicos de las aplicaciones), y otros.
  4. /cache: Este directorio almacena datos temporales utilizados por el sistema operativo y algunas aplicaciones. Puede contener archivos temporales, cachés de aplicaciones y otros datos que pueden eliminarse sin afectar el funcionamiento general del sistema.
  5. /sdcard o /mnt/sdcard: Este directorio (o enlaces simbólicos) suele representar el almacenamiento externo, como una tarjeta SD.. Aquí es donde se almacenan los archivos multimedia, descargas y otros datos del usuario.
  6. /proc: Este directorio virtual proporciona información en tiempo real sobre el estado del sistema, procesos en ejecución, o configuración del kernel. Contiene información que el kernel del sistema genera dinámicamente.
  7. /dev: Este directorio contiene archivos especiales que representan dispositivos de hardware en el sistema. Por ejemplo, /dev/sda puede representar un disco duro.
  8. /mnt: Este directorio se utiliza para montar otros sistemas de archivos, como sistemas de archivos de red o dispositivos de almacenamiento extraíbles.
  9. /system/vendor: En algunos dispositivos, este directorio almacena archivos específicos del fabricante o del proveedor de servicios, como controladores y configuraciones personalizadas.
  10. /system/bin y /system/xbin: Contienen binarios ejecutables utilizados por el sistema y las aplicaciones.
  11. /sbin: Contiene binarios del sistema que son esenciales para el inicio del sistema. Este directorio suele estar reservado para el usuario root.

La relación entre las particiones y los directorios

En el siguiente esquema se muestra la relación existente entre las particiones físicas y los principales directorios de Android.

+-----------------------------------------------------------------------------+
|                                 Raíz (/)                                    |
|                                                                             |
|  +---------------------+  +---------------------+  +---------------------+  |
|  |  /system (ext4)     |  |  /data (ext4)       |  |  /cache (ext4)      |  |
|  |                     |  |                     |  |                     |  |
|  |  - app              |  |  - app              |  |  - app              |  |
|  |  - bin              |  |  - dalvik-cache     |  |  - app-private      |  |
|  |  - etc              |  |  - data             |  |  - data             |  |
|  |  - framework        |  |  - misc             |  |  - system           |  |
|  |  - lib              |  |  - user             |  |  - lost+found       |  |
|  |  - priv-app         |  |  - system           |  |                     |  |
|  +---------------------+  +---------------------+  +---------------------+  |
|                                                                             |
|  +---------------------+  +---------------------+  +---------------------+  |
|  |  /boot (ext4)       |  |  /recovery (ext4)   |  |  /vendor (ext4)     |  |
|  |                     |  |                     |  |                     |  |
|  |  - kernel           |  |  - etc              |  |  - bin              |  |
|  |  - ramdisk          |  |  - recovery         |  |  - etc              |  |
|  |                     |  |                     |  |  - lib              |  |
|  +---------------------+  +---------------------+  +---------------------+  |
|                                                                             |
|  +---------------------+  +---------------------+  +---------------------+  |
|  |  /sdcard (exFAT,    |  | /mnt/sdcard         |  |  /metadata (FAT32,  |  |
|  |   FAT32, etc.)      |  |  (exFAT, FAT32, etc)|  |   exFAT, FAT32, etc)|  |
|  |                     |  |                     |  |                     |  |
|  |  - DCIM             |  |  - Alarms           |  |  - metadata         |  |
|  |  - Music            |  |  - Download         |  |                     |  |
|  |  - Pictures         |  |  - Movies           |  +---------------------+  |
|  |                     |  |  - Music            |                           |
|  +---------------------+  +---------------------+                           |
+-----------------------------------------------------------------------------+

Seguridad en Android

La seguridad en los dispositivos Android es fundamental, fijaros la de recursos que tenemos para defender nuestros dispositivos tipo PC, mientras que parece que con Android no tenemos los mismos. Y esto contrasta con la información privilegiada y el acceso a aplicaciones importantes que tenemos en nuestro móvil. Para securizar nuestro dispositivo, Android implementa diversas medidas de seguridad en favor de la integridad del sistema y la privacidad del usuario. Las más importantes son:

Modelo de Permisos

El modelo de permisos de Android es un sistema que regula el acceso que las aplicaciones tienen a diferentes recursos y funciones del dispositivo. Este modelo es esencial para garantizar la privacidad y seguridad de los usuarios al limitar el alcance de las acciones que una aplicación puede realizar sin el consentimiento explícito del usuario.

Principios básicos del sistema de permisos de Android

Los permisos están basados en un conjunto de principios básicos que regulan su uso:

  1. Consentimiento del Usuario: Antes de que una aplicación pueda acceder a ciertos recursos o realizar ciertas acciones, debe obtener el consentimiento del usuario. Este consentimiento se solicita durante la instalación de la aplicación y puede ser revocado posteriormente en la configuración del sistema.
  2. División en Categorías: Los permisos se dividen en categorías que representan áreas específicas de funcionalidad o acceso. Algunas categorías comunes incluyen "Cámara", "Ubicación", "Contactos", o "Almacenamiento".
  3. Permisos de Tiempo de Ejecución: A partir de Android 6.0 (Marshmallow), se introdujo el concepto de permisos de tiempo de ejecución. Esto significa que algunas categorías de permisos, como la ubicación y el acceso a archivos, se solicitan cuando la aplicación intenta acceder a esos recursos durante la ejecución, no solo durante la instalación.
  4. Normal Permissions y Dangerous Permissions: Hay dos tipos principales de permisos: normales y peligrosos. Los 'Normals', son concedidos automáticamente durante la instalación de la aplicación (por ejemplo: el uso de Internet o el efecto de vibrar), mientras que los 'dangerous' requieren el consentimiento explícito del usuario durante su ejecución/instalación y pueden incluir acceso a datos sensibles o funciones del sistema (por ejemplo: el uso de la cámara, la localización o la grabadora de audio).

La gestión de los permisos para los desarrolladores

  1. Solicitud de Permisos: Las aplicaciones deben declarar los permisos que necesitan en su archivo del manifest. Tanto los permisos normales, como con los peligrosos, deben ser solicitados explícitamente.
  2. Solicitudes en Tiempo de Ejecución: Para permisos dangerous, como acceso a la cámara o ubicación, la aplicación debe solicitarlos al usuario durante el tiempo de ejecución, cuando se realiza la acción que requiere el permiso. La solicitud debe mostrar un diálogo explicando por qué la aplicación necesita de ese permisos. El usuario debe tener la posibilidad de denegar la solicitud.
  3. Gestión en Configuración: Los usuarios pueden revisar y gestionar los permisos de las aplicaciones en la configuración del dispositivo en cualquier momento. Se debe poder revocar o conceder permisos a aplicaciones de forma individual.

Las categorías de permisos en Android

Los permisos en Android se dividen en diversas categorías según la función que desarrollen o el recurso del cual hagan uso. De esta forma, podemos otorgar permisos por categorías y simplificar su administración. Las principales categorías son:

  1. Calendar
  2. Camera
  3. Contacts
  4. Location
  5. Microphone
  6. Phone
  7. Sensors
  8. SMS
  9. Storage
  10. Internet
  11. Bluetooth
  12. NFC
  13. Body sensors

La gestión de los permisos por parte de los usuarios

El sistema de permisos es básico para mantener el dispositivo Android securizado. Debemos concienciar a los usuarios con las siguientes recomendaciones:

  • El usuario debe revisar los permisos solicitados por una aplicación antes de instalarla.
  • El usuario debe ser cauteloso al otorgar permisos peligrosos y debe entender por qué una aplicación los necesita.
  • El usuario debe revisar y ajustar los permisos de las aplicaciones en la configuración del dispositivo según sea necesario.

El modelo de permisos de Android es una parte esencial del sistema operativo que equilibra la funcionalidad de las aplicaciones con la protección de la privacidad del usuario. La transparencia en las solicitudes de permisos y la capacidad de gestión otorgan a los usuarios un mayor control sobre la seguridad de sus dispositivos.

Sandboxing y el aislamiento de las aplicaciones

Una de las preocupaciones de Android es la de proteger las aplicaciones entre si, evitar que una aplicación pueda afectar al resto e afectarla negativamente.

Para ello se usa el sandboxing y se aíslan las aplicaciones, de esta forma se consigue que las aplicaciones se ejecuten en entornos controlados y no haya interferencias.

Ambas técnicas mejoran la seguridad de nuestro dispositivo y evitan que las vulnerabilidades de una aplicación afecten a recursos críticos y al sistema operativo.

Sandboxing

El sandboxing es cuando ejecutamos una aplicación en un entorno virtual aislado. Se usa también para comprobar la seguridad de una aplicación antes de importarla a producción. La virtualización permite limitar las acciones y recursos a los que puede acceder.

Para ello, cada aplicación se ejecuta con sus propios procesos de sistemas, su espacio de memoria privada y sus recursos preasignados.

Además, esta abstracción permite restringir el acceso de las aplicaciones a ciertos recursos del sistema, como los archivos de configuración del sistema operativo.

Aislamiento de las aplicaciones

El aislamiento de las aplicaciones es la separación de los datos y procesos de la aplicación del resto del sistema. Cada aplicación tiene su propio directorio de datos y almacenamiento privado donde guardar sus archivos y configuraciones.

De esta forma, la aplicación solo puede acceder a su directorio, parecido a una jail, la aplicación es incapaz de poder ver más allá. Y en caso de necesitar algún recurso del SO, este se hará a través de los permisos y desde la virtualización HAL, evitando así la interacción directa con el recurso.

En conclusión, el sandboxing y el aislamiento de aplicaciones son elementos cruciales del diseño de seguridad de Android. Estas prácticas contribuyen a un entorno de ejecución seguro y controlado, permitiendo a los usuarios disfrutar de la diversidad de aplicaciones sin comprometer la integridad del sistema.

Actualizaciones de Seguridad

Google ofrece actualizaciones de seguridad mensuales para abordar vulnerabilidades conocidas en el sistema operativo. Sin embargo, la implementación de estas actualizaciones puede variar según el fabricante y el operador del dispositivo, lo que ha llevado a problemas de fragmentación en el ecosistema Android.

Las actualizaciones de seguridad en Android son clave para abordar y corregir vulnerabilidades, mejorar la seguridad del sistema operativo y proteger a los usuarios contra posibles amenazas.

Es tarea del administrador IT de una organización que todos sus dispositivos estén actualizados. Para ello es importante entender algunos aspectos básicos:

  1. Ciclo de Publicación de Actualizaciones de Seguridad: Google publica de forma mensual actualizaciones de seguridad, éstas son enviadas a los fabricantes de dispositivos Android y publicadas en el proyecto de código abierto Android Open Source Project (AOSP).
  2. Contenido de las Actualizaciones de Seguridad: Las actualizaciones incluyen 'parches de seguridad para securizar los dispositivos de las vulnerabilidades aparecidas y subsanadas, y además, también pueden incorporar mejoras generales de seguridad para mitigar riesgos potenciales.
  3. Distribución de Actualizaciones: La fragmentación de los dispositivos Android, los operadores de red y la región configurada en el dispositivo, puede afectar a la disponibilidad de las actualizaciones.
  4. Período de soporte para actualizaciones de seguridad: Cada fabricante ofrece un período de soporte para la actualización de sus dispositivos, el cual puede variar también según modelo. Existen actualizaciones generales de Android y actualizaciones de seguridad de Android. Es completamente inseguro usar un móvil fuera del período de soporte de seguridad. En muchos casos, el soporte no se define según años, si no por versiones de Android. Uno de los móviles con un período más grande es Google Pixel 8, con 7 años de soporte.
  5. Android Enterprise Recommended: Programa de dispositivos recomendados de Google que destaca dispositivos que cumplen con estándares específicos de actualizaciones de seguridad y rendimiento. La mayoría de dispositivos móviles que conocemos están en la lista.

El cifrado de Datos

Android permite el cifrado de datos de todo el sistema de ficheros o de un archivo en concreto. El cifrado nos permite que solo los usuarios que conocen la contraseña puedan acceder a nuestros archivos.

Full-Disk Encription

Es la encriptación de todo nuestro dispositivo. En el momento de arranque nos pedirá una contraseña, PIN o patrón de desbloqueo para su arranque.

La clave de cifrado es necesaria para poder desencriptar nuestro dispositivo y permite mantener la confidencialidad de nuestros datos en caso de extravío del dispositivo móvil.

Permanentemente, la clave se usa para poder encriptar y desencriptar los datos durante su lectura y escritura. Es decir, internamente todo está encriptado, y en caso que el dispositivo entre en reposo, va a requerir de nuevo la clave para poder desencriptar y arrancar de nuevo.

File-Based Encryption

Es la encriptación de un archivo en concreto. No se encripta toda la partición, si no solo el fichero en cuestión. El usuario podrá crear una contraseña específica o usar sus propias credenciales del sistema para su encriptación.

La principal ventaja es que al ser un sistema de encriptación independiente de todo el sistema operativo, podemos encriptar según sea el usuario, permitiendo que dos usuarios compartan el mismo dispositivo y con claves de encriptación diferenciadas.

Google Play Protect

Es un servicio de seguridad creado por Google el cual escaena de forma continua nuestras aplicaciones para identificar posibles amenazas en nuestro dispositivo. En caso de detectar actividad maliciosa, es capaz de deshabilitar la aplicación y alertar al usuario.

Además, ofrece protección antiphising, es capaz de desinstalar una aplicación de los dispositivos de forma remota, proporciona seguridad durante la navegación por web, y es el encargado de informado sobre la gestión de los permisos de una aplicación antes de instalarla.

Secure Boot y Autenticación Biométrica

El inicio seguro y la autenticación biométrica son componentes clave de la seguridad en Android, diseñados para proteger el acceso al dispositivo y a los datos almacenados en él.

Secure Boot

Son los procesos de securización que realiza el sistema operativo durante el arranque del dispositivo. Par ello, se verifica la firma digital de todos los componentes (hardware y software) para comprobar que no se hayan alterado por código malicioso. Similar a la UEFI de un PC.

Todos los componentes de arranque tienen un hash único que les identifica, si la firma obtenida en el arranque no coincide con la última firma "legal", se envía una señal al usuario para advertirle que el sistema operativo podría estar corrupto.

Los archivos, o mecanismos, del proceso de arranque están fuera de la encriptación, son los encargados de hacer funcionar el dispositivo, de aquí su vulnerabilidad. Después del arranque, el usuario ya podrá introducir la clave en caso de que haya encriptado su dispositivo.

Autenticación Biométrica

Los datos biométricos de los usuarios son datos de especial protección. Hoy día, muchos usuarios pueden acceder con ellos a sus cuentas y tarjetas bancarias, efectuar pagos, leer y escribir el correo electrónico, o desencriptar el dispositivo.

Por ello nos podemos encontrar con hardware específico para su uso, como Titan M2 de Google Pixel. Son chips que solo se encargan de administrar las funciones de seguridad y almacenar los datos más sensibles.

El uso único de datos biométricos como claves para los dispositivos móviles no es una buena política de seguridad y se recomienda combinarla con otro tipo de claves.

Administradores de Dispositivos

Para los dispositivos móviles también tenemos aplicaciones para administrar varios dispositivos aplicando unas mismas políticas de seguridad. Android Enterprise es la plataforma que nos permite el monitoreo, gestión y registro de los dispositivos Android de una empresa.

Cuando un usuario configura un dispositivo Android, puede optar por registrar el dispositivo con un administrador de dispositivos específico. Esto puede realizarse durante el proceso de configuración inicial del dispositivo o posteriormente en la configuración del sistema.

Una vez registrado, el administrador de dispositivos permite a los usuarios y administradores realizar acciones de administración de forma remota:

  • Permite el rastreo de la ubicación de un dispositivo en tiempo real.
  • Permite el bloqueo remoto para evitar el acceso no autorizado.
  • Permite el borrado remoto para eliminar todos los datos del dispositivo.
  • Permite enviar alertas y notificaciones al dispositivo para informar al usuario sobre eventos específicos.
  • Permite establecer políticas de seguridad, como requisitos de contraseña, configuraciones de Wi-Fi, o restricciones de aplicaciones.
  • Permite gestionar perfiles de usuario y aplicar configuraciones específicas para cada perfil.

Algunas de estas opciones afecta de forma negativa a la privacidad de los trabajadores, por tanto, se deberá cumplir con estrictas normas de seguridad y privacidad. Se requiere la autenticación del usuario antes de realizar acciones críticas.

Red Privada Virtual (VPN) y Seguridad en la Red

Las redes VPN son puentes entre dos puntos de la red Interna que se conectan de forma directa. A todos los efectos lógicos, dos puntos conectados por una red VPN son como si estuvieran uno al lado del otro. En el módulo de securización de redes entraremos más en detalle.

Para los dispositivos móviles, una de las opciones que más se usa es la de establecer una VPN entre el dispositivo móvil y la red de la empresa. El objetivo es que todas las comunicaciones de nuestro dispositivo móvil se hagan pasando por la red de la empresa.

A todos los efectos, nuestro dispositivo funcionará en ese momento como si estuviera conectado a una red WiFi de nuestro centro. Esto nos permite poder monitorear todo el tráfico de red de nuestro dispositivo, y a la vez, encriptar todo el tráfico de red entre nuestro dispositivo y nuestra organización.

Android permite la configuración de una VPN de forma sencilla, es importante también, comprobar que las peticiones de DNS se hagan a través de la VPN.

Estas son algunas de las implementaciones más importantes de seguridad, convirtiendo Android en un sistema relativamente seguro, pero también es importante concienciar a los usuarios, los cuales son los que acaban tomando las decisiones finales con su dispositivo. Debemos alertar sobre la instalación de aplicaciones de fuentes no confiables, el mantener todo el software actualizado y hacer una buena gestión de los permisos. La seguridad en Android acaba siendo un esfuerzo mutuo y continuo.

Retos y vulnerabilidades en Android

En la actualidad, Android es el sistema operativo de móviles más utilizado, en una proporción de 4 a 1 con su rival más inmediato que es iOs. Por tanto, a diferencia de lo que pasa con los PCs, los móviles están liderados por software libre, con una de las licencias que ofrecen más libertad (Apache 2.0): permite la copia, modificación, y redistribución con total libertad.

Más allá de las modas o tendencias, Android ha demostrado como un software libre puede liderar un mercado de masas como son los móviles, todo gracias a su licencia Open Source que le ha permitido:

  1. Hacer disponible del código fuente para favorecer la implantación de nuevas aplicaciones ya que los desarrolladores se aprovechan de la transparencia del mismo.
  2. Ha permitido la colaboración global de desarrolladores de todo el mundo, que a través de la colaboración y cooperación han podido mejorar el software.
  3. Toda esta colaboración ha propiciado una rápida innovación, a más a más, de mejorar la flexibilidad y adaptabilidad de Android, reduciendo a la vez los costes de producción.
  4. La visibilidad de código permite hacer evaluaciones y auditorias de seguridad para la búsqueda de vulnerabilidades.

Pero todas estas ventajas también conllevan riesgos, vulnerabilidades y retos por solucionar.

La fragmentación

Es quizá, uno de las mayores complicaciones de los sistema Android. Ya no es solo que fabricantes y operadores de red creen pequeñas modificaciones, si no que el propio funcionamiento de Android evita la actualización indiscriminada del propio SO como ocurre con iOS.

Actualmente, menos del 25% de nuevos dispositivos usan la última versión de Android.

Fragmentación Android octubre 2023
Fragmentación Android octubre 2023

Si entramos en más detalle, solo los modelos más avanzados ofrecen más de 3-4 años de soporte. Esto quiere decir que en la actualidad cualquier Android 10, o inferior, puede no estar dentro del plan de soporte, y por tanto, en caso de aparecer vulnerabilidades en el sistema no ofrecer un patch para solucionarlas. Esto significa alrededor de un 30% de los dispositivos móviles, a parte, que hace inseguro, de por si, el mercado de segunda mano de los móviles Android.

Si la fragmentación es un problema para las actualizaciones de seguridad, más aún lo es para los desarrolladores. Todas las versiones superiores de Android pueden, normalmente, ejecutar aplicaciones de versiones más antiguas, pero no al revés. Una aplicación creada para Android 13 solo será viable para un 22,1% de los dispositivos.

Esto hace que muchos desarrolladores no opten por crear aplicaciones usando las versiones más nuevas en Android, por tanto también, más susceptibles de vulnerabilidades, y a la vez, que no aprovechan el potencial de las nuevas versiones.

Diferencias de rendimiento

Si la fragmentación era un problema, también lo es los diferentes Hardware que trabajan con Android. Toda aplicación debe ser creada teniendo en cuenta unos recursos de rendimiento que pueden llegar a diferir mucho entre un dispositivo u otro. Es un proceso muy similar a lo que pasa con los PCs, con la diferencia que los usuarios están acostumbrados a comprobar los requisitos de sistema de una aplicación para PC, pero no lo están para una aplicación móvil. Además, buena parte del consumo de un móvil estará relacionado con archivos multimedia y un uso intenso de streamings que requieren de una buena cache, una buena interfaz gráfica y una buena CPU que sea capaz de levantar diversos servicios a la vez.

Play Store

El mercado de las aplicaciones en Google es una de las principales vulnerabilidades de seguridad.

  1. Market Places de terceros: Por defecto, Androii deshabilita la instalación de aplicaciones de tiendas alternativas a Play Store, pero fácilmente cualquier usuario puede habilitarlo. Además, nos podemos encontrar con aplicaciones potencialmente seguras, que no estén disponibles en la Play Store oficial como puede ser la aplicación de Lotería y apuestas del estado.
    https://www.loteriasyapuestas.es/es/appselae
    https://www.loteriasyapuestas.es/es/appselae
  2. Aplicaciones comprometidas: Una de las últimas tendencias que se ha detectado es la compra de aplicaciones (junto a su Market Place) con intenciones maliciosas. El objetivo de los atacantes es comprar de forma "legítima" una aplicación con su market place, de esta forma obtienen un canal de venta en Play Store predefinido como seguro por "Play Store" (Google, no tiene porqué saber que se ha vendido la cuenta de Play Store). Una vez han obtenido la nueva cuenta, son capaces de retocar las aplicaciones para hacerlas malignas y aprovechar un magnífico tiempo hasta que sean descubiertas por Google.

Las vulnerabilidades CVE

Como todo sistema, el Departamento de Comercio del Gobierno de los USA, mantiene un registro del conjunto de vulnerabilidades encontradas en el sistema. El nombre de vulnerabilidades de Android es alto, sobre todo en comparación con iOS. Aún así, todas las vulnerabilidades publicadas, son vulnerabilidades que tienen asociadas su patch, y por tanto, que han sido corregidas. Que no se encontraran vulnerabilidades anteriormente, no significa que no estuvieran allí.

Según el tipo de ataque que ha posibilitado el CVE, encontramos:

https://www.cvedetails.com/product/19997/Google-Android.html?vendor_id=1224
https://www.cvedetails.com/product/19997/Google-Android.html?vendor_id=1224

Apéndice

Recientemente hemos podido leer como diversos políticos fueron atacados por un programa llamado 'Pegasus' que permitía el acceso y control de los dispositivos móviles. Aunque toda la información aún no es publica, podemos sacar las siguientes conclusiones de una lectura entre líneas de la prensa:

  • Hay un mercado donde se comercia con vulnerabilidades de Android, o Iphone, que no han sido publicadas en CVEDetails (no tienen patch de seguridad).
  • Este mercado no tiene porqué ser exclusivo de los servicios de inteligencia.
  • Muchos afectados afirman que se infectaron por abrir un enlace que no debían con su dispositivo, por tanto, que la vulnerabilidad requiere de la intervención del usuario.
  • El usuario infectado es incapaz de comprobar si lo está, requiere de un especialista.