8 votos

Revocar el permiso para ejecutar la extensión del núcleo de terceros

Una vez que un usuario concede a MacOS permiso para ejecutar las extensiones del núcleo de un tercero, todas las extensiones firmadas por la clave de ese desarrollador pueden ejecutarse. Incluso si la extensión se borra y se reinstala, el permiso permanece.

¿Cómo se puede posteriormente revocar el permiso para ejecutar una o todas las extensiones del núcleo de terceros?

Esto no es una petición de cómo descargar las extensiones del núcleo. Supongamos, por ejemplo, que un desarrollador desea un control de calidad repetible en torno al proceso de instalación y de solicitud de autorización de una extensión del núcleo a un usuario.

7voto

Michael Puntos 193

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. kext_policy
  • Cambiar la mesa a kext_load_history_v3 y eliminar las filas correspondientes. kext_load_history_v3
  • 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: System Extension Blocked
  • Permitiendo que el software del desarrollador en Preferencias del sistema actualiza el KextPolicy y luego otros reinicios vuelven a la normalidad. System Preferences

0 votos

0 votos

Umm no sé qué hacer con la base de datos. Pero una aplicación GUI es buena para los analfabetos de sqlite como yo. Además, yo sólo lo navegó después de copiarlo de allí (requiere la contraseña Root también), no hizo ninguna modificación.

0 votos

@ankii - He añadido la opción GUI. Es seguro para probar la eliminación de las cosas si lo desea. Si borras un registro de algo en uso entonces después de reiniciar obtendrás un error Extensión del sistema bloqueada . Si luego lo autoriza en Preferencias del sistema actualiza la base de datos y el próximo arranque volverá a ser normal.

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