¿Cuál es realmente la función "sin raíces" en El Capitán?

Acabo de enterarme de la función "Rootless" en El Capitan, y escucho cosas como "No hay usuario root", "Nada puede modificar /System" y "El mundo se acabará porque no podemos rootear".

¿Cuál es la característica "Rootless" de El Capitán a nivel técnico? ¿Qué significa realmente para la experiencia del usuario y la experiencia del desarrollador? Seguirá sudo -sfuncionando y, de ser así, ¿cómo cambiará la experiencia de usar un shell root?

Respuestas (3)

Primero: el nombre "sin raíz" es engañoso, ya que todavía hay una cuenta raíz y aún puede acceder a ella (el nombre oficial, "Protección de integridad del sistema", es más preciso). Lo que realmente hace es limitar el poder de la cuenta raíz, de modo que incluso si se convierte en raíz, no tiene control total sobre el sistema. Esencialmente, la idea es que es demasiado fácil para el malware obtener acceso a la raíz (por ejemplo, presentando un cuadro de diálogo de autenticación al usuario, lo que hará que el usuario ingrese reflexivamente la contraseña de administrador). SIP agrega otra capa de protección, en la que el malware no puede penetrar incluso si se rootea. La parte mala de esto, por supuesto, es que también debe aplicarse a las cosas que estás haciendo intencionalmente. Pero las restricciones que impone a la raíz no son tan malas; no impiden la mayoría de los "normales"

Esto es lo que restringe, incluso desde la raíz:

  • No puede modificar nada en /System, /bin, /sbino /usr(excepto /usr/local); o cualquiera de las aplicaciones y utilidades integradas. Solo el instalador y la actualización de software pueden modificar estas áreas, e incluso solo lo hacen al instalar paquetes firmados por Apple. Pero dado que las personalizaciones de estilo OS X normales entran /Library(o ~/Library, o /Applications), y las personalizaciones de estilo Unix (por ejemplo, Homebrew) entran /usr/local(oa veces /etco /opt), esto no debería ser un gran problema. También evita escrituras a nivel de bloque en el disco de inicio, por lo que no puede omitirlo de esa manera.

    La lista completa de directorios restringidos (y excepciones como /usr/localy algunas otras) se encuentra en /System/Library/Sandbox/rootless.conf. Por supuesto, este archivo se encuentra en un área restringida.

    Cuando actualiza a El Capitan, mueve cualquier archivo "no autorizado" de áreas restringidas a /Library/SystemMigration/History/Migration-(some UUID)/QuarantineRoot/.

  • No puede conectarse a los procesos del sistema (por ejemplo, aquellos que se ejecutan desde esas ubicaciones del sistema) para cosas como la depuración (o cambiar las bibliotecas dinámicas que cargan, u otras cosas). Una vez más, no es un gran problema; los desarrolladores aún pueden depurar sus propios programas.

    Esto bloquea algunas cosas importantes, como inyectar código en las aplicaciones integradas de Apple (en particular, el Finder). También significa que dtracelas herramientas basadas en software para el monitoreo del sistema (p. ej opensnoop., ) no podrán monitorear e informar sobre muchos procesos del sistema.

  • No puede cargar extensiones de kernel (kexts) a menos que estén correctamente firmadas (es decir, por Apple o un desarrollador aprobado por Apple). Tenga en cuenta que esto reemplaza el antiguo sistema para hacer cumplir la firma kext (y las antiguas formas de omitirlo). Pero desde la versión 10.10.4, Apple ha tenido una forma de habilitar la compatibilidad con recortes para SSD de terceros , la razón principal para usar kexts sin firmar ha desaparecido.

  • A partir de Sierra (10.12), algunos ajustes de configuración de launchd no se pueden cambiar (por ejemplo, algunos demonios de lanzamiento no se pueden descargar).

  • A partir de Mojave (10.14), el acceso a la información personal de los usuarios (correo electrónico, contactos, etc.) está restringido a las aplicaciones que el usuario haya aprobado para acceder a esa información. Esto generalmente se considera una función separada (llamada Protección de información personal o TCC), pero se basa en SIP y al deshabilitar SIP también se deshabilita. Consulte: "¿Qué y cómo implementa macOS Mojave para restringir el acceso de las aplicaciones a los datos personales?"

  • A partir de Catalina (10.15), la protección de la mayoría de los archivos del sistema se fortalece almacenándolos en un volumen separado de solo lectura. Esto no es estrictamente parte de SIP y no se deshabilita al deshabilitar SIP. Consulte: presentación de la WWDC sobre "Novedades en los sistemas de archivos de Apple [Catalina]" y "¿Qué es /System/Volumes/Data?" .

  • A partir de Big Sur (11.x), el volumen del sistema de solo lectura ahora es un "Volumen del sistema sellado" (una instantánea montada en lugar de un volumen normal), por lo que realizar cambios en él es aún más complicado. Consulte: el artículo de Eclectic Light Company "Disposición del volumen de arranque de Big Sur" .

