5 votos

Modificar el SIP en el sistema de arranque normal

Tengo un MacBook Pro (2017) con MacOS High Sierra (10.13.6). Tengo desactivado el SIP y el amfi. Quiero habilitar una parte / la mayoría de SIP (por ejemplo. csrutil enable --without fs ) sin tener que reiniciar en la partición de recuperación y ejecutar el csrutil comando allí.

He intentado modificar la variable nvram csr-active-config utilizando nvram csr-active-config="w%01%00%00" , pero devuelve un error: nvram: Error setting variable - 'csr-active-config': (iokit/common) general error . La modificación del nombre de la variable ha dado un resultado satisfactorio:

# nvram ccsr-active-config="w%01%00%00"
# nvram ccsr-active-config
ccsr-active-config  w%01%00%00

Lo que indica que todavía hay algo que protege la configuración SIP incluso cuando SIP está completamente desactivado:

# csrutil status
System Integrity Protection status: disabled.

Tenga en cuenta que puedo cambiar boot-args variable con nvram porque he desactivado el SIP:

# nvram boot-args="amfi_get_out_of_my_way=0x1"
# nvram boot-args
boot-args   amfi_get_out_of_my_way=0x1

Sólo hay un mensaje de registro relevante mientras se configura la nvram SIP:

ERROR 09:47:22.096544 +0800 kernel  Sandbox: nvram(92857) System Policy: deny(1) nvram-set csr-active-config

¿Es posible cambiar la configuración del SIP para que sea más estricto (no menos estricto) el arranque en el SO de recuperación?

Preferiblemente, la solución puede aplicar la configuración SIP tan pronto como se cambie. Lo siguiente se registra en la consola cuando lo hago chmod -x /bin/ls me hacen pensar que es posible:

INFO    11:07:38.852242 +0800   sandboxd    Symbolicator for chmod[94599] is NULL.
ERROR   11:07:38.862934 +0800   sandboxd    Failed to produce a full report for: chmod[94599].
ERROR   11:07:38.863015 +0800   sandboxd    Sandbox: chmod(94599) System Policy: allow file-write-mode /bin/ls

0 votos

Cualquier cambio que realice requerirá un reinicio para que el cambio surta efecto. Entonces, ¿no significaría esto que la respuesta a su pregunta sería no?

0 votos

@DavidAnderson ¿Tal vez? Sigo pensando que tal vez es posible cambiar el SIP mientras se ejecuta el sistema mediante la carga de un kext que hace algún exploit (por supuesto, en sí necesita SIP para ser desactivado para que funcione en primer lugar, por lo que no es una preocupación de seguridad)?

8voto

David Anderson Puntos 2189

Su Mac puede ser configurado para que pueda habilitar una parte / la mayoría de SIP sin tener que reiniciar en la partición de recuperación y ejecutar el csrutil comando allí. Sin embargo, seguirá siendo necesario reiniciar MacOS para que los cambios surtan efecto. Esta respuesta propone una de estas configuraciones para su uso con Macs Intel. Aunque, la adaptación para el uso con Macs de Silicio de Apple parece teóricamente posible.

El comando csrutil establece la variable NVRAM del firmware csr-active-config . El sistema operativo MacOS lee esta variable de 32 bits enteros al inicio para determinar qué partes de SIP debe habilitar. En lugar de utilizar la variable csrutil esta respuesta utiliza un bash script llamado mkcsrfile para crear un csr.bin que contiene el valor deseado para el csr-active-config variable. El formato de este archivo se define en esta respuesta . En lugar de arrancar con MacOS por defecto, esta respuesta cambia el valor por defecto para arrancar un Shell UEFI en su lugar. Este shell ejecuta un script almacenado en el archivo startup.nsh . Este script primero copia el csr-active-config valor del csr.bin a la NVRAM, y luego arranca MacOS.

Los bits del csr-active-config se definen en el csr.h archivo. Una versión de este archivo puede encontrarse en opensource.apple.com . Este hilo de developer.apple.com define algunos aspectos adicionales csrutil argumentos para el enable de mando. La relación entre estos bits y la selección csrutil Los comandos y argumentos se resumen en la siguiente tabla para la versión 10.13.6 de MacOS High Sierra.

Nota: La siguiente tabla puede variar entre versiones de MacOS (OS X). Por ejemplo, la tabla para Big Sur y Monterey puede encontrarse en esta respuesta .

csrutil
comandos
con
opcional
argumentos

csr-
activo-
config

CSR_
PERMITE_
SIN CONFIAR_
KEXTS
\=0x001

CSR_
PERMITE_
SIN RESTRICCIÓN_
FS
\=0x002

CSR_
PERMITE_
TASK_
PARA_
PID
\=0x004

CSR_
PERMITE_
KERNEL_
DEBUGGER
\=0x008

CSR_
PERMITE_
APPLE_
INTERNO
\=0x010

CSR_
PERMITE_
SIN RESTRICCIÓN_
DTRACE
\=0x020

