De acuerdo con TN2459
Los KEXT aprobados son rastreados en una base de datos de políticas a nivel de todo el sistema a través del identificador del equipo en la firma del código del KEXT y el identificador del paquete de la lista de información del KEXT, por lo que la actualización de un KEXT que ya ha sido aprobado no dará lugar a una nueva solicitud de aprobación.
Esta base de datos (al menos hasta Mojave) es /var/db/SystemPolicyConfiguration/KextPolicy y puedes actualizarlo con sqlite3 después de desactivando el SIP .
A1398% csrutil status
System Integrity Protection status: disabled.
A1398% sudo sqlite3 /var/db/SystemPolicyConfiguration/KextPolicy
SQLite version 3.24.0 2018-06-04 14:10:15
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE settings ( name TEXT, value TEXT, PRIMARY KEY (name) );
CREATE TABLE kext_load_history_v3 ( path TEXT PRIMARY KEY, team_id TEXT, bundle_id TEXT, boot_uuid TEXT, created_at TEXT, last_seen TEXT, flags INTEGER , cdhash TEXT);
CREATE TABLE kext_policy ( team_id TEXT, bundle_id TEXT, allowed BOOLEAN, developer_name TEXT, flags INTEGER, PRIMARY KEY (team_id, bundle_id) );
CREATE TABLE kext_policy_mdm ( team_id TEXT, bundle_id TEXT, allowed BOOLEAN, payload_uuid TEXT, PRIMARY KEY (team_id, bundle_id) );
sqlite>
Contiene 4 tablas de las cuales sólo kext_policy y kext_load_history_v3 son interesantes (a menos que uses mdm presumiblemente). Por ejemplo, estas son mis claves autorizadas:
sqlite> select * from kext_policy;
VBG97UB4TA|com.objective-see.lulu|1|Objective-See, LLC|1
Z3L495V9L4|com.intel.driver.EnergyDriver|1|Intel Corporation Apps|1
|com.rugarciap.DisableTurboBoost|1|Legacy Developer: Rugarciap|1
MLZF7K7B5R|at.obdev.nke.LittleSnitch|1|Objective Development Software GmbH|1
54GTJ2AU36|com.joshuawise.kexts.HoRNDIS|1|Joshua Wise|1
6HB5Y2QTA3|com.hp.kext.io.enabler.compound|1|HP Inc.|0
sqlite>
Si quisieras borrarlos todos, podrías usar delete from kext_policy;
entonces para ser ordenado delete from kext_load_history_v3;
Alternativamente se puede borrar uno específico comparando uno de los campos mostrados por el .schema
comando. Por ejemplo, para borrar LittleSnitch basado en el segundo campo bundle_id ;
sqlite> delete from kext_policy where bundle_id = "at.obdev.nke.LittleSnitch";
sqlite> delete from kext_load_history_v3 where bundle_id = "at.obdev.nke.LittleSnitch";
sqlite> select * from kext_policy;
VBG97UB4TA|com.objective-see.lulu|1|Objective-See, LLC|1
Z3L495V9L4|com.intel.driver.EnergyDriver|1|Intel Corporation Apps|1
|com.rugarciap.DisableTurboBoost|1|Legacy Developer: Rugarciap|1
54GTJ2AU36|com.joshuawise.kexts.HoRNDIS|1|Joshua Wise|1
6HB5Y2QTA3|com.hp.kext.io.enabler.compound|1|HP Inc.|0
sqlite> .quit
Me doy cuenta de que este responder a en el desbordamiento de la pila sugiere que puede ser necesario también reajustar el PRAM. Reiniciar el PRAM automáticamente vuelve a activar el SIP y como es más fácil que arrancar en la recuperación vale la pena hacerlo.
Es posible hacer esto usando un GUI si se prefiere. Después de desactivar el SIP:
- Descargue e instale Navegador de BD para SQLite
- Lanzamiento desde la terminal con
sudo /Applications/DB\ Browser\ for\ SQLite.app/Contents/MacOS/DB\ Browser\ for\ SQLite
- Abrir la base de datos /var/db/SystemPolicyConfiguration/KextPolicy (pulse ⇧⌘. para mostrar los archivos ocultos).
- En Examinar los datos ficha en kext_policy tabla, haga clic con el botón derecho del ratón y elimine las filas que contengan teclas no deseadas. Aquí estoy borrando el kext para LuLu firewall.
- Cambiar la mesa a kext_load_history_v3 y eliminar las filas correspondientes.
- Haga clic en Escriba los cambios
- Reinicie y restablezca el PRAM ( ⌘ - ⌥ - P - R ) que volverá a habilitar el SIP automáticamente sin necesidad de reiniciar la recuperación.
- Después de reiniciar un Extensión del sistema bloqueada se recibe un mensaje para el teclado cuyos registros fueron borrados:
- Permitiendo que el software del desarrollador en Preferencias del sistema actualiza el KextPolicy y luego otros reinicios vuelven a la normalidad.