Inicio / Blog / Modelo de seguridad OS X (II): SIP

Modelo de seguridad OS X (II): SIP

Publicado el 18/02/2016, por Antonio López (INCIBE)
OS X (II)

En el artículo: Modelo de seguridad de OS X (I), se introducen las principales características de seguridad del sistema operativo acumuladas hasta Yosemite (OS X 10.10). Con la última versión lanzada en septiembre de 2015 aparece una interesante novedad en el sistema relacionada con la seguridad.

System Integrity Protection (SIP)

Desde OS X 10.11 (El Capitan), Apple da una vuelta de tuerca más en las medidas de seguridad, al implementar la tecnología System Integrity Protection (SIP) también conocida como rootless, un mecanismo que impide la manipulación de ciertos ficheros o rutas del sistema, incluso cuando se actúa con privilegios de root.

Con la incorporación de la tecnología rootless en OS X se pretende proteger los ficheros y/o procesos y evitar, en la medida de lo posible, acciones que modifiquen recursos y/o servicios críticos para el funcionamiento del sistema. De esta forma por ejemplo se impediría que la explotación de una vulnerabilidad que finalizase con una elevación de privilegios, pudiese llegar a comprometer totalmente el sistema.

Entonces… ¿se está limitando el acceso total al sistema incluso al usuario root legítimo? Pues en realidad, sí. Al menos si no se desactiva esta funcionalidad.

Rootless

- Rootless... ¿Será necesario un jailbreak en el futuro para Mac?. xkcd.com -

La tecnología SIP se posiciona en el nivel de permisos POSIX de modo que en un sistema en ejecución no pueda modificarse el comportamiento, siendo necesaria la desactivación desde el modo de recuperación del OS, en el arranque del ordenador, para poder manipular los recursos protegidos con SIP.

Modelo de seguridad en capas de OS X

- Modelo de seguridad en capas de OS X -

SIP en acción

La protección de System Integrity Protection se enfoca en tres factores principales: la protección del sistema de ficheros, la protección de procesos en ejecución y la protección de extensiones del kernel.

Protección del sistema de ficheros

En general, SIP evita que se añada, modifique o se borre cualquier contenido en las siguientes ubicaciones:

 

  • /bin
  • /sbin
  • /usr (excepto /usr/local, que está permitido)
  • /System

Cualquier intento de modificar cualquiera de esos recursos será denegado, notificándose un error de "Operación no permitida". Podemos conocer de forma rápida y sencilla si un fichero está protegido por SIP utilizando el comando ls. Para ello especificamos el parámetro "-O" ( ls -O) y en caso de tratarse de un recurso protegido se mostrará el atributo "restricted":

SIP impide modificar /bin

-SIP impide modificar /bin. Obsérvese la propiedad "restricted" con ls -lO -

Fichero rootless

SIP mantiene en un fichero de configuración (rootless.conf) el listado con las localizaciones protegidas, así como las excepciones permitidas, marcadas con "*". En ese fichero comprobamos como, por ejemplo, se protegen aplicaciones que el sistema instala por defecto (nativas de OSX), y se permiten algunas excepciones bajo rutas restringidas como /System, /Library o librerías (dydl). Cualquier ruta que no se encuentre en este fichero como protegida o como excepción, en principio queda fuera del alcance de SIP.

Fichero rootless.conf

- Fichero rootless.conf -

SIP está configurado para mantener una estructura del sistema de ficheros que permita la instalación de aplicaciones y una gestión adecuada de las mismas. Permite acceso a las rutas:

  • /usr/local
  • /Applications
  • /Library
  • ~/Library

Las actualizaciones del sistema o cualquier otra operación que conlleve la modificación de rutas restringidas, únicamente podrá realizarse con software que se encuentre firmado digitalmente por Apple.

Archivos protegidos por SIP

- Archivos protegidos por SIP. Obsérvese el atributo "restricted" -

Excepciones y compatibilidad

Para solucionar posibles problemas de compatibilidad de aplicaciones previamente instaladas a la actualización de El Capitan, SIP establece un mecanismo de migración de ficheros en conflicto a localizaciones bajo la ruta /Library/SystemMigration/History/Migration-<UUID>/QuarantineRoot/

También se establecen otras excepciones de compatibilidad para software de terceras partes reflejadas en el fichero: /System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths

Protección de procesos en ejecución

Desde OSX 10.11, cuando un proceso es arrancado, el kernel comprueba si el ejecutable principal está protegido por SIP, en cuyo caso impedirá al usuario interferir en su ejecución como, por ejemplo, analizándolo con un depurador (debugger):

La protección SIP

- La protección SIP evita que el proceso Finder sea añadido a un depurador -

Igualmente SIP incrementa la protección ante ataques por la inyección de librerías al purgar variables de entorno en las llamadas a funciones, lo que invalida por ejemplo DYLD_LIBRARY_PATH o DYLD_INSERT_LIBRARIES. Esta medida, unida a la protección contra la depuración de binarios, añade capas de protección frente a la explotación de ataques contra procesos del sistema.

Protección de extensiones del kernel

El sistema operativo OS X permite el uso de funcionalidades adicionales (kexts) que pueden ser cargadas como extensiones del kernel, e integrarse en el funcionamiento del mismo durante la ejecución. Desde OSX 10.10 Yosemite es obligatorio poseer una firma con ID de Developer reconocido para el desarrollo de kexts y con ello poder cargar extensiones del kernel en el sistema operativo. No obstante en Yosemite, y mediante un parámetro de arranque del sistema, podría desactivarse esta comprobación de extensiones de kernel y saltarse esta restricción.

Sin embargo, esta medida no tiene efecto en El Capitan, y la única forma de permitir extensiones kext sin firma adecuada, es la desactivación total de SIP desde el modo recuperación del ordenador.

Yosemite

- Yosemite: desactivando de comprobación kext. No es válido en El Capitan -

Retorno al pasado: activación/desactivación de SIP

El comando csrutil es el encargado de activar o activar SIP, y cuenta con las opciones de limpiar la configuración (clean), activar, desactivar (enable, disable), comprobar el estado (status) y las opciones para arranque por red (netboot):

Utilidad csrutil para administración SIP

- Utilidad csrutil para administración SIP. Solo permite cambios ejecutada en modo recuperación -

Para modificar el estado es obligatorio arrancar en modo recovery (R) y ejecutar csrutil disable en una terminal, como se muestra en la siguiente ilustración:

Desactivando SIP OS X

Desactivando SIP

- Desactivando SIP con la utilidad csrutil desde el modo de recuperación -

Puede que SIP represente un quebradero de cabeza para personas que prefieren tener un control absoluto sobre el sistema operativo. En ese caso la solución pasa por desactivar SIP, lo que supone eliminar todas las restricciones que este mecanismo impone al usuario root del sistema.

¿Es recomendable? ¿Es absolutamente necesario? Seguramente, no. Pero la libertad de ser amo y señor del sistema es un privilegio al que cuesta renunciar y que conlleva unas premisas que sudo y otras elevaciones de permisos nos tratan de recordar:

  1. Respect the privacy of others. (Respeta la privacidad de otros)
  2. Think before you type. (Piensa antes de escribir)
  3. With great power comes great responsibility. (Un gran poder supone una gran responsabilidad)