Achter Apples nieuwe geheugenbescherming MIE gaan veel interessante technieken schuil. We bekijken hoe dit in elkaar steekt, welke overwegingen van belang zijn bij de keuze van dergelijke mechanismen en hoe MIE van Apple verschilt van de concurrentie.
Apple verankert geheugenbeveiliging diep in hardware en iOS
Met de 17e generatie iPhones en iOS 26 heeft Apple – relatief onopgemerkt – een nieuwe geheugenbeveiligingstechnologie geïntroduceerd, genaamd Memory Integrity Enforcement (MIE). Deze technologie moet het aanzienlijk moeilijker maken om aanvallen te construeren op basis van geheugenfouten. MIE is geen afzonderlijke functie, maar een nauw verweven beveiligingsconcept dat bestaat uit hardware (A19- en A19-Pro-chips), besturingssysteem en toolchain.
Het uitgangspunt is een oud, maar nog steeds centraal probleem: geheugenfouten zoals buffer overflows of use-after-free kunnen optreden als gevolg van programmeerfouten en ertoe leiden dat een programma onbedoeld toegang krijgt tot ongeoorloofde geheugengebieden. Dergelijke situaties vormen vaak beveiligingslekken die aanvallers kunnen misbruiken.
MIE is bedoeld om dergelijke geheugenfouten te voorkomen, zodat er geen aanval op kan worden gebaseerd. De technische basis voor MIE is de ARM Memory Tagging Extension (MTE) en een samen met ARM verder ontwikkelde uitbreiding die Apple gebruikt als Enhanced MTE (EMTE).
Een geheugenfout is zo gevaarlijk omdat het een aanvaller in staat kan stellen om buiten een daarvoor bestemde buffer te schrijven (klassieke out-of-bounds/buffer overflow) of reeds vrijgegeven geheugen verder te gebruiken (use-after-free). In beide gevallen ontstaat de mogelijkheid om een object door een ander te vervangen of een code- of functiepointer te overschrijven en de uitvoering van het programma te manipuleren.
Aanvallers gebruiken deze scenario’s bijvoorbeeld om rechten op het aangevallen systeem te verkrijgen (privilege escalation) of om hun eigen code uit te voeren (RCE, remote code execution). Een praktische verdediging moet er daarom voor zorgen dat toegang tot het geheugen alleen wordt toegestaan als duidelijk is dat de code toegang moet hebben tot precies dat geheugengebied. Memory-tagging maakt precies dat mogelijk.
MTE & EMTE
ARM MTE voorziet geheugengebieden van korte markeringen (tags). Concreet werkt MTE standaard met een granulariteit van 16 bytes: elk aaneengesloten blok van 16 bytes (een granule) krijgt een eigen 4-bit tag. Een pointer naar een geheugengebied draagt ook een 4-bit tag in zijn bovenste bits. Bij een benadering vergelijkt de CPU de tag van de pointer met de tag van de geadresseerde geheugengranule. Als die niet overeenkomen, wordt de benadering geblokkeerd en een uitzondering gegenereerd. Tag-waarden worden bij geheugengebruik doorgaans willekeurig opnieuw ingesteld. Hierdoor kunnen veel out-of-bounds- en use-after-free-scenario’s worden gedetecteerd en geblokkeerd.

Volgens de ARM-specificatie is MTE relatief flexibel: er zijn synchrone en asynchrone controlemodi. In de synchrone modus wordt de foutieve benadering onmiddellijk gestopt. In de asynchrone modus wordt de overtreding alleen gemarkeerd en pas later, bijvoorbeeld bij de volgende contextwisseling, als fout gemeld.
De asynchrone modus presteert beter, maar laat bewust een tijdvenster open waarin een foutieve benadering niet onmiddellijk wordt gestopt. Voor een always-on-beveiligingsdoel in kritieke systeemcomponenten is dat niet voldoende.
Een kernprobleem van MTE is dat het geen aanvallen op geheugengebieden controleert die niet zijn getagd – er is immers geen tag voor dat geheugen. Dit omvat ook potentieel kritieke gebieden, zoals globale variabelen en daarmee mogelijk belangrijke delen van de programmastatus.
Apple en ARM hebben MTE daarom uitgebreid. Bij Enhanced MTE (EMTE) moeten benaderingen tot niet-getagde geheugengebieden vanuit getagde regio’s ook een tag hebben, namelijk die van de regio van herkomst.
Allocator en enforcement
Bij MIE combineert Apple EMTE met andere maatregelen die samen veelvoorkomende aanvalsketens betrouwbaar moeten voorkomen. Hiertoe behoren een type-bewuste allocator en tag confidentiality enforcement.
Bij type-gescheiden toewijzingen (in Apples implementatie kalloc_type voor de kernel en xzone malloc voor de gebruikersruimte) komen verschillende objecttypes in verschillende geheugenpools terecht. Dit maakt geheugenfouten aanzienlijk moeilijker, omdat er in een geheugengebied alleen objecten van een bepaald type staan en geen willekeurige andere structuren.
Een aanvaller kan daarom niet langer zomaar een te exploiteren object in een vrijgekomen of aangrenzende geheugenruimte plaatsen, maar moet zich richten op precies het juiste type en dus ook het juiste geheugengebied. In combinatie met EMTE moet een aanvaller dus niet alleen de juiste tag gebruiken, maar ook nog eens het juiste type of paginagebied compromitteren.
Deze gelaagdheid verhoogt de inspanning voor aanvallers aanzienlijk, vooral bij Spectre V1-achtige aanvallen. Om te voorkomen dat aanvallers de juiste tags kunnen bemachtigen voor onjuiste benadering, is het belangrijk dat het interne geheugen van de kernel-allocator en met name de tags geheim blijven.
Apple gebruikt hiervoor de volgende technieken: Secure Page Table Monitoring controleert en bewaakt wijzigingen in de paginatabellen, zodat gevoelige geheugengebieden zoals het tag-geheugen en de interne gegevens van de kernel-allocator niet eenvoudigweg kunnen worden toegewezen aan een leesbare of zelfs beschrijfbare adresruimte.
Hierdoor kunnen aanvallers noch de gebruikte tags uitlezen, noch de allocator-metadata manipuleren. Omdat de tags geheim blijven en de toewijzing van geheugenpagina’s niet kan worden gemanipuleerd, blijven EMTE en MIE ook effectief als delen van de kernel zijn gecompromitteerd.
Hardened Tag-Checks is Apples term voor het controleren van de tags op hardwareniveau dat zo is ontworpen dat er geen op timing gebaseerde conclusies over tags kunnen worden getrokken door de speculatieve uitvoering van commando’s door moderne CPU’s. In twee onderzoeksrapporten, getiteld Sticky Tags en TikTag, konden Nederlandse en Zuid-Koreaanse experts aantonen dat de MTE-implementatie van Googles Pixel kwetsbaar is voor dergelijke aanvallen (zie de link op het einde).
Gerandomiseerde tags betekent dat geheugengebieden willekeurige tags toegewezen krijgen en dat aanvallers deze niet kunnen berekenen of voorspellen.
Beter dan de rest?
Apple zelf beschrijft MIE als de belangrijkste ontwikkeling op het gebied van geheugenbeveiliging in de geschiedenis van besturingssystemen voor eindgebruikers (zie de link op het eind). Of dat klopt, zal zoals altijd de tijd leren, maar MIE lijkt in elk geval zeer doordacht. Door de geïntegreerde ontwikkeling van hardware en software kan Apple altijd een zeer hoog beveiligingsniveau op zijn apparaten bieden, vooral in vergelijking met sommige apparaten met Android-besturingssystemen.
Voor maatregelen tegen geheugenfouten in combinatie met op side channels gebaseerde, speculatieve aanvallen is een dergelijke geïntegreerde ontwikkeling een enorm voordeel en eigenlijk een voorwaarde voor een holistische beveiligingsarchitectuur.
Android-gebaseerde, op veiligheid gerichte besturingssystemen zoals GrapheneOS voor Google Pixel smartphones maken ook gebruik van MTE en volgen bovendien een opensource-strategie, wat een brede (onafhankelijke) veiligheidsevaluatie vereenvoudigt. Bovendien maakt GrapheneOS, net als Apple, gebruik van geharde geheugentoewijzingen (hardened_malloc).

MTE en de geharde toewijzing vormen sterke barrières tegen geheugenfouten. Enerzijds ruimtelijk (spatial), omdat overloop naar aangrenzende geheugengebieden moet mislukken door ‘deterministic adjacent tag exclusion’, Guard Pages en MTE. En anderzijds temporeel (temporal), omdat door een gereserveerde tag voor vrije slots eventuele Use-after-free-fouten moeten opvallen.
Apple bouwt door de getypeerde toewijzing bovendien een soort semantische barrière in door gegevensstructuren van hetzelfde type te groeperen, wat het gericht binnensluizen van andere structuren drastisch bemoeilijkt. Daarvoor maakt GrapheneOS gebruik van grootteklassen, waardoor echter theoretisch nog steeds typeverwarring als aanvalsvector mogelijk blijft tussen objecten van dezelfde grootte. De oplossing van Apple is hier dus iets rigoureuzer.
Bovendien lijkt Apple een sprong voorwaarts te hebben gemaakt bij de bescherming van de tags zelf. Voor GrapheneOS op Pixel-smartphones is het een nadeel dat het met de beschikbare hardware moet werken. Side-channel-aanvallen zijn diep verankerd in de hardware architectuur, zoals blijkt uit de genoemde aanvallen StickyTag en TikTag. Apple kan dit op een holistischere manier aanpakken.
Conclusie
Met Memory Integrity Enforcement (MIE) volgt Apple een systeembrede aanpak voor het beveiligen van het geheugen, waarbij hardware en software nauw met elkaar zijn verweven. Door de combinatie van de uitgebreide ARM Memory Tagging Extension (EMTE), getypeerde toewijzing en bescherming van de tag-informatie pakt MIE veel bekende kwetsbaarheden aan die te wijten zijn aan geheugenfouten en speculatieve uitvoering.
Soortgelijke benaderingen bestaan ook in het Android-systeem, bijvoorbeeld bij GrapheneOS, dat gebruikmaakt van MTE en geharde toewijzingen. Het belangrijkste verschil zit in de mate van integratie: Apple kan door de controle over hardware en software de mechanismen beter op elkaar afstemmen, terwijl andere systemen sterker afhankelijk zijn van de beschikbare hardwarefuncties.
David Kachel en Marco den Teuling
Praat mee