Si no desea estas restricciones, ya sea porque desea modificar su sistema más allá de lo que esto permite, o porque está desarrollando y depurando algo como kexts que no son prácticos bajo estas restricciones, puede desactivar SIP. Actualmente, esto requiere reiniciar en modo de recuperación y ejecutar el comando csrutil disable(y puede volver a habilitarlo de manera similar con csrutil enable).

La modificación del volumen del sistema en Catalina requiere deshabilitar SIP, luego montar el volumen con acceso de escritura (y luego se recomienda reiniciar y volver a encender SIP). En Big Sur, se requieren pasos adicionales para deshabilitar la autenticación del volumen del sistema antes de los cambios y luego crear una nueva instantánea .

También puede deshabilitar selectivamente partes de SIP. Por ejemplo, csrutil enable --without kextdeshabilitará la restricción de la extensión del kernel de SIP, pero dejará sus otras protecciones en su lugar.

Pero deténgase y piense antes de deshabilitar SIP, incluso de manera temporal o parcial: ¿realmente necesita deshabilitarlo o hay una mejor manera (compatible con SIP) de hacer lo que desea? ¿Realmente necesita modificar algo en /System/Libraryo /bino lo que sea, o podría ir en un lugar mejor como /Libraryo /usr/local/binetc? SIP puede "sentirse" restrictivo si no está acostumbrado, y hay algunas razones legítimas para deshabilitarlo, pero mucho de lo que impone es realmente una buena práctica de todos modos.

Para subrayar la importancia de dejar la mayor parte de SIP habilitado la mayor parte del tiempo posible, considere los eventos del 23 de septiembre de 2019. Google lanzó una actualización de Chrome que intentó reemplazar el enlace simbólico de /vara /private/var. En la mayoría de los sistemas, SIP bloqueó esto y no hubo efectos negativos. En los sistemas con SIP deshabilitado, macOS se rompió y no se pudo iniciar. La razón más común para deshabilitar SIP fue cargar extensiones de kernel no aprobadas (/incorrectamente firmadas) (específicamente controladores de video); si solo hubieran deshabilitado la restricción kext, no se habrían visto afectados. Consulte el hilo de soporte oficial de Google , una sesión de preguntas y respuestas para superusuarios y un artículo de Ars Technica .

Referencias y más información: presentación de WWDC sobre "Seguridad y sus aplicaciones" , una buena explicación de Eldad Eilam en quora.com , la revisión de Ars Technica de El Capitan , y un artículo de soporte de Apple sobre SIP , y una inmersión profunda de Rich Trouton ( quien también publicó una respuesta a esta pregunta ).

