MacOS Untrusted Kexts, Fehler und Erklärungen

Wie im letzten Beitrag bereits beschrieben habe ich momentan leider Ärger mit meiner Mojave Installation und wühle mich durch Unmengen an möglichen Fehlerquellen und Logeinträgen.

Dabei bin ich u.a. auf die das Problem Untrusted kexts are not allowed gestossen und konnte ein wenig über den Umgang mit Kexts (MacOS Kernel Extensions) lernen.

Um welche Fehler geht es?

Untrusted kexts are not allowed
Kext with invalid signature (-67062) denied: /Library/StagedExtensions/System/Library/Extensions/HuaweiDataCardDriver.kext/Contents/PlugIns/14E59974-99C3-4F32-9E41-2AA9634A7F8B.kext
Bundle (/System/Library/Extensions/HuaweiDataCardDriver.kext/Contents/PlugIns/HuaweiDataCardECMControl.kext) failed to validate, deleting: /Library/StagedExtensions/System/Library/Extensions/HuaweiDataCardDriver.kext/Contents/PlugIns/14E59974-99C3-4F32-9E41-2AA9634A7F8B.kext
Unable to stage kext (/System/Library/Extensions/HuaweiDataCardDriver.kext/Contents/PlugIns/HuaweiDataCardECMControl.kext) to secure location.

Dieser Untrusted kexts are not allowed Fehler wiederholt sich bei mir für ein gutes dutzend verschiedene Files, welche scheinbar alle nicht korrekt signiert oder in meinem Falle nicht freigegeben worden sind bzw. für eine mittlerweile veraltete MaxOS Version erstellt worden sind.

Diese nicht geladenen Kernel Erweiterungen werden von MacOS in den Ordner /Library/StagedExtensions/ verschoben.

$ ls -la /Library/StagedExtensions/System/Library/Extensions
total 0
drwxr-xr-x@ 3 root  wheel    96B 22 Nov  2010 BJUSBLoad.kext
drwxr-xr-x  3 root  wheel    96B  3 Aug 14:29 HuaweiDataCardDriver.kext
drwxr-xr-x@ 3 root  wheel    96B 28 Jan  2013 IceraUSBMassStorageBypass.kext
drwxr-xr-x@ 3 root  wheel    96B 22 Mai  2012 JMicronATA.kext
drwxr-xr-x  3 root  wheel    96B  3 Aug 14:29 NMHuaweiPhonesVTPCDC_106.kext
drwxr-xr-x  3 root  wheel    96B  3 Aug 14:29 NMSamsungDriver_106.kext
drwxr-xr-x  3 root  wheel    96B  3 Aug 14:29 NovatelWireless3G.kext
drwxr-xr-x@ 3 root  wheel    96B 28 Jan  2013 NovatelWirelessUSBCDCECMControl.kext
drwxr-xr-x@ 3 root  wheel    96B 28 Jan  2013 RIMBBUSB.kext
drwxr-xr-x@ 3 root  wheel    96B 28 Jan  2013 RIMBBVSP.kext
drwxr-xr-x  3 root  wheel    96B  3 Aug 14:29 Vodafone.kext
drwxr-xr-x@ 3 root  wheel    96B 26 Mär  2013 heimdall.kext
drwxr-xr-x  3 root  wheel    96B  3 Aug 14:29 ssuddrv.kext

Sie können durch Installation von Software dort landen, bei mir waren es Überbleibsel vergangener Installationen, die nicht korrekt bzw. vollständig deinstalliert wurden, denn das verschieben der App in den Papierkorn löscht leider nicht alle dazugehörigen Abhängigkeiten.

Wegen solcher Probleme hatte ich Mojave komplett neu installiert und NUR meine Benutzerdaten aus dem TimeMachine Backup wiederhergestellt. Licht und Schatten solcher Wollmilcheierlegenden-Superlösungen wie Time-Machine… sie wurden wieder mit hergestellt.

Ein gute Erläuterung zu der Meldung Untrusted kexts are not allowed liefert dieser Forum-Beitrag:

The first time an attempt is made to load the kext, macOS should present the user with a popup informing them that it was blocked. The user then needs to go to System Preferences > Security & Privacy in order to approve the kext. Note that the approval needs to happen within 30 minutes of the load attempt or it will disappear. Subsequent load attempts will be rejected silently but will reactivate the prompt within “Security & Privacy” – giving the user another chance to approve the kext.

Dummerweise habe ich diese Dialoge nach einem Restore aus einem Time-Machine Backup genau einmal bei Booten gesehen und erstmal weggeklickt.

Aber man kann, wenn es denn gewünscht sein sollte, diese immer noch wieder aktivieren in dem man die Systemeinstellungen und dort zu Sicherheit/Allgemein wechselt. Achtung: das muss innerhalb von 30 Minuten nach Reboot gemacht werden, ansonsten verschwindet die Meldung Das laden einer Systemsoftware wurde blockiert und mann kan den Erlauben … Dialog nicht öffnen:

Ich vermute (ungetestet) das “Haken setzen” und “Neustarten” diese Kernel Erweiterungen laden. Empfehlen würde ich es nicht, macht lieber ein Update auf die neueste Version der betroffenen Software. Die liefert dann hoffentlich auch ein kompatibles .kext mit.

Kext Infos einsehen

Interesse an mehr technischen Informationen vorhanden? Gut, denn man kann sich weitere Informationen über Kernel Extensions anschauen mit:

sudo kextutil -tn /Library/StagedExtensions/System/Library/Extensions/*.kext

Da findet man Informationen wie:

Code Signing Failure: not code signed
Dependency Resolution Failures:
    Only incompatible kexts found for these libraries:
        com.rim.driver.BlackBerryUSBDriverInt

Diagnostics for /Library/StagedExtensions/System/Library/Extensions/RIMBBVSP.kext:
Dependency Resolution Failures:
    Only incompatible kexts found for these libraries:
        com.rim.driver.BlackBerryUSBDriverInt

kext file:///Library/StagedExtensions/System/Library/Extensions/heimdall.kext/ is in hash exception list, allowing to load
Kext rejected due to system policy: <OSKext 0x7fb2ef491410 [0x7fff8a14c8e0]> { URL = "file:///Library/StagedExtensions/System/Library/Extensions/heimdall.kext/", ID = "au.com.glassechidna.heimdall_usb_shield" }
Code Signing Failure: not code signed
Warnings:
    Personality CFBundleIdentifier differs from containing kext's (not necessarily a mistake, but rarely done):
        GalaxyS
        GalaxyS2
        DroidCharge

Diagnostics for /Library/StagedExtensions/System/Library/Extensions/heimdall.kext:
Warnings:
    Personality CFBundleIdentifier differs from containing kext's (not necessarily a mistake, but rarely done):
        GalaxyS
        GalaxyS2
        DroidCharge

oder auch

Memory allocation failure.
/Library/StagedExtensions/System/Library/Extensions/70F75E81-D822-4E69-9103-8CD2A0EAE699.kext does not appear in strict exception list for architecture: x86_64
Untrusted kexts are not allowed

Nachdem ich mich ein wenig umgeschaut habe, war klar: weg mit den Kexts, werden nicht benötigt.

Kernel Extensions löschen

Will man diese Kexts also nicht nutzen und loswerden, dann stößt man auf ein Problem: aufgrund der SIP können diese nicht einfach gelöscht werden.

Aber dafür gibt es dankenswerterweise ein binary von Apple:

sudo kextcache --clear-staging

Und schwupps ist der Ordner leer. Toll! Reboot und was sehe ich da: alles wieder wie vorher… Kopf => Wand. Okay das war noch nicht die Lösung, der Ordner wird bei jedem Reboot wiederhergestellt.

Dann ein Stück tiefer graben und rausfinden, dass Kexts in den folgenden Ordnern gespeichert werden :

  • /System/Library/Extensions
  • /Library/Extensions

Neu installierte Kexts werden also zunächst in /Library/StagedExtensions gespeichert und nach Freigabe durch den Benutzer in einen der Ordner verschoben. Wurde dies unter einer alten MacOS Version gemacht, so kann es sein das bei einem Neustart der Kernel auf diese Dateien trifft, sie aber ablehnt da sie nicht mit den neuesten Sicherheitsrichtlinien kompatibel sind. In solch einem Fall werden sie ungekehrt wieder nach /Library/StagedExtensions kopiert.

Wie werden wir sie also dauerhaft los? Spannenderweise kann man mit sudo Berechtigung Kexts auf dem Ordner /System/Library/Extensions löschen.

Also neuer Versuch:

sudo rm -rf /System/Library/Extensions/heimdall.kext

Das ganze wiederholen für alle überflüssigen Kexts und dann

sudo kextcache --clear-staging

Jetzt noch ein finaler Reboot … UND: die kexts sind wirklich weg!

Und wer jetzt heiß ist auf noch mehr technische Informationen, dem sei der Blogbeitrag Secure Kernel Extension Loading ans Herz gelegt!