Caches für die Vertrauensstellung (Trust Caches)
Eines der Elemente des sicheren Startvorgangs ist der statische Cache für die Vertrauensstellung (Static Trust Cache). Dabei handelt es sich um einen vertrauenswürdigen Datensatz aller Mach-O-Binärdateien, die in das signierte Systemvolume gemastert wurden. Jede Mach-O-Binärdatei wird von einem Codeverzeichnis-Hash repräsentiert. Diese Hash-Werte werden vor ihrer Eingliederung in den Trust Cache sortiert, um effiziente Suchvorgänge zu ermöglichen. Das Codeverzeichnis ist das Ergebnis des Signiervorgangs, der von codesign(1)
durchgeführt wird. Die Durchsetzung des Trust Cache setzt voraus, dass SIP aktiviert bleibt. Um die Durchsetzung des Trust Cache auf einem Mac mit Apple Chips deaktivieren zu können, muss daher der sichere Startvorgang für den Modus „Permissive Sicherheit“ konfiguriert sein.
Wenn eine Binärdatei ausgeführt wird (ob beim Auslösen eines neuen Prozesses oder beim Mapping von ausführbarem Code in einen bestehenden Prozess), wird ihr Codeverzeichnis extrahiert und ein Hash-Wert für das Codeverzeichnis generiert. Wird der daraus resultierende Hash-Wert im Trust Cache gefunden, erhalten die ausführbaren Mappings, die für die Binärdatei erstellt wurden, Plattformberechtigungen – das bedeutet, dass sie über jegliche Berechtigungen verfügen und ohne weitere Authentizitätsprüfung hinsichtlich der Signatur ausgeführt werden können. Dies unterscheidet sich von dem Vorgang bei Intel-basierten Mac-Computern, bei dem Plattformberechtigungen auf Inhalte des Betriebssystems durch das Apple-Zertifikat übertragen werden, das die Binärdateien signiert. (Dieses Zertifikat schränkt nicht ein, welche Berechtigungen die Binärdatei haben kann.)
Plattformfremde Binärdateien (z. B. beglaubigter Code von Dritten) müssen über gültige Zertifikatketten verfügen, um ausführbar zu sein. Die Berechtigungen, über die sie verfügen können, werden von dem Signierungsprofil eingeschränkt, das dem Entwickler vom Apple Developer Program ausgestellt wurde.
Alle in macOS enthaltenen Binärdateien werden mit einer Plattformkennung signiert. Bei Mac-Computern mit Apple Chips weist diese Kennung darauf hin, dass die Binärdatei zwar von Apple signiert ist, der Hash-Wert ihres Codeverzeichnisses allerdings im Trust Cache vorliegen muss, um ausführbar zu sein. Bei Intel-basierten Mac-Computern wird die Plattformkennung verwendet, um Berechtigungen von Binärdateien aus einer älteren Version von macOS gezielt zu widerrufen. Dieses gezielte Widerrufen soll die Ausführung dieser Binärdateien auf neueren Versionen verhindern.
Der Static Trust Cache weist Binärdateien vollständig einer bestimmten Version von macOS zu. Dies verhindert, dass berechtigterweise von Apple signierte Binärdateien älterer Betriebssysteme in neuere Versionen eingeführt werden, um Vorteile für einen Angreifer zu schaffen.
Nicht im Betriebssystem enthaltene Binärdateien
Einige Binärdateien – z. B. Xcode und die Entwickler-Tools – werden nicht mit einer Plattformkennung versehen. Dennoch sind sie dazu berechtigt, auf einem Mac mit Apple Chips und solchen mit T2-Chip mit Plattformberechtigungen ausgeführt zu werden. Da diese Plattformsoftware unabhängig von macOS bereitgestellt wird, unterliegt sie nicht dem vom Static Trust Cache auferlegten Widerrufungsverhalten.
Ladbare Trust Caches
Apple stellt bestimmte Softwarepakete in Kombination mit ladbaren Trust Caches bereit. Diese Caches haben dieselbe Datenstruktur wie der statische Trust Cache. Während es jedoch nur einen statischen Trust Cache gibt, dessen Inhalte nach den ersten Initialisierungsschritten des Kernel unter Garantie in schreibgeschützten Bereichen gesperrt werden, werden ladbare Trust Caches zur Laufzeit zum System hinzugefügt.
Diese Trust Caches werden entweder mit denselben Mechanismen authentifiziert, die auch die Boot-Firmware authentifizieren (Personalisierung durch den vertrauenswürdigen Apple Signierungsdienst), oder sie werden als global signierte Objekte authentifiziert (deren Signaturen sie nicht an ein bestimmtes Gerät binden).
Ein Beispiel für einen personalisierten Trust Cache ist der Cache, der mit der Image-Datei für die Ausführung von Felddiagnosen auf Mac-Computern mit Apple Chips bereitgestellt wird. Dieser Trust Cache wird zusammen mit der Image-Datei personalisiert und in den Kernel des jeweiligen Mac-Computers geladen, wenn er in einen Diagnosemodus gestartet wird. Der Trust Cache erlaubt der Software in der Image-Datei, mit Plattformberechtigungen ausgeführt zu werden.
Ein Beispiel für einen global signierten Trust Cache wird mit macOS Softwareaktualisierungen bereitgestellt. Dieser Trust Cache ermöglicht einem Teil des Codes der Softwareaktualisierung – dem Update Brain – mit Plattformberechtigungen ausgeführt zu werden. Das Update Brain führt alle Schritte zur Vorbereitung der Aktualisierung aus, die das Host-System nicht versionsübergreifend einheitlich bereitstellen kann.