Genial gracias. Hice esta pregunta porque estaba a punto de vincular ese artículo de quora en otra pregunta de Stack Exchange y luego me di cuenta de que no era el movimiento correcto ;-)
... ¡También esto me da ganas de escribir kextalgo que me permita crear un binario que pueda ejecutar en la línea de comandos para volver al acceso sin restricciones!
si deshabilito SIP, ¿obtendré la raíz completa o sigo estando restringido a los directorios /sbin, /user, etc.? @GordonDavisson
@androidplusios.design Si deshabilita SIP, la raíz puede modificar archivos en cualquier parte del sistema de archivos.
Gran respuesta. Esta respuesta resolvió mis diversas preguntas varias veces después de actualizar a El Capitán.
¿Apple planea mantener csrutil disablela funcionalidad o hay planes para deshabilitarla en algún momento?
@Vladimir Lo siento, no tengo información privilegiada sobre los planes de Apple. Supongo que se mantendrá en el futuro previsible, aunque no me sorprendería si (y SIP en sí) cambiara significativamente en las próximas versiones.
La afirmación It also prevents block-level writes to the startup disknecesita corroboración. Tu publicación es lo único que puedo encontrar que dice esto.
@Melab Se menciona en la presentación de la WWDC (arreglé el enlace) a las 15:09, y en la diapositiva 34 ("Kernel detiene los procesos de... Escritura para bloquear dispositivos que respaldan contenido protegido").
Hay momentos en los que odio a Apple. Agradezco que sea difícil pegarse un tiro en el pie (hace años, una vez introduje accidentalmente un archivo de texto en mi MBR en Linux), pero hay momentos en los que necesita, por ejemplo, poner un enlace adicional en /usr/bin, y tener pasar por el proceso de deshabilitar una protección agradable solo para ese propósito es demasiado paternalista y molesto. Un diálogo adicional con advertencias hubiera sido suficiente.
Impresionante respuesta, especialmente en el punto que explica dónde buscar la lista completa de directorios restringidos y excepciones.
La forma menos intrusiva parece ser deshabilitar SIP, editar el archivo maestro para eliminar las restricciones solo en el par de binarios que realmente desea reemplazar y habilitar SIP nuevamente.
En particular, incluso si deshabilita con crutil, el sandboxing seguirá ejecutándose, lo que puede ser un problema para algunas personas.
Para actualizar este comentario. A partir de 11.0, en lugar de un volumen como en Catalina, tenemos una instantánea de volumen para los directorios del sistema protegido, por lo que el habitual "mount -uw /" que funcionaba en Catalina y antes con SIP deshabilitado ya no funciona en Big Sur.

Para mí, significa que DTrace ya no funciona.

DTrace es similar a ptrace/strace en Linux, ya que le permite ver lo que un proceso le dice al kernel. Cada vez que un proceso quiere abrir un archivo, escribir un archivo o abrir un puerto, etc., necesita preguntarle al kernel. En Linux, este proceso de monitoreo ocurre fuera del kernel en "userland" y, por lo tanto, los permisos son bastante detallados. Un usuario puede monitorear sus propias aplicaciones (para corregir errores, encontrar fugas de memoria, etc.), pero necesitaría ser root para monitorear el proceso de otro usuario.

Sin embargo, DTrace en OSX funciona a nivel de kernel, lo que lo hace mucho más eficaz y potente; sin embargo, requiere acceso de root para agregar sus sondas en el kernel y, por lo tanto, hacer cualquier cosa. Un usuario no puede rastrear sus propios procesos sin ser root, pero como root no solo puede ver sus propios procesos, sino TODOS los procesos en el sistema simultáneamente. Por ejemplo, puede ver un archivo (con iosnoop) y ver qué proceso lo lee. Esta es una de las características más útiles para detectar malware. Debido a que el núcleo también se ocupa de la E/S de la red, lo mismo es cierto allí. Wireshark detecta actividad de red inusual, DTrace le informa el proceso de envío de datos, incluso si está integrado en el sistema como el kernel mismo.

Sin embargo, a partir de El Capitan, Apple ha impedido deliberadamente que DTrace funcione, ya que ha sido específicamente apuntado y señalado como algo restringido por SIP. ¿Por qué harían esto? Bueno, anteriormente Apple modificó su kernel y DTrace para permitir que algunos procesos optaran por no ser monitoreados a través de DTrace (lo que molestó a muchos investigadores de seguridad en ese momento, ya que algunos procesos ahora estaban fuera de los límites, incluso como root, incluido el malware). La razón de esto fue proteger DRM en aplicaciones como iTunes, ya que, en teoría, alguien podría DTrace y obtener datos sin DRM de la memoria de los procesos.

Sin embargo, hubo una solución importante que permitió a los investigadores seguir haciendo su trabajo y fue modificar el kernel para ignorar este indicador de exclusión voluntaria, de modo que DTrace aún se pudiera usar en estos procesos. Esto fue realmente genial porque los programas que intentaban evadir la detección ahora se iluminaron con esta bandera sin DTrace. Todo lo que Apple o los malos querían ocultar ahora estaba a la vista...

