Seguridad del proceso de ejecución en iOS y iPadOS
iOS y iPadOS ayudan a garantizar la seguridad en tiempo de ejecución mediante una “zona protegida”, autorizaciones declaradas y la aleatorización del espacio de direcciones (ASLR).
Aislamiento
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 está diseñado para 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, utiliza únicamente los servicios que iOS y iPadOS proporcionan de forma explícita.
Los archivos y recursos del sistema también están protegidos de las apps del usuario. La mayoría de los recursos y archivos del sistema de iOS y iPadOS se ejecutan como el usuario sin privilegios “mobile”, igual que todas las apps de terceros. Toda la partición del sistema operativo se instala como de solo lectura. Las herramientas innecesarias, 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 autorizaciones
El acceso de apps de terceros a información del usuario y a 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 app del sistema en peligro transfiera sus privilegios.
Además, las apps solo pueden realizar procesos en segundo plano a través de las API proporcionadas por el sistema. De esta manera, las apps siguen funcionando sin que su rendimiento o la duración de la batería se vean mermados.
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 los fallos por corrupción de memoria. Al abrirse, las apps integradas utilizan la ASLR para ayudar a aleatorizar todas las regiones de la memoria. Además de funcionar al abrirse, la ASLR ordena aleatoriamente las direcciones de memoria de código ejecutable, las bibliotecas del sistema y las estructuras de programación relacionadas, reduciendo aún más la probabilidad de que tengan lugar muchos ataques. Por ejemplo, en el caso de un ataque “return‑to‑libc” en el que 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, 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 o iPadOS compilan automáticamente programas de terceros que tengan activada la compatibilidad con la ASLR.
La 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. Solo 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, solo se puede realizar una única llamada mmap
para solicitar una página ejecutable y grabable, a la que se proporciona una dirección aleatorizada. Safari utiliza esta funcionalidad para su compilador en tiempo de ejecución (JIT) de JavaScript.