CSR_
PERMITE_
SIN RESTRICCIÓN_
NVRAM
\=0x040

CSR_
PERMITE_
DISPOSITIVO_
CONFIGURACIÓN
\=0x080

CSR_
PERMITE_
CUALQUIER_
RECUPERACIÓN_
OS
\=0x100

CSR_
PERMITE_
NO APROBADO_
KEXTS
\=0x200

CSR_
PERMITE_
EJECUTABLE_
POLÍTICA_
OVERRIDE
\=0x400

activar

0x00000010

habilitar nointernas

0x00000000

habilitar sin
kext

0x00000011

habilitar sin
fs

0x00000012

habilitar sin
depurar

0x00000014

habilitar sin
dtrace

0x00000030

habilitar sin
nvram

0x00000050

desactivar

0x00000077

Ejemplos de uso

Una vez configurado el Mac, el mkcsrfile se puede utilizar desde MacOS. A continuación se ofrecen algunos ejemplos.

  • Habilitar excepto para fs e interno.

    El csr-active-config es necesario establecer la variable 0x00000012 , que puede ser uno de MacOS Recovery utilizando el comando que se muestra a continuación.

     csrutil enable --without fs

    Esta respuesta ofrece el siguiente comando, que puede ser introducido desde MacOS, como un posible reemplazo del comando anterior.

     mkcsrfile 0x12
  • Habilitar excepto para fs, debug, dtrace e internal.

    El csr-active-config es necesario establecer la variable 0x00000036 , lo que se puede hacer desde MacOS Recovery utilizando el comando que se muestra a continuación.

     csrutil enable --without fs --without debug --without dtrace

    Cualquiera de los siguientes comandos, que pueden ser introducidos desde MacOS, podría ser utilizado para reemplazar el comando anterior. El primer comando que se muestra a continuación tiene tres argumentos que serán unidos en forma de OR por el comando mkcsrfile script.

     mkcsrfile 0x12 0x14 0x30

    En su lugar, se puede utilizar un único argumento, en el que se introducen explícitamente las operaciones OR a nivel de bits. Esto se muestra en el siguiente comando.

     mkcsrfile "0x12|0x14|0x30"

    Por último, puede realizar usted mismo las operaciones OR a nivel de bits y limitarse a introducir el resultado, como se muestra a continuación.

     mkcsrfile 0x36
  • Habilitar excepto para fs, debug y dtrace.

    El csr-active-config es necesario establecer la variable 0x00000026 , lo que se puede hacer desde MacOS Recovery utilizando el comando que se muestra a continuación.

    Nota: El --no-internal establece la opción CSR_ALLOW_APPLE_INTERNAL ( 0x10 ) a cero.

     csrutil enable --no-internal --without fs --without debug --without dtrace

    Cualquiera de los siguientes comandos, que pueden ser introducidos desde MacOS, podrían ser utilizados para reemplazar el comando anterior. El primer comando que se muestra a continuación tiene tres argumentos que serán unidos en forma de OR por el comando mkcsrfile script. Aquí, cada argumento tiene el CSR_ALLOW_APPLE_INTERNAL ( 0x10 ) a cero,

     mkcsrfile 2 4 0x20

    En su lugar, se puede utilizar un único argumento, en el que se introducen explícitamente las operaciones a nivel de bits. Esto se muestra en el comando siguiente.

     mkcsrfile "~10&(0x12|0x14|0x30)"

    Por último, puede realizar usted mismo las operaciones a nivel de bits y limitarse a introducir el resultado, como se muestra a continuación.

     mkcsrfile 0x26

Pasos para configurar un Mac Intel

  1. Descargue una UEFI Shell v1.

    La sección del sitio web de la wiki de Arch Linux Obtención de UEFI Shell proporciona un enlace a Binarios precompilados de UEFI Shell v1 de TianoCore. Como tienes un Mac basado en Intel, tendrás que descargar el Versión X64 de la Shell_Full.efi a su archivo Downloads carpeta.

    Nota: Si algún usuario puede confirmar que el Versión del brazo funciona en un Mac con silicio de Apple, entonces publica un comentario para que esta respuesta pueda ser actualizada.

  2. Instale los archivos binarios de UEFI Shell y de arranque script en la partición EFI.

    Cree un archivo que contenga el shell UEFI script que se muestra a continuación. Guarde como startup.nsh en su Downloads carpeta.

    @echo -off
    set -v uuid E43602C1-8CFF-4F74-AEC7-98E645C7BBEE
    set -v file csr.bin
    if "%StartupDelay%" == "" then
        set StartupDelay 0
    endif
    set -v found nothing
    for %a in "" 1 2 3 4 5 6
      for %b in 0 1 2 3 4 5 6 7 8 9 a b c d e f
        if not %found% == boot then
          if exist fs%a%b:\%uuid%\System\Library\CoreServices\boot.efi then
            alias -v macos fs%a%b:\%uuid%\System\Library\CoreServices\boot.efi
            if %found% == startup then
              goto BREAK
            endif
            set -v found boot
          endif
        endif
        if not %found% == startup then
          if exist fs%a%b:\EFI\BOOT\startup.nsh then
            fs%a%b:
            cd \EFI\BOOT
            if exist %file% then
              dmpstore -l %file%
              rm %file%
            endif
            if %found% == boot then
              goto BREAK
            endif
            set -v found startup
          endif
        endif
      endfor
    endfor
    alias -v macos "echo ^"Missing macOS^""
    :BREAK
    macos
    ver
    ver -s

    A continuación, deberá sustituir el UUID de E43602C1-8CFF-4F74-AEC7-98E645C7BBEE en el startup.nsh con el UUID del volumen que se muestra en la salida del comando siguiente.

    diskutil info / | grep "Volume UUID"

    Por último, introduzca los siguientes comandos para instalar los archivos shell y script en la partición EFI. Si la partición EFI deseada no es disk0s1 y luego hacer las sustituciones correspondientes.

    cd ~/Downloads
    sudo diskutil mount disk0s1
    mkdir -p /Volumes/EFI/EFI/BOOT
    bless --folder /Volumes/EFI/EFI/BOOT --label "UEFI Shell"
    mv Shell_Full.efi /Volumes/EFI/EFI/BOOT/bootx64.efi
    mv startup.nsh /Volumes/EFI/EFI/BOOT/.
    dot_clean -m /Volumes/EFI/EFI/BOOT
    diskutil unmount disk0s1
  3. Instalar mkcsrfile como un bash script.

    Crea un archivo que contenga el bash script que se muestra a continuación. Guarde como mkcsrfile en su Downloads carpeta,

    #!/bin/bash
    if [[ $0 != "$BASH_SOURCE" ]]; then
        bash "$BASH_SOURCE" "$@"
    fi
    trap exit ERR
    main() {
      local "file=/Volumes/EFI/EFI/BOOT/csr.bin"
      local "unmount=no" "value=0" operand data
      if [[ ! -e /Volumes/EFI ]]; then 
        sudo diskutil mount disk0s1
        unmount="yes"
      fi
      for operand in "$@"; do
        value="$((value|($operand)))"
      done
      printf -v value "%08X" "$value"
      echo "Setting to 0x$value"
      data="240000006300730072002d006100630074006900760065002d0063006f00"
      data+="6e0066006900670000001061437c2aabbb4ba880fe41995c9f8207000000"
      data+="04000000${value:6}${value:4:2}${value:2:2}${value::2}"
      xxd -r -p - "$file" <<<"$data"
      if [[ $unmount == yes ]]; then
        sleep 0.1
        diskutil unmount disk0s1
      fi
    }
    main "$@"

    A continuación, si la partición EFI deseada no es disk0s1 , entonces sustituye las dos ocurrencias del disk0s1 identificador en el mkcsrfile con el identificador de partición EFI deseado.

    Por último, introduzca los siguientes comandos para instalar el mkcsrfile al archivo /usr/local/bin carpeta.

    cd ~/Downloads
    chmod 755 mkcsrfile
    sudo chown root:wheel mkcsrfile
    sudo mkdir -p /usr/local/bin
    sudo mv mkcsrfile /usr/local/bin/.
    sudo xattr -c /usr/local/bin/mkcsrfile
  4. Cambia el valor por defecto para arrancar desde el shell UEFI.

    Reinicie el Mac y mantenga inmediatamente pulsada la tecla option hasta que aparezcan los iconos del Gestor de Inicio del Mac. A continuación, mantenga pulsada la tecla control mientras selecciona arrancar desde el "UEFI Shell".

    Nota: La primera vez que arranque desde la UEFI Shell habrá un retraso en el arranque. No debería haber ningún retraso en los siguientes arranques.

0 votos

Acabo de darme cuenta de que, como ya he instalado rEFInd, puedo cambiar entre los diferentes valores de SIP que están definidos en el archivo de configuración. No encuentro más valores que tengan una correspondencia explicada, así que ¡muchas gracias por tu tabla!

0 votos

Pero tengo una pregunta: si quiero deshabilitar combinaciones de cosas, como no fs, no debug y no dtrace, ¿cómo puedo saber qué valor usar?

1 votos

He añadido más ejemplos. Publica un comentario, si todavía tienes preguntas.

0voto

David Anderson Puntos 2189

Cuando el csr-active-config no está definida, entonces el SIP está activado al arrancar MacOS. Puede eliminar la variable mientras arranca MacOS introduciendo el comando que se indica a continuación.

sudo csrutil clear

Si el comando tiene éxito, aparecerá el siguiente mensaje.

Successfully cleared System Integrity Protection. Please restart the machine for the changes to take effect.

1 votos

@Joy Jin, RE: " csrutil enable --without fs "- Creo que incluso si se puede establecer esto desde un arranque normal todavía requeriría un reinicio para que funcione.

0 votos

Podrías arrancar con el shell EFI que establecería csr-active-config desde un archivo, y luego arrancar MacOS.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X