Seguridad del proceso de ejecución en iOS y iPadOS
iOS y iPadOS ayudan a garantizar la seguridad de la ejecución mediante el uso de una zona protegida, autorizaciones declaradas y la aleatorización del espacio de direcciones (ASLR).
Zona protegida
Todas las apps de terceros se “aíslan” para impedir que accedan a los archivos almacenados por otras apps o que realicen cambios en el dispositivo. El aislamiento en zona protegida ayuda a evitar que las apps recopilen o modifiquen la información almacenada por otras apps. Cada una tiene un directorio de inicio único para sus archivos, que se asigna de forma aleatoria al instalarla. Si una app de terceros necesita acceder a información ajena, lo hace únicamente mediante los servicios que iOS y iPadOS proporcionan de forma explícita.
Los archivos y recursos del sistema también están blindados contra las apps del usuario. La mayoría de los archivos y recursos del sistema de iOS y iPadOS se ejecuta como “plataformas móviles” de un usuario sin privilegios, igual que todas las apps de terceros. Toda la partición del sistema operativo se instala como de sólo lectura. Las herramientas que no son necesarias, como los servicios de inicio de sesión remoto, no se incluyen en el software del sistema y las API no permiten que las apps transfieran sus privilegios para modificar otras apps o iOS y iPadOS.
Uso de las autorizaciones
El acceso de apps de terceros a información del usuario y funciones como iCloud, así como su extensibilidad, se controla mediante autorizaciones declaradas. Las autorizaciones son pares de clave‑valor que se utilizan para acceder a una app y permiten la autenticación más allá de los factores en tiempo de ejecución, como un ID de usuario UNIX. Las autorizaciones llevan una firma digital, por lo que no se pueden modificar. Los daemons y las apps del sistema las utilizan mucho para realizar operaciones con privilegios específicos que, de otro modo, requerirían la ejecución del proceso como root. Esto reduce considerablemente la posibilidad de que un daemon o una app del sistema en peligro transfiera privilegios.
Además, las apps sólo pueden realizar procesos en segundo plano a través de las API proporcionadas por el sistema. Esto permite que las apps sigan funcionando sin que su rendimiento o la duración de la batería se vean afectados.
Aleatorización del espacio de direcciones
La aleatorización del espacio de direcciones (ASLR) ayuda a proteger el sistema frente a los ataques que aprovechan la vulnerabilidad de una memoria dañada. Al abrirse, las apps integradas utilizan la ASLR para ayudar a aleatorizar todas las regiones de la memoria. Además de funcionar después del lanzamiento, la ASLR ordena de forma aleatoria las direcciones de memoria de código ejecutable, las bibliotecas del sistema y las estructuras de programación relacionadas para reducir aún más la probabilidad de que haya muchas vulnerabilidades. Por ejemplo, en un ataque “return‑to‑libc” se intenta engañar a un dispositivo para que ejecute código malicioso mediante la manipulación de las direcciones de memoria de la pila y las bibliotecas del sistema, pero la aleatorización en su colocación dificulta la ejecución del ataque, especialmente en varios dispositivos. Xcode y los entornos de desarrollo de iOS y iPadOS compilan automáticamente programas de terceros que tengan activada la compatibilidad con la ASLR.
Función Execute Never
iOS y iPadOS aumentan el nivel de protección con la función Execute Never (XN) de ARM, que marca las páginas de memoria como no ejecutables. Sólo las apps en condiciones muy controladas pueden utilizar las páginas de memoria marcadas como grabables y ejecutables: el kernel comprueba la presencia de la autorización de firma de código dinámica exclusiva de Apple. Incluso entonces, sólo se puede realizar una llamada mmap
para solicitar una página ejecutable y grabable, a la que se le proporciona una dirección aleatorizada. Safari utiliza esta funcionalidad para su compilador en tiempo de ejecución (JIT) de JavaScript.