Pero no funciona ahora, entonces, ¿cómo te afecta esto? Bueno, te afectará tanto directa como indirectamente. Directamente, limitará su capacidad para monitorear su sistema. Una gran cantidad de herramientas de supervisión y administración de sistemas de bajo nivel (sobre las que se basan las herramientas de nivel superior) ya no funcionarán. Sin embargo, el efecto indirecto será mucho mayor: los profesionales de la seguridad confían en el acceso profundo al sistema para detectar los peores tipos de amenazas. Simplemente no podemos hacer eso más. Al analizar el malware, es fundamental que no sepa que se está ejecutando en un depurador o en un señuelo. Deshabilitar SIP le dice a todo el software, tanto de los malos como de Apple, que este sistema está siendo vigilado. No más mirar a los observadores. Si SIP se tratara de seguridad, podrían haber educado a los usuarios sobre la raíz; en cambio, la eliminaron. En última instancia, esto significa que Apple ha reemplazado la barrera de seguridad de "ser todo y acabar con todo" de la contraseña raíz, con el mecanismo de protección SIP "ser todo y acabar con todo". O si eres bueno en ingeniería social, una contraseña de root con un reinicio...

También está esto:ingrese la descripción de la imagen aquí

Me pregunto por qué no deshabilita SIP si está interesado en DTracing de ciertos programas.
Ni siquiera puede verificar, por ejemplo, si el cifrado de disco está funcionando realmente en su máquina, ya que el kernel realiza el descifrado y ahora no hay forma de evitarlo . Entonces, por ejemplo, no puedo ejecutar dd if=/dev/disk0 count=2000 | strings? Esto parece contradecir la otra respuesta.
Además, he rechazado esta respuesta porque no responde a la pregunta, a saber: ¿Cuál es la característica "Rootless" de El Capitán a nivel técnico? ¿Sudo -s seguirá funcionando y, de ser así, cómo cambiará la experiencia de usar un shell como root? . Esta respuesta parece hablar solo de DTrace
Creo que la respuesta habla clara y precisamente de una buena parte de la pregunta, que es cómo cambiará la experiencia de usar un shell como root. Sudo ahora es pseudo sudo. De hecho, se ha añadido una capa de arquitectura. Me parece relevante. Y al sustento de este hombre. ¿Por qué rechazar eso?
Básicamente, usted y sus usuarios deben deshabilitar SIP, lo que dará como resultado el mismo nivel de protección que todos tenían con Mavericks y la capacidad de usar dtrace, etc. como antes. A menos que Apple decida eliminar la capacidad de desactivar SIP en versiones futuras, no veo por qué esto debería ser un problema. OTOH agrega una red de seguridad para el 99% de los usuarios.
¿Qué quieres que vea allí? ¿El sistema se comporta de forma extraña mientras se ejecuta en una configuración no compatible? :-)
@ sas08 No digo que esta respuesta no contenga información útil, solo que no responde la pregunta. Aborda solo una pequeña parte de la pregunta (falta de DTrace) y no describe qué es realmente SIP.
@JJ, ¿y /dev/rdisk0entonces? Me sorprendería si no hay ninguna /deventrada que proporcione acceso a un dispositivo real... Tendré que configurar una máquina virtual Mavericks e investigar esto. Publicaré una pregunta separada si lo hago.
@patrix No entiendo la distinción epistemológica. Lo que las cosas son y lo que hacen, y por qué existen están íntimamente relacionados. Seguro que esta publicación comienza en medias res hablando de una función, pero tiene un buen alcance. Preguntar "¿cómo cambia esto la experiencia del desarrollador?" etc. es, de hecho, una invitación abierta y subjetiva para que los desarrolladores hablen sobre sus experiencias. Plantear estas preguntas en yuxtaposición a una objeción vaga y exagerada "el mundo se acabará porque no podemos rootear" parece descartar la idea de daño; esto demuestra daño a la experiencia del desarrollador.
@josh arriba era @josh. Derp. No se puede arreglar... El sistema de "Protección de integridad de comentarios" de Stack me lo impide después de 5 minutos.
@sas08: la respuesta está incompleta porque aborda solo uno de los muchos efectos de SIP y, por lo tanto, no es útil. Si la respuesta respondió correctamente a la pregunta ¿Cuál es la característica "Rootless" de El Capitán a nivel técnico? entonces eliminaría mi voto negativo.
No voy a agregar más información, Josh, porque solo estaría copiando lo que han dicho las otras respuestas y realmente no agregaría nada a la página. Quizás sería mejor si la respuesta principal incluyera más información sobre DTrace que ya no funciona, y luego eliminaría esta respuesta como redundante :) La otra respuesta es solo una copia al carbón de arstechnica.com/apple/2015/09/ os-x-10-11-el-capitan-the-ars-technica-review/9/ vinculado en el comentario superior, por lo que también podría ir. Pero algunas cosas en esta respuesta, como que DTrace no funciona incluso con SIP desactivado como sudo, no está en ningún otro lugar de la red sino aquí.
Me topé con esto después de pasar demasiado tiempo tratando de entender por qué no podía usar dtrace para descubrir por qué Safari Networkingestá consumiendo una CPU completa. Abrió el blog de Brendan Gregg en dtrace.org y no pudo entender todos los mensajes de error de permisos. ¿Hay alguna manera fácil de desactivarlo temporalmente? Puedo deshabilitar SELinux temporalmente en Linux, ¿puedo hacerlo aquí?
Lo único que he descubierto hasta ahora es que si deshabilita SIP para DTrace, puede conectarse a procesos que no tienen derechos restrictivos, que dado que El Cap es todo lo que viene con el sistema (como Safari). Hay una forma "tonta", que es copiar todos los archivos binarios del sistema a un nuevo directorio como /rootless (con la misma estructura de directorios), luego hacer un chroot para /rootless. Ahora todo se ejecuta sin derechos y también se puede adjuntar. La forma más inteligente es volver a montar su sistema de archivos, pero tengo miedo de decir cómo/por qué porque Apple sin duda bloqueará esa laguna...
Lo curioso de DRM es que he estado pensando en PT_DENY_ATTACH y en cómo se puede eliminar recompilando xnu durante años.
Oh, bueno, parece que arreglaron el error de "montura malvada" al que aludí anteriormente. Afortunadamente, el juego del "gato y cientos de ratones" probablemente continuará durante algún tiempo: theregister.co.uk/2016/03/30/apple_os_x_rootless
@josh, siempre puede deshabilitar sip para volver a donde estaba antes de que se implementara sip.
De hecho, dtrace está bien, solo que /bin/echo está protegido. Como solución alternativa, puede cp /bin/echo /tmp/echohacer sudo dtruss /tmp/echo hello.

