Startprocessen för Mac-datorer med Apple Silicon
När en Mac med Apple Silicon slås på utförs en startprocess som liknar den för iPhone och iPad.
Kretsen kör kod från Boot ROM i det första steget i tillförlitlighetskedjan. Vid säker macOS-start på en Mac med Apple Silicon verifieras inte bara själva operativsystemets kod, utan även de säkerhetspolicyer och till och med de kärntillägg (stöds även om det inte rekommenderas) som konfigurerats av auktoriserade användare.
När LLB (Low Level Bootloader) startas verifierar det signaturerna och läser in systemparkopplad fast programvara för interna SoC-kärnor som styrenheterna för lagring, visning, systemhantering och Thunderbolt LLB ansvarar också för inläsning av LocalPolicy, vilket är en fil som signerats av Secure Enclave-processorn. LocalPolicy-filen beskriver den konfiguration som användaren har valt för säkerhetspolicyer vid systemstart och körning. LocalPolicy har samma datastrukturformat som alla andra startobjekt, men det signeras lokalt av en privat nyckel som endast är tillgänglig inom en viss dators Secure Enclave istället för att signeras av en central Apple-server (som programuppdateringar).
För att förhindra replay av tidigare LocalPolicy-filer måste LLB söka upp ett anti-replay-värde från den SSC (Secure Storage Component) som är kopplad till Secure Enclave. Den gör den genom att använda Secure Enclaves Boot ROM och säkerställer att anti-replay-värdet i LocalPolicy matchar anti-replay-värdet i SSC. Detta förhindrar att en gammal LocalPolicy-fil – som kan ha konfigurerats för en lägre säkerhet – återanvänds i systemet efter att säkerheten har uppgraderats. Resultatet blir att säker start på Mac-datorer med Apple Silicon inte bara utgör ett skydd mot nedgradering av operativsystemsversionen, utan även mot nedgraderingar av säkerhetspolicyer.
LocalPolicy-filen bekräftar om operativsystemet har konfigurerats för full, minskad eller tillåtande säkerhet.
Full säkerhet: Systemet beter sig som iOS och iPadOS och tillåter endast start av programvara som har identifierats som den senast tillgängliga vid installationstillfället.
Minskad säkerhet: LLB instrueras att lita på ”globala” signaturer som hör samman med operativsystemet. Detta tillåter systemet att köra äldre versioner av macOS. Eftersom äldre versioner av macOS oundvikligen har svagheter som inte är åtgärdade beskrivs detta säkerhetsläge som Minskad säkerhet. Detta är också den policynivå som krävs för att stöda start av kärntillägg.
Tillåtande säkerhet: Systemet beter sig som Minskad säkerhet på så vis att det använder global signaturverifiering för iBoot och vidare, men det instruerar också iBoot att acceptera att vissa startobjekt är signerade av Secure Enclave med samma nyckel som används till att signera LocalPolicy. Med den här policynivån kan användare bygga, signera och starta egna anpassade XNU-kärnor.
Om LocalPolicy indikerar till LLB att det valda operativsystemet körs med full säkerhet utvärderar LLB den anpassade signaturen för iBoot. Om det körs med minskad eller tillåtande säkerhet utvärderas den globala signaturen. Eventuella fel vid signaturverifiering leder till att systemet startar i recoveryOS så att reparationsalternativ visas.
När LLB lämnar över till iBoot läser den in macOS-parkopplad fast programvara, t.ex. den för Secure Neural Engine, processorn som alltid är på och annan fast programvara. iBoot analyserar också information om LocalPolicy-filen som LLB har lämnat över. Om LocalPolicy indikerar att det ska finnas en AuxKC (Auxiliary Kernel Collection) söker iBoot efter den i filsystemet, verifierar att den är signerad av Secure Enclave med samma nyckel som LocalPolicy samt verifierar att dess hash matchar en hash som är lagrad i LocalPolicy. Om AuxKC verifieras placerar iBoot den i ett minne med startkärnsamlingen innan hela minnesregionen med startkärnsamlingen och AuxKC låses med SCIP (System Coprocessor Integrity Protection). Om policyn indikerar att en AuxKC ska finnas, men den inte kan hittas, fortsätter systemet att starta i macOS utan den. iBoot ansvarar också för att verifiera rothash för den signerade systemvolymen (SSV) för att kontrollera att filsystemet som kärnan kommer att länka in är fullständigt integritetsverifierat.