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
-
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.
-
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
-
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
-
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
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)?