Godkjenningsbuffere
Ett av objektene som er inkludert i den sikre oppstartssekvensen, er den statiske godkjenningsbufferen, en godkjent oppføring av alle Mach-O-binærfilene som er integrert i det signerte systemvolumet. Hver Mach-O representeres av en kodekataloghash. Disse hashene sorteres før innsetting i godkjenningsbufferen for å legge til rette for effektiv søking. Kodekatalogen er resultatet av signeringsoperasjonen utført av codesign(1)
. Håndheving av godkjenningsbufferen krever at SIP forblir aktivert. Hvis håndheving av godkjenningsbuffer på en Mac med Apple-chip skal deaktiveres, må sikker oppstart konfigureres til Middels sikkerhet.
Når en binærfil kjøres (enten som en del av oppretting av en ny prosess eller tilordning av kjørbar kode i en eksisterende prosess), blir kodekatalogen trukket ut og hashet. Hvis den resulterende hashen finnes i godkjenningsbufferen, vil de kjørbare tilordningene opprettet for binærfilen få plattformrettigheter. Det vil si at de kan ha en hvilken som helst rettighet og kjøre uten ytterligere verifisering med hensyn til signaturens autentisitet. Dette står i kontrast til Intel-baserte Macer, der plattformrettigheter overføres til operativsysteminnhold av Apple-sertifikatet som signerer binærfilene. (Dette sertifikatet begrenser ikke hvilke rettigheter binærfilen kan inneholde.)
Binærfiler som ikke er plattformrelaterte (for eksempel attestert kode fra tredjeparter), må ha gyldige sertifikatkjeder for å kunne kjøre, og rettighetene de kan inneholde, begrenses av signeringsprofilen utstedt av Apple Developer-programmet til utvikleren.
Alle binærfiler som leveres med macOS, signeres med en plattformidentifikator. På Macer med Apple-chip brukes denne identifikatoren til å indikere at kodekataloghashen må være til stede i godkjenningsbufferen for å kunne kjøre, selv om binærfilen signeres av Apple. På Intel-baserte Macer brukes plattformidentifikatoren til å utføre målrettet tilbakekalling av binærfiler fra eldre versjoner av macOS. Denne målrettede tilbakekallingen bidrar til å forhindre at binærfilene kjører på nyere versjoner.
Den statiske godkjenningsbufferen låser et sett med binærfiler fullstendig til en gitt versjon av macOS. Dette bidrar til å forhindre at legitime Apple-signerte binærfiler fra eldre operativsystemer introduseres i nyere operativsystemer for å gi en angriper fordeler.
Plattformkode levert utenfor operativsystemet
Apple leverer noen binærfiler, deriblant Xcode og samlingen med utviklingsverktøy, som ikke er signert med en plattformidentifikator. De har fortsatt lov til å kjøre med plattformrettigheter på Macer med Apple-chip og Macer med T2-brikke. Siden denne plattformprogramvaren leveres uavhengig av macOS, er den ikke underlagt tilbakekallingsatferden pålagt av den statiske godkjenningsbufferen.
Kjøreklare godkjenningsbuffere
Apple leverer bestemte programvarepakker med kjøreklare godkjenningsbuffere. Disse bufferne har den samme datastrukturen som den statiske godkjenningsbufferen. Men selv om det bare finnes én statisk godkjenningsbuffer, og det er garantert at innholdet alltid er låst inn i skrivebeskyttede områder etter at kjernens tidlige initialisering er fullført, legges kjøreklare godkjenningsbuffere til i systemet ved kjøring.
Disse godkjenningsbufferne autentiseres enten gjennom den samme mekanismen som autentiserer oppstartsfirmware (tilpasning ved hjelp av den Apple-godkjente signeringstjenesten), eller som globalt signerte objekter (der signaturene ikke binder dem til en bestemt enhet).
Et eksempel på en tilpasset godkjenningsbuffer er en godkjenningsbuffer som leveres med diskfilen som brukes til å utføre feltdiagnostikk på Macer med Apple-chip. Denne godkjenningsbufferen tilpasses, sammen med diskfilen, og lastes inn i Macens kjerne mens den startes opp i diagnostikkmodus. Godkjenningsbufferen tillater at programvaren i diskfilen kan kjøre med plattformrettighet.
Et eksempel på en globalt signert godkjenningsbuffer leveres med macOS-programvareoppdateringer. Denne godkjenningsbufferen tillater at en del av koden i programvareoppdateringen (oppdateringshjernen), kjører med plattformrettighet. Oppdateringshjernen utfører alle oppgaver for å klargjøre programvareoppdateringen som vertssystemet ikke har kapasitet til å utføre konsekvent på tvers av versjoner.