La Protección de integridad del sistema (SIP) es una política de seguridad general con el objetivo de evitar que terceros modifiquen los archivos y procesos del sistema. Para lograrlo, cuenta con los siguientes conceptos:

  • Protección del sistema de archivos
  • Protección de extensión de kernel
  • Protección en tiempo de ejecución

Protección del sistema de archivos

SIP evita que otras partes que no sean Apple agreguen, eliminen o modifiquen directorios y archivos almacenados en ciertos directorios:

/bin
/sbin
/usr
/System

Apple ha indicado que los siguientes directorios están disponibles para que los desarrolladores accedan:

/usr/local
/Applications
/Library
~/Library

Todos los directorios /usrexcepto /usr/localestán protegidos por SIP.

Es posible agregar, eliminar o cambiar archivos y directorios protegidos por SIP a través de un paquete de instalación que está firmado por la propia autoridad de certificación de Apple. Esto permite a Apple realizar cambios en las partes del sistema operativo protegidas por SIP sin necesidad de cambiar las protecciones SIP existentes.

La autoridad de certificación en cuestión está reservada por Apple para su propio uso; Los paquetes de instalación firmados por ID de desarrollador no pueden modificar los archivos o directorios protegidos por SIP.

Para definir qué directorios están protegidos, Apple ha definido actualmente dos archivos de configuración en el sistema de archivos. El principal se encuentra en la siguiente ubicación:

/System/Library/Sandbox/rootless.conf

donde rootless.confenumera todas las aplicaciones y el nivel superior de directorios que protege SIP.

ingrese la descripción de la imagen aquí

Aplicaciones

SIP protege las aplicaciones principales que OS X instala en Aplicaciones y Utilidades de aplicaciones. Esto significa que ya no será posible eliminar las aplicaciones que instala OS X, incluso desde la línea de comandos cuando se usan privilegios de root.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

directorios

SIP también protege una serie de directorios y enlaces simbólicos fuera de /Applicationsy el nivel superior de esos directorios también se enumeran en rootless.conf.

ingrese la descripción de la imagen aquí

Además de las protecciones, Apple también ha definido algunas excepciones a la protección de SIP en el archivo rootless.conf, y esas excepciones están marcadas con asteriscos. Estas exenciones de la protección de SIP significan que es posible agregar, quitar o cambiar archivos y directorios dentro de esas ubicaciones.

ingrese la descripción de la imagen aquí

Entre esas excepciones se encuentran las siguientes:

  • /System/Library/User Template- donde OS X almacena los directorios de plantillas que usa al crear carpetas de inicio para cuentas nuevas.
  • /usr/libexec/cups- donde OS X almacena la información de configuración de la impresora

Apple considera que este archivo es suyo y que Apple sobrescribirá cualquier cambio realizado por terceros.

Para ver qué archivos han sido protegidos por SIP, use el lscomando con guión O mayúscula en la Terminal:

ls -O

Los archivos protegidos por SIP se etiquetarán como restringidos .

ingrese la descripción de la imagen aquí

Una cosa importante que debe saber es que incluso si un enlace simbólico está protegido por SIP, eso no significa necesariamente que el directorio al que se vincula esté protegido por SIP. En el nivel raíz de una unidad de arranque de OS X El Capitan, hay varios enlaces simbólicos protegidos por SIP que apuntan a directorios almacenados dentro del directorio de nivel raíz llamado private.

Sin embargo, cuando privatese examina el contenido del directorio, los directorios a los que apuntan esos enlaces simbólicos no están protegidos por SIP y tanto ellos como su contenido pueden moverse, editarse o cambiarse mediante procesos que utilizan privilegios de raíz.

ingrese la descripción de la imagen aquí

Además de la lista de excepciones SIP que Apple ha establecido en rootless.conf, existe una segunda lista de excepciones SIP. Esta lista incluye varios directorios y nombres de aplicaciones para productos de terceros. Al igual que rootless.conf, esta lista de exclusión es de Apple y Apple sobrescribirá cualquier cambio que realicen terceros.

/System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths

Protección en tiempo de ejecución

Las protecciones de SIP no se limitan a proteger el sistema de cambios en el sistema de archivos. También hay llamadas al sistema que ahora están restringidas en su funcionalidad.

  • task_for_pid()/processor_set_tasks() fallan con EPERM
  • Los puertos especiales de Mach se restablecen en exec (2)
  • las variables de entorno dyld se ignoran
  • Las sondas DTrace no están disponibles

Sin embargo, SIP no bloquea la inspección por parte del desarrollador de sus propias aplicaciones mientras se desarrollan. Las herramientas de Xcode seguirán permitiendo que las aplicaciones se inspeccionen y depuren durante el proceso de desarrollo.

Para obtener más detalles sobre esto, recomiendo echar un vistazo a la documentación para desarrolladores de Apple para SIP .

Protección de extensión de kernel

SIP bloquea la instalación de extensiones de kernel no firmadas. Para instalar una extensión de kernel en OS X El Capitan con SIP habilitado, una extensión de kernel debe:

  1. Estar firmado con una ID de desarrollador para firmar el certificado de Kexts
  2. Instalar en /Biblioteca/Extensiones

Si instala una extensión de kernel sin firmar, primero deberá deshabilitar SIP.

Para obtener más información sobre la gestión de SIP, consulte el siguiente enlace:

Protección de integridad del sistema: agregando otra capa al modelo de seguridad de Apple

Sería genial poder reemplazar las capturas de pantalla con texto sin formato, consulte: Desaliente capturas de pantalla de código y/o errores .