Operativsystemets integritet
Apples operativsystemer er designet med sikkerhed som et centralt element. Designet omfatter en tillidsrod i hardwaren, der bruges til at gøre sikker start mulig, og en hurtig og sikker softwareopdateringsproces. Apples operativsystemer bruger også deres specielle chipbaserede hardwarefunktioner til at mindske risikoen for udnyttelse under operativsystemets afvikling. Under afvikling af godkendt kode beskytter disse funktioner den godkendte kodes integritet. Apples operativsystemer er med andre ord med til at danne et bolværk mod angrebs- og udnyttelsesteknikker, uanset om de kommer fra en skadelig app, fra internettet eller en anden kanal. De beskyttelsesforanstaltninger, der er beskrevet her, findes på enheder med SoC’er designet af Apple, herunder iOS, iPadOS, tvOS, watchOS og nu også macOS på en Mac med Apple Silicon.
Funktion | A10 | A11, S3 | A12, A13, A14 S4–S9 | A15, A16, A17 | M1, M2, M3 |
Se bemærkning 1 nedenfor. | |||||
Se bemærkning 2 nedenfor. |
Bemærkning 1: PPL (Page Protection Layer) kræver, at platformen kun afvikler signeret og godkendt kode. Det er en sikkerhedsmodel, der ikke er relevant i macOS.
Bemærkning 2: Secure Page Table Monitor (SPTM) understøttes på A15, A16 og A17 og erstatter Sidebeskyttelseslag på understøttede platforme.
Beskyttelse af kernens integritet
Når initialiseringen af operativsystemets kerne er færdig, aktiveres beskyttelsen af kernens integritet (KIP – Kernel Integrity Protection) for at bidrage til at forhindre modificering af kerne- og driverkode. Styreenheden til hukommelse tilvejebringer et beskyttet område i den fysiske hukommelse, som iBoot bruger til at indlæse kernen og kerneudvidelser. Når starten er gennemført, afviser styreenheden til hukommelse forsøg på at skrive til det beskyttede område af den fysiske hukommelse. App-processorens MMU (Memory Management Unit) konfigureres, så den bidrager til at forhindre overførsel af privilegeret kode fra fysisk hukommelse uden for det beskyttede hukommelsesområde og er med til at forhindre overførsel af fysisk hukommelse med skrivemulighed inden for kernehukommelsesområdet.
Ændring af konfigurationen forhindres, ved at den hardware, der bruges til at aktivere KIP, låses, når startprocessen er færdig.
Hurtige begrænsninger i adgangen
Med Apple A11 Bionic og S3 SoC'er som de første blev der indført en ny basal hardwarefunktion. Denne basale funktion, Hurtige begrænsninger i adgangen, omfatter et CPU-register, der hurtigt begrænser adgangen pr. tråd. Disse hurtige begrænsninger i adgangen (kaldes også APRR-registre) gør det muligt for understøttede operativsystemer at fjerne afviklingstilladelser fra hukommelsen uden at bruge ressourcer på et systemkald og gennemgang eller tømning af sidetabellen. Disse registre danner et ekstra bolværk mod angreb fra internettet, især mod kode, der kompileres på afviklingstidspunktet (JIT-kompileres), da hukommelsen i praksis ikke kan afvikles, samtidig med at der læses fra den eller skrives til den.
Beskyttelse af integriteten af systemets hjælpeprocessor
Hjælpeprocessorfirmware håndterer mange kritiske systemopgaver, f.eks. Secure Enclave, billedsensorprocessoren og bevægelseshjælpeprocessoren. Dens sikkerhed er derfor et vigtigt element i hele systemets sikkerhed. Apple bruger mekanismen Beskyttelse af integriteten af systemets hjælpeprocessor (SCIP – System Coprocessor Integrity Protection) til at forhindre modificering af hjælpeprocessorfirmwaren.
SCIP fungerer stort set på samme måde som beskyttelsen af kernens integritet (KIP – Kernel Integrity Protection): Under starten indlæser iBoot hver enkelt hjælpeprocessors firmware i et beskyttet hukommelsesområde, der er reserveret hertil og adskilt fra KIP-området. iBoot konfigurerer hver enkelt hjælpeprocessors hukommelsesenhed for at være med til at forhindre:
Eksekverbare mapninger uden for dens del af det beskyttede hukommelsesområde
Overførsel med skrivemulighed inden for dens del af det beskyttede hukommelsesområde
Under starten bruges Secure Enclave-operativsystemet til at konfigurere SCIP til Secure Enclave. Når startprocessen er færdig, låses den hardware, der bruges til at aktivere SCIP. Det har til formål at forhindre ændring af konfigurationen.
Koder til markørgodkendelse
Koder til markørgodkendelse (PAC) bruges til at beskytte mod udnyttelse af fejl, der ødelægger hukommelsen. Systemsoftware og indbyggede apps bruger PAC til at bidrage til at forhindre modificering af funktionsmarkører og returadresser (kodemarkører). PAC benytter fem hemmelige 128-bit værdier til at signere kerneinstruktioner og data, og hver brugerområdeproces har sine egne B-nøgler. Emner bliver tilføjet og signeret som vist nedenfor.
Emne | Nøgle | Salt |
---|---|---|
Funktionsreturadresse | IB | Lagringsadresse |
Funktionsmarkører | IA | 0 |
Blokaktiveringsfunktion | IA | Lagringsadresse |
Objective-C Method Cache | IB | Lagringsadresse + Klasse + Vælger |
C++ V-tabelværdier | IA | Lagringsadresse + Hash (name mangling-metode) |
Beregnet Goto-label | IA | Hash (funktionsnavn) |
Kerne-trådtilstand | GA | • |
Registre over brugertråde | IA | Lagringsadresse |
C++ V-tabelmarkører | DA | 0 |
Signaturværdien opbevares i de ubrugte padding-bits øverst i 64-bit markøren. Signaturen bliver godkendt inden brug, og paddingen bliver gendannet for at være med til at sikre, at markøradressen fungerer. Manglende godkendelse resulterer i en afbrydelse. Denne godkendelse forhindrer mange angreb, som f.eks. ROP-angreb (Return Oriented Programming), der forsøger at narre enheden til at afvikle eksisterende kode på en ondsindet måde ved at manipulere funktionsreturadresser, der opbevares i stakken.
Sidebeskyttelseslag
Sidebeskyttelseslag (Page Protection Layer, PPL) i iOS, iPadOS og watchOS har til formål at forhindre, at kode i brugerområdet modificeres, efter godkendelsen af kodesignaturen er gennemført. PPL, der bygger på KIP (Kernel Integrity Protection) og hurtige begrænsninger i adgangen, administrerer tilsidesættelser af sidetabeltilladelser for at sikre, at kun PPL kan ændre beskyttede sider, der indeholder brugerkode og sidetabeller. Systemet reducerer angrebsfladen betydeligt, fordi det understøtter håndhævelse af kodeintegritet i hele systemet, selv hvis en kerne bliver kompromitteret. Denne beskyttelse findes ikke i macOS, fordi PPL kun kan anvendes på systemer, hvor al kode, der afvikles, skal være signeret.
Secure Page Table Monitor og Trusted Execution Monitor
Secure Page Table Monitor (SPTM) og Trusted Execution Monitor (TXM) er designet til at arbejde sammen, så de bidrager til at beskytte sidetabeller til både bruger og kerneprocesser mod ændringer, også selvom hackere har mulighed for at skrive i kernen og kan omgå beskyttelsesforanstaltninger for kontrolflow. Det gør SPTM ved at bruge et højere rettighedsniveau end kernen og ved at bruge TXM, som har færre rettigheder, til at håndhæve de politikker, der styrer afviklingen af kode. Dette system er designet sådan, at kompromittering af TMX ikke automatisk er ensbetydende med omgåelse af SPTM, takket være denne adskillelse af rettigheder og styringen af godkendelser mellem dem. På A15-, A16- og A17-SoC’er bliver PPL erstattet af SPTM (kombineret med TXM), og det giver en mindre angrebsflade, som ikke er afhængig af tillid til kernen – heller ikke i begyndelsen af startprocessen. SPTM er også afhængig af nye primitiver til Silicon, der er en videreudvikling af de hurtige begrænsninger i adgangen, som Sidebeskyttelseslag bruger.