
Operativsystemets integritet
Apple utformar sin operativsystemprogramvara med säkerheten i fokus. Designen har en maskinvarubaserad betrodd rot, som gör det möjligt att starta säkert, och en säker och snabb programuppdateringsprocess. Apples operativsystem använder också inbyggda, funktionsspecifika kretsbaserade maskinvarufunktioner som bidrar till att förhindra obehörigt utnyttjande av operativsystemet när det körs. Körningsfunktionerna skyddar den betrodda kodens integritet medan den körs. Apples operativsystemprogramvara hjälper till att begränsa angrepp och utnyttjandet av tekniker, vare sig de har sitt ursprung i en skadlig app, på webben eller kommit via någon annan kanal. De här skydden är tillgängliga på enheter med Apple-utformade SoC:er som stöds, inklusive iOS, iPadOS, macOS på en Mac med Apple Silicon, tvOS, visionOS och watchOS.
Funktion | A10 | A11, S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
Genomdrivning av minnesintegritet med förbättrat minnestaggningstillägg |
|
|
|
|
|
|
|
1: Secure Page Table Monitor (SPTM) stöds i SoC:erna A15 eller senare och M2 eller senare och ersätter Page Protection Layer på plattformar som stöds.
2: Page Protection Layer (PPL) och Secure Page Table Monitor (SPTM) genomdriver körning av signerad och betrodd kod på alla plattformar med undantag för macOS (eftersom macOS är utformat för att köra alla typer av kod). Alla andra säkerhetsegenskaper, inklusive skyddet för sidtabeller, finns på alla plattformar som stöds.
Kärnintegritetsskydd
När operativsystemets kärna slutför initiering aktiveras ett kärnintegritetsskydd (Kernel Integrity Protection, KIP) som förhindrar ändringar av kärn- och drivrutinskod. Minnesstyrenheten tillhandahåller en skyddad fysisk minnesregion som iBoot använder till att läsa in kärnan och kärntillägg. När starten är färdig nekar minnesstyrenheten skrivningar till den skyddade fysiska minnesregionen. Approcessorns minneshanteringsenhet (Memory Management Unit, MMU) är konfigurerad så att den förhindrar mappning av privilegierad kod från fysiskt minne utanför den skyddade minnesregionen och förhindrar skrivbara mappningar av fysiskt minne i kärnminnesregionen.
För att förhindra omkonfigurering låses maskinvaran som används till att aktivera KIP när startprocessen är klar så att den inte går att omkonfigurera.
Begränsningar för snabb behörighet
Från och med Apple A11 Bionic och S3 SoC har ett nytt maskinvaruprimitiv introducerats. Detta primitiv, begränsningar för snabb behörighet, innehåller ett processorregister som snabbt begränsar behörigheterna per tråd. Med dessa begränsningar för snabb behörighet (eller APRR-register) kan operativsystem som stöds ta bort körbehörigheter från minnet – utan hantering av systemanrop och sidtabeller. De här registren begränsar ytterligare möjligheten för angrepp via webben, framförallt från kod som kompileras vid körning (just-in-time-kompilerat, JIT) eftersom minne i praktiken inte kan köras samtidigt som information läses och skrives till det.
Integritetsskydd för systemcoprocessor
Den fasta coprocessorprogramvaran hanterar många kritiska systemuppgifter – t.ex. Secure Enclave, bildsensorprocessorn och rörelsecoprocessorn. Därför är dess säkerhet central för säkerheten för systemet som helhet. För att förhindra ändring av coprocessorns fasta programvara använder Apple en mekanism som kallas integritetsskydd för systemcoprocessor (SCIP).
SCIP fungerar ungefär som KIP: Vid start läser iBoot in de enskilda coprocessorernas fasta programvara i en skyddad minnesregion som är reserverad och separat från KIP-regionen. iBoot konfigurerar varje coprocessors minnesenheter för att förhindra:
Körbara mappningar utanför dess del av den skyddade minnesregionen
Skrivbara mappningar i dess del av den skyddade minnesregionen
Vid start används även Secure Enclaves operativsystem för att konfigurera SCIP för Secure Enclave. Maskinvaran som används till att aktivera SCIP låses när startprocessen har slutförts. Det ska förhindra omkonfigurering.
Pekarautentiseringskoder
Pekarautentiseringskoder (PAC) används som skydd mot utnyttjande av minnesfelsbuggar. Systemprogramvara och inbyggda appar använder PAC till att förhindra ändring av funktionspekare och returadresser (kodpekare). PAC använder fem hemliga 128-bitarsvärden till att signera kärninstruktioner och data och varje användarutrymmesprocess har sina egna B-nycklar. Objekt saltas och signeras enligt vad som anges nedan.
Objekt | Nyckel | Salt |
|---|---|---|
Funktionsreturadress | IB | Lagringsadress |
Funktionspekare | IA | 0 |
Blockanropsfunktion | IA | Lagringsadress |
Blockbeskrivningspekare | DA | Lagringsadress + 0xC0BB |
Objective-C-metodcache | IB | Lagringsadress + klass + selektor |
Objective-C Isa-pekare | DA | Lagringsadress + 0x6AE1 |
Objective-C-superpekare | DA | Lagringsadress + 0xB5AB |
Selector Typed Objective-C ivars | DB | Lagringsadress + 0x57C2 |
Objective-C skrivskyddad klassdatapekare | DA | Lagringsadress + 0x61F8 |
C++ V-tabellposter | IA | Lagringsadress + hash (mangled method name) |
C++ V-tabellpekare | DA | Lagringsadress + hash (mangled base V-Table name) |
Beräknad Goto-etikett | IA | Hash (funktionsnamn) |
Kärntrådstatus | GA | • |
Statusregister för användartråd | IA | Lagringsadress |
Signaturvärdet lagras i de oanvända utfyllnadsbitarna överst i 64-bitarspekaren. Signaturen verifieras före användning och utfyllnaden återställs för att säkerställa en fungerande pekaradress. Om verifieringen misslyckas avbryts åtgärden. Den här verifieringen gör det svårare att utföra många angrepp, t.ex. ett ROP-angrepp (Return-Oriented Programming) som försöker lura enheten att köra befintlig kod i skadligt syfte genom att manipulera funktionsreturadresser som lagras i stacken.
Page Protection Layer
Page Protection Layer (PPL) i iOS, iPadOS, visionOS och watchOS ska förhindra att användarutrymmeskod ändras efter att verifieringen av kodsignaturen har slutförts. PPL bygger på KIP och snabba behörighetsbegränsningar och hanterar förbigångar av sidtabellbehörigheten för att säkerställa att endast PPL kan ändra skyddade sidor som innehåller användarkod och sidtabeller. Systemet minskar angreppsytan kraftigt genom stöd för upprätthållande av kodens integritet genom hela systemet, till och med om kärnan har manipulerats. Detta skydd finns inte i macOS eftersom PPL endast omfattar system där all kod som körs måste vara signerad.
Secure Page Table Monitor och Trusted Execution Monitor
Secure Page Table Monitor (SPTM) och Trusted Execution Monitor (TXM) i iOS, iPadOS, macOS och visionOS är utformade så att de samverkar för att skydda sidtabeller för både användar- och kärnprocesser mot ändringar. Det inkluderar när angripare har skrivbehörighet till kärnan och kan förbigå kontrollflödesskydd. SPTM gör detta genom att använda en högre behörighetsnivå än kärnan och använder TMX:en med lägre behörighet till att faktiskt genomdriva policyerna som styr kodkörning. Det här systemet är utformat så att en TMX-kompromiss inte innebär att SPTM automatiskt förbigås på grund av att deras behörigheter är separerade och styrningen av tillförlitlighet mellan dem. I SoC:erna A15 eller senare och M2 eller senare ersätts PPL av SPTM (i kombination med TXM) som har en mindre angreppsyta och inte förlitar sig på tillförlitligheten hos kärnan ens under tidig start. SPTM bygger på nya kretsprimitiv som är en utveckling av Fast Permission Restrictions som används av PPL och är endast tillgänglig på processorerna som listas i tabellen ovan.
Genomdrivning av minnesintegritet
Genomdrivning av minnesintegritet (Memory Integrity Enforcement, MIE) är ett omfattande säkerhetsförsvar för minnet i Apple-plattformar som är tillgängligt i A19- och M5-processorer eller senare. MIE bygger på den robusta grund som Apples säkra minnestilldelare skapar i kombination med ett förbättrat minnestaggningstillägg (Enhanced Memory Tagging Extension, EMTE) i synkront läge och stöds av utförliga policyer för genomdrivning av taggkonfidentialitet. MIE är inbyggt i Apple Silicon och erbjuder ett enastående minnessäkerhetsskydd som alltid är aktivt för huvudsakliga angreppsytor, inklusive kärnan, samtidigt som användare får den kraft och prestanda de förväntar sig. Mer information finns i Memory Integrity Enforcement: A complete vision for memory safety in Apple devices på Apples Security Research-blogg.
Minnestaggningstillägg
2019 publicerade ARM specifikationen för minnestaggningstillägg (Memory Tagging Extension, MTE) som ett verktyg som hjälper maskinvara att hitta minnesfelsbuggar. MTE är ett minnestaggnings- och taggkontrollssystem där varje minnestilldelning taggas med en hemlighet. Maskinvaran garanterar att senare förfrågningar om minnesåtkomst endast tillåts om förfrågningen innehåller rätt hemlighet. Om hemligheterna inte överensstämmer kraschar appen och händelsen loggas. Det här gör det möjligt för utvecklare att identifiera minnesfelsbuggar omedelbart när de inträffar.
Förbättrat minnestaggningstillägg
EMTE stänger hålen som förhindrar att MTE används som ett aktivt försvar och inkluderar endast stöd för det säkrare synkrona läget. Åtkomst till otaggat minne från en taggad minnesregion kräver dessutom vetskap om den regionens tagg, vilket gör det betydligt svårare för en angripare att dra nytta av out-of-bounds-buggar i dynamiskt taggat minne som ett sätt att förbigå EMTE genom att direkt ändra otaggade tilldelningar.
Genomdrivning av taggkonfidentialitet
Genomdrivning av taggkonfidentialitet skyddar implementeringen av de säkra tilldelarna från tekniska hot och bevakar konfidentialiteten hos EMTE-taggar, inklusive mot angrepp på sidokanaler och vid spekulativ exekvering. Secure Page Table Monitor skyddar kärntilldelarlagring och tagglagring. Systemet säkerställer också att kärnan omfattas av samma taggkontrollsregler som i användarutrymmet när kärnan ansluter till ett minne åt en app. Genomdrivning av taggkonfidentialitet är också utformad för att minska taggläckage på grund av timingangrepp eller spekulativa angrepp och har till och med ett skydd mot Spectre V1.