Tillförlitlighetscacher
Ett av objekten som ingår i kedjan vid säker start är den statiska tillförlitlighetscachen som är en betrodd registrering av alla Mach-O-binärfiler som används med den signerade systemvolymen. Varje Mach-O representeras av en kodkataloghash. För effektiv sökning sorteras dessa hashvärden innan de infogas i tillförlitlighetscachen. Kodkatalogen är resultatet av den signeringsoperation som utförs av codesign(1)
. Tillämpning av tillförlitlighetscachen kräver att SIP hela tiden är aktiverat. För att tillämpningen av tillförlitlighetscachen ska kunna avaktiveras på Mac-datorer med Apple Silicon måste därför säker start konfigureras till Tillåtande säkerhet.
När en binärfil körs (som en del av startandet av en ny process eller vid mappning av körbar kod till en befintlig process) extraheras och hashas filens kodkatalog. Om det hashvärde som skapas finns i tillförlitlighetscachen får de mappningar av körbar kod som skapas för den binära filen plattformsbehörigheter – det innebär att de innehar samma behörigheter och möjlighet att köra utan ytterligare verifiering av signaturens autenticitet. Det här skiljer sig från Intel-baserade Mac-datorer där plattformsbehörigheter överförs till operativsystemsinnehåll av det Apple-certifikat som signerar binärfilerna. (Det här certifikatet begränsar inte vilka behörigheter binärfilen kan ha.)
Binärfiler som inte är knutna till plattformen (exempelvis attesterad tredjepartskod) måste ha giltiga certifikatkedjor för att köras, och alla behörigheter de kan ha, begränsas av den signeringsprofil som utfärdats till utvecklaren av Apple Developer Program.
Alla binärfiler som levereras med macOS är signerade med en plattformsidentifierare. På Mac-datorer med Apple Silicon används den här identifieraren till att indikera att dess kodkataloghash måste finnas i tillförlitlighetscachen för att kunna köras även om binärfilen är signerad av Apple. På Intel-baserade Mac-datorer används plattformsidentifieraren till att utföra riktad återkallning av binärfiler från äldre versioner av macOS. Den här riktade återkallningen förhindrar binärfilerna från att köras i nyare versioner.
Den statiska tillförlitlighetscachen låser fullständigt en uppsättning binärfiler till en viss version av macOS. Det här beteendet förhindrar att legitima Apple-signerade binärfiler från äldre operativsystem introduceras i nyare för att ge en angripare en fördel.
Plattformskod levererad utanför operativsystemet
Apple levererar vissa binärfiler – t.ex. Xcode och uppsättningen av utvecklarverktyg – som inte är signerade med en plattformsidentifierare. De har ändå behörighet att köra med plattformsbehörighet på Mac-datorer med Apple Silicon och Mac-datorer med T2-krets. Eftersom den här plattformsprogramvaran levereras separat från macOS lyder den inte under det återkallningsbeteende som följer med den statiska tillförlitlighetscachen.
Inläsningsbara tillförlitlighetscacher
Apple levererar vissa programvarupaket med inläsningsbara tillförlitlighetscacher. Dessa cacher har samma datastruktur som den statiska tillförlitlighetscachen. Men även om det bara finns en statisk tillförlitlighetscache – och dess innehåll alltid är garanterat inlåst i skrivskyddade intervall efter att den tidiga initieringen av kärnan har slutförts – läggs inläsningsbara tillförlitlighetscacher till i systemet vid körning.
Dessa tillförlitlighetscacher autentiseras antingen genom samma mekanism som autentiserar den fasta startprogramvaran (anpassning sker med Apples betrodda signeringsprocess) eller som globalt signerade objekt (vars signaturer inte binder dem till en specifik enhet).
Ett exempel på en anpassad tillförlitlighetscache är den cache som levereras med skivavbilden som används till att utföra fältdiagnostik på Mac-datorer med Apple Silicon. Den här tillförlitlighetscachen anpassas, tillsammans med skivavbilden, och läses in i den aktuella Mac-datorns kärna när den startas i diagnosläge. Tillförlitlighetscachen tillåter att programvaran i skivavbilden körs med plattformsbehörighet.
Ett exempel på en globalt signerad tillförlitlighetscache levereras med macOS-programuppdateringar. Den här tillförlitlighetscachen tillåter att en specifik uppsättning kod i programuppdateringar – uppdateringskärnan – körs med plattformsbehörighet. Uppdateringskärnan utför allt arbete för att förbereda programuppdateringen som värdsystemet saknar kapacitet att utföra på ett konsekvent sätt mellan olika versioner.