SecureBootModel en OpenCore 0.7.2

Apple Secure Boot es la tecnología utilizada por Apple en los Mac para verificar la integridad del sistema operativo en el arranque: bootloader > Kernel > instantánea del volumen de sistema. Si esta comprobación falla, MacOS no arrancará. Apple Secure Boot sólo funciona durante el proceso de arranque, una vez que MacOS se está ejecutando ya no realiza ninguna función. Nota: es muy recomendable leer las guías de Dortania: applesecureboot.md, uefisecureboot.md y vault.md.

1. SecureBootModel en OpenCore

Apple define 3 modos de Secure Boot:

  • Seguridad completa (Full Security): sólo permite arrancar el sistema operativo instalado u otra versión firmada de macOS en la que Apple confía actualmente. También verifica la integridad de la versión instalada. Si la verificación falla, el sistema ofrece reinstalar macOS o arrancar desde un disco diferente.
  • Seguridad media (Medium Security): verifica que la versión instalada de MacOS es legítima pero no comprueba la integridad del sistema. Permite arrancar cualquier versión firmada de MacOS en la que Apple haya confiado en algún momento.
  • Sin seguridad (No Security): se permiten otros sistemas o versiones diferentes de las mencionadas en las opciones seguras. No hay requisitos respecto al sistema operativo de arranque.

El estado actual de Apple Secure Boot en los Mac con procesador Intel puede obtenerse desde NVRAM:

nvram 94b73556-2197-4702-82a8-3e1337dafbfb:AppleSecureBootPolicy

Si la variable existe, puede ser:

  • %02 - Full Security
  • %01 - Medium Security
  • %00 - No Security.

Si la variable no existe, Apple Secure Boot no es soportado.

Opencore tiene una clave SecureBootModel que ajusta el modo de Apple Secure Boot para que sea similar a los Mac. Esta clave ha cambiado en Opencore versión 0.7.2:

  • En Opencore 0.7.1, el valor Failsafe para SecureBootModel es Default, este valor establece el modelo de hardware de arranque seguro como j137 (iMacPro1,1,1 de diciembre de 2017, macOS mínimo 10.13.2). Esto significa que las versiones de macOS anteriores a 10.13.2 no se pueden instalar con este valor de SecureBootModel.
  • En Opencore 0.7.2, el valor Failsafe para SecureBootModel sigue siendo Default, pero este valor establece un modelo de hardware de arranque seguro como x86legacy, nuevo valor que corresponde a macOS 11 Big Sur y 12 Monterey en hardware sin chip T2 (como nuestro hackintosh) y VM (máquinas virtuales).

Observa que con OpenCore 0.7.2:

  • x86legacy está diseñado para máquinas sin chip T2 con Big Sur y especialmente Monterey si queremos tener Apple Secure Boot (macOS 11 o posterior)
  • j137 no funciona en Monterey
  • j137 es el valor recomendado para macOS desde 10.13.2 hasta 10.15.x
  • sistemas anteriores a macOS 10.13.2 han de poner SecureBootModel=Disabled
  • quienes no desean tener Apple Secure Boot por la razón que sea pueden poner SecureBootModel=Disabled, incluso en Monterey
  • SecureBootModel puede adoptar el valor, de la lista de valores válidos, que se corresponda con la versión de macOS que deseas arrancar (por ejemplo j160 para macOS Catalina 10.15.1).

Estos son los valores válidos de SecureBootModel en OpenCore 0.7.2:

  • Default - Modelo reciente, actualmente establecido en x86legacy
  • Disabled - Sin modelo, Secure Boot está deshabilitado
  • j137 - iMacPro1,1 (diciembre de 2017) macOS 10.13.2 o posterior
  • j680 - MacBookPro15,1 (julio de 2018) macOS 10.13.6 o posterior
  • j132 - MacBookPro15,2 (julio de 2018) macOS 10.13.6 o posterior
  • j174 - MacMini8,1 (octubre de 2018) macOS 10.14 o posterior
  • j140k - MacBookAir8,1 (octubre de 2018) macOS 10.14.1 o posterior
  • j780 - MacBookPro15,3 (mayo de 2019) macOS 10.14.5 o posterior
  • j213 - MacBookPro15,4 (julio de 2019) macOS 10.14.5 o posterior
  • j140a - MacBookAir8,2 (julio de 2019) macOS 10.14.5 o posterior
  • j152f - MacBookPro16,1 (noviembre de 2019) macOS 10.15.1 o posterior
  • j160 - MacPro7,1 (diciembre de 2019) macOS 10.15.1 o posterior
  • j230k - MacBookAir9,1 (2020 de marzo) macOS 10.15.3 o posterior
  • j214k - MacBookPro16,2 (mayo de 2020) macOS 10.15.4 o posterior
  • j223 - MacBookPro16,3 (mayo de 2020) macOS 10.15.4 o posterior
  • j215 - MacBookPro16,4 (junio de 2020) macOS 10.15.5 o posterior
  • j185 - iMac20,1 (2020 de agosto). macOS 10.15.6 o posterior
  • j185f - iMac20,2 (2020 de agosto). macOS 10.15.6 o posterior
  • x86legacy - Mac sin chip t2 y VM (máquinas virtuales). macOS 11.0.1 o posterior.

Estos ordenadores Mac tienen chip de seguridad T2 de Apple (coinciden con la lista de valores de SecureBootModel):

  • iMac (2020)
  • Mac Pro (2019)
  • Mac Pro (Rack, 2019)
  • Mac mini (2018)
  • MacBook Air (2020)
  • MacBook Air (2019)
  • MacBook Air (2018)
  • MacBook Pro (2020)
  • MacBook Pro (2019)
  • MacBook Pro (2018)
  • iMac Pro (2017).

Observa que iMac19,1 (marzo de 2019 - macOS 10.14.4 o posterior) no está en la lista porque carece de chip T2.

Si no te sientes seguro con los sistemas operativos antiguos, siempre puedes poner el modelo que sólo admita las versiones de macOS que necesitas, y no las anteriores. Por ejemplo, j140K filtrará 10.13 y anteriores, j152F filtrará 10.14 y anteriores, x86legacy filtrará 10.15 y anteriores.

Recuerda que SMBIOS y SecureBootModel no necesitan coincidir, el modelo de Apple Secure Boot no depende del modelo SMBIOS por lo que no tiene sentido intentar que sean el mismo.

2. Apple Secure Boot en el hackintosh

UEFI Secure Boot sólo permite arrancar sistemas operativos que están firmados digitalmente en los que se pueda confiar. El sistema BIOS de los PCs viene con claves de Microsoft como confiables. Por lo tanto, para iniciar Windows con Secure Boot, hay que habilitar Secure Boot en BIOS y tener las claves de Windows 8/10 (generalmente incluidas en el firmware de la placa base). Pero esto sólo es necesario para Windows. macOS tiene su propia implementación llamada Apple Secure Boot, esta función se puede realizar con Secure Boot deshabilitado en BIOS.

¿Cómo conseguir Apple Secure Boot en Hackintosh? OpenCore puede proporcionar un arranque seguro independientemente de la configuración de esta opción de BIOS. OpenCore incluye 3 claves para habilitar el arranque seguro:

  • Misc >> Security >> DmgLoading: para establecer la política de carga de DMG en OpenCore; puede ser Any (el arranque falla si Secure Boot está habilitado), Signed y Disabled (ambas admiten el arranque seguro)
  • Misc >> Security >> SecureBootModel: para configurar el modelo de hardware de Apple Secure Boot; SecureBootModel equivale a Medium Security, para Full Security debes utilizar ApECID
  • Misc >> ApECID: Identificador de Enclave de Apple, permite usar identificadores personalizados de arranque seguro de Apple y tener Full Security cuando se combina con SecureBootModel.

Para el valor ApECID, hay que obtener un entero de 64 bits generado aleatoriamente de forma criptográfica. Si tienes instalado Python 3, puedes usar este comando en Terminal:

python3 -c 'import secrets; print(secrets.randbits(64))'

Si no tienes Python 3, puedes usar el comando de Bash urandom en Terminal. Esta herramienta puede generar un entero aleatorio de 32 bits, si ejecutamos la herramienta dos veces y combinamos los 2 enteros de 32 bits obtenemos un valor de 64 bits. Copia este texto en un archivo, guárdalo con extension sh y ejecútalo con doble clic:

#!/bin/sh
# primer entero de 32 bit
low32=$(od -An -N4 -tu4 < /dev/urandom)
# segundo entero de 32 bit
high32=$(od -An -N4 -tu4 < /dev/urandom)
# uniendo los 2 enteros
long=$(($low32 + ($high32 << 32)))
# quitando el signo - inicial si existe
echo $long | sed 's/-//'

Ahora puedes introducirlo en Misc -> ApECID en el archivo config.plist.

Nota: no uses ramdon en lugar de uramdom, no es criptográficamente seguro.

Cuando se usa APECID, SecureBootModel debe tener un valor definido en lugar de Default (el valor Default puede cambiar en las siguientes versiones de Opencore).

Es recomendable personalizar el volumen de arranque la primera vez que arrancas macOS con un valor ApECID. Para ello:

  • Arranca en modo Recovery
  • Asegúrate de tener conexión a internet
  • Abre Terminal
  • bless --folder /Volumes/HD/System/Library/CoreServices --bootefi --personalize
  • (reemplaza HD con el nombre de tu volumen de sistema)
  • Reinicia a macOS.

SecureBootModel y ApECID:

  • con SecureBootModel=Disable >> No Security (%00)
  • con SecureBootModel=x86legacy o cualquiera de los valores válidos >> Medium Security (%01)
  • con SecureBootModel=x86legacy o cualquiera de los valores válidos más ApECID >> Full Security (%02).

3. Vault

Es una forma de aumentar la seguridad en OpenCore firmando digitalmente OpenCore.efi de manera que nadie excepto tú puede modificar el boot loader.

Como tarea inicial hay que modificar config.plist:

  • Misc >> Security >> Vault:
    - Basic: requiere solamente el archivo vault.plist, se usa para verificar la integridad del sistema de archivos
    - Secure: requiere ambos archivos vault.plist y vault.sig, mejora la seguridad ya quecualquier cambio en vault.plist requiere una nueva firma digital
  • Booter >> ProtectSecureBoot=Yes >> suelen necesitarlo los firmares UEFI hechos por Insyde para evitar problemas con las claves seguras.

Después hay que copia la carpeta OpenCore/Utilities/CreateVault para colocarla junto a la carpeta EFI dentro de la partición EFI. La ruta resultante ha de quedar así: partición EFI/carpeta Utilities/carpeta CreateVault.

.
├── EFI
│   ├── BOOT
│   └── OC
├── Utilities
│   └── CreateVault
│       ├── RsaTool
│       ├── create_vault.sh
│       └── sign.command
└── 

Dentro de CreateVault hay 3 archivos: create_vault.sh, RsaTool y sign.command.
Ejecuta sign.command para generar un hash para cada archivo de la carpeta EFI, escribirlos en el archivo vault.plist y crear una firma de 256 bytes de vault.plist que será introducida dentro del archivo OpenCore.efi.

/Volumes/EFI/Utilities/CreateVault > ./sign.command
../../EFI/OC for hashing...
Hashing files in ../../EFI/OC...
ACPI\\SSDT-AWAC-DISABLE.aml: 68de84a90faa6948f7be97a229908460da0aafb90afcf8a49dea9804e1ffc88c
... / ...
Drivers\\OpenRuntime.efi: 84289c9187273e9fe20bf48e1ebee95a98740c9e3320e1f198da467189192457
... / ...
Kexts\\Lilu.kext\\Contents\\MacOS\\Lilu: bbe867b06c523551460decbf5e760662c057fc004fe65bb138d59135729ab167
... / ...
Resources\\Label\\Shell.lbl: ef2b6cd9fc4e11c3ed558555fcfbe9fb3377fd5d87212ceb5e1dc1fa945e0445
... / ...
config.plist: ae9f0b531b1c1aeeb692b67c8cd120eba9d67cf161978f44c1c87b5666708c6b
Tools\\OpenShell.efi: 4c0f9209bb3b0a1ce369848690e0480bb80b3d5880f9cceba5e8af74dcf68cdf
config-ok.plist: 51645ec8117668763bcec3ba826cc9ab0554805c0367a8644f3031cb5a0d5786
All done!
Generating RSA private key, 2048 bit long modulus
... / ...
e is 65537 (0x10001)
Issuing a new private key...
Getting public key based off private key...
Signing ../../EFI/OC/OpenCore.efi...
Bin-patching ../../EFI/OC/OpenCore.efi...
528+0 records in
528+0 records out
528 bytes transferred in 0.000660 secs (799781 bytes/sec)
All done!
Cleaning up keys
/Volumes/EFI/Utilities/CreateVault >

¿Cómo desactivar Vault?

  • Consigue una copia nueva de OpenCore.efi
  • Misc >> Security >> Vault >> Optional
  • Elimina los archivos vault.plist y vault.sig.

4. Secure Boot habilitado en BIOS

Esta última sección debería tener instrucciones para ejecutar Opencore con Secure Boot de BIOS habilitado pero, hasta ahora, todos los intentos que he hecho para ello han fracasado. Cada vez que habilito el modo de arranque seguro en BIOS, una advertencia que dice "Secure boot violation. Invalid signature detected. Check secure boot policy in setup" aparece antes de Opencore, que falla y no arranca.

Windows 10 arranca bien con Secure Boot habilitado o deshabilitado en BIOS. Pero Opencore solo arranca con Secure Boot deshabilitado en BIOS. Esto no es importante para los usuarios que solo utilizan macOS. Pero como Windows 11, cerca de su lanzamiento final, requiere Secure Boot habilitado en BIOS, es importante para los usuarios que usan macOS y Windows juntos y planean actualizar a Windows 11.

El problema está provocado porque el sistema BIOS de los PCs viene con claves de Microsoft como confiables (a menudo, también con claves del fabricante de la placa base). Estas claves pueden arrancar Windows en modo seguro, pero no Opencore.

He probado todas las opciones de las que dispongo actualmente:

  • Secure Boot habilitado en BIOS
    • SecureBootModel disabled >> falla
    • SecureBootModel enabled >> falla
    • SecureBootModel enabled + ApECID >> falla
    • SecureBootModel enabled + ApECID + Vault >> falla
  • Secure Boot deshabilitado en BIOS
    • SecureBootModel disabled >> macOS arranca con No Security
    • SecureBootModel enabled >> macOS arranca con Medium Security
    • SecureBootModel enabled + ApECID >> macOS arranca con Full Security
    • SecureBootModel enabled + ApECID + Vault >> macOS arranca con Full Security y los archivos de OpenCore firmados digitalmente y protegidos.

He encontrado enlaces de interés (artículo uefisecureboot.md de khronokernel y otros sitios) con instrucciones para firmar digitalmente los archivos del boot loader e incluir la firma en el firmware UEFI pero todos usan sistemas Linux y el proceso parece muy laborioso y lejos del conocimiento de un usuario promedio (como yo).

Así que, por ahora, la opción Secure Boot en BIOS permanecerá deshabilitada para poder arrancar OpenCore y macOS.

Esto puede cambiar en el futuro ya que vit9696 ha publicado muy recientemente un texto en el bug tracker de Acidanthera con el título Support UEFI SecureBoot within OpenCore proponiendo mejorar la implementación de UEFI Secure Boot en OpenCore simplificando el proceso para el usuario final.

Deja una respuesta

(La dirección de email no es necesaria)