Spectre v2-variant BTR lekt data op Intel, AMD en Arm
Een nieuw onthulde variant van Spectre v2 kan gevoelige gegevens uit het geheugen halen op systemen met processors van Intel, AMD en Arm. Volgens de onderzoekers werkt de aanval zelfs op volledig gepatchte machines met standaard beveiligingsinstellingen.
De techniek, Branch Target Reuse (BTR) genoemd, is ontwikkeld door de VUSec-groep van de Vrije Universiteit Amsterdam in Nederland en onderzoekers van Scuola Superiore Sant'Anna in Italie. Ze richt zich op just-in-time-compilers (JIT), die door besturingssysteemkernels, webbrowsers en runtimes worden gebruikt om ter plekke code te genereren.
Een aanvaller die al code kan uitvoeren op een doelsysteem, kan met BTR geheugeninhoud uitlezen, zoals wachtwoordhashes. De onderzoekers denken dat aanvallen via kwaadaardige webpagina's ook mogelijk zijn, maar ze hebben nog geen volledige browserexploit gebouwd.
Verouderde voorspellingen overleven de code
BTR misbruikt de manier waarop processors omgaan met code die tijdens het uitvoeren wordt aangepast. Moderne cpu's zorgen ervoor dat de daadwerkelijke instructies in het geheugen consistent blijven nadat code zichzelf heeft gewijzigd. Voor de branch predictor ligt dat anders.
"Het belangrijkste inzicht achter de aanval is dat moderne cpu's na zelfmodificatie weliswaar de architecturale coherentie van code herstellen, maar verouderde voorspellingen voor indirecte sprongen (oftewel branch targets) niet per se ongeldig maken", leggen de onderzoekers uit.
In een JIT-engine kunnen die verouderde vermeldingen blijven bestaan nadat de code waar ze bij hoorden al is verdwenen. Wordt er nieuwe code naar hetzelfde geheugen geschreven, dan kunnen de oude voorspellingen opnieuw worden gebruikt. De onderzoekers noemen dit een speculatieve execute-after-free-primitief. Daarmee kan een aanvaller speculatieve uitvoering de nieuwe code in sturen op offsets die niet meer kloppen.
Het team onderzocht drie doelwitten: Linux cBPF, de GraalVM-runtime van Oracle en SpiderMonkey, de JavaScript- en WebAssembly-engine van Firefox.
Wachtwoordhash van root gelekt uit de Linux-kernel
Tegen de Linux-kernel werden twee complete exploits gebouwd, die allebei misbruik maken van classic BPF (cBPF). De opvolger, eBPF, is beperkt tot gebruikers met verhoogde rechten, maar programma's zonder die rechten kunnen cBPF nog steeds gebruiken. Seccomp, socketfiltering en pakketfiltering in software zoals Docker en Chrome zijn er nog altijd van afhankelijk.
Op moderne Intel-cpu's leest de exploit willekeurig geheugen uit en omzeilt ze alle ingeschakelde mitigaties.
"Onze exploit lekt 8 bytes per seconde. Dat klinkt misschien traag, maar met zorgvuldig pointer chasing hoeven we maar een kleine hoeveelheid data te lekken om bij het geheim te komen", merken de onderzoekers op. In een demonstratie vonden en lekten ze de wachtwoordhash van root zodra die in het geheugen was geladen.
Ook Firefox en GraalVM getroffen
In Firefox zou de aanval beginnen op een kwaadaardige website die JavaScript uitvoert in de browser van het slachtoffer. Mozilla heeft site-isolatie nog niet volledig uitgerold, waardoor content uit andere tabbladen in dezelfde adresruimte kan staan als de code van de aanvaller.
Een proof-of-concept toonde aan dat verouderde branch-vermeldingen in SpiderMonkey op Intel-chips lang genoeg blijven bestaan om opnieuw te worden gebruikt. De onderzoekers schatten de leksnelheid op tientallen bytes per seconde, al vergt een werkende browserexploit nog meer werk.
Bij GraalVM zou BTR een aanvaller in staat kunnen stellen speculatief voorbij de geheugenmaskering te springen die de strengste sandboxmodus van de runtime tegen Spectre beschermt. De onderzoekers konden geheugenadressen betrouwbaar hergebruiken, maar de compilatie en garbage collection van GraalVM wisten de verouderde vermeldingen voordat ze konden worden misbruikt. Volgens hen lijkt dat obstakel "niet fundamenteel".
Chipmakers wijzen naar softwareoplossingen
De getroffen chipmakers en softwareontwikkelaars zijn ingelicht en hebben de bevindingen erkend. Cpu-fabrikanten stellen dat bestaande middelen zoals de indirect branch prediction barrier (IBPB) BTR kunnen tegengaan, en dat de oplossingen in software thuishoren.
Ontwikkelaars van de Linux-kernel hebben een x86-mitigatie toegevoegd die op elke cpu-kern een IBPB uitvoert wanneer een cBPF-programma wordt geplaatst in geheugen dat eerder werd gebruikt door uitgevoerde BPF-code. Oracle heeft een deel van de mitigaties uitgebracht. Mozilla geeft voorrang aan het afronden van site-isolatie boven oplossingen op basis van IBPB.
De onderzoekers bevestigden het gedrag op alle Intel-, AMD- en Arm-cpu's die ze testten. "Geen enkele huidige cpu heeft een mechanisme om die twee synchroon te houden, dus totdat fabrikanten er een toevoegen, is je cpu kwetsbaar", waarschuwen ze.
Hardwarematige beveiliging van de control flow, IBT bij x86 en BTI bij Arm, maakt misbruik lastiger maar neemt het risico niet weg. Oudere Intel-cpu's kunnen nog steeds speculatief instructies uitvoeren voordat de controle plaatsvindt. Lion Cove is de vroegste Intel-generatie waarbij de onderzoekers deze race condition niet aantroffen. Zelfs daar omzeilden ze IBT toen constant blinding was uitgeschakeld, al noemen ze IBT zonder race condition in combinatie met constant blinding een veel sterkere verdediging.
AMD liet SecurityWeek weten dat de paper geen nieuwe kwetsbaarheid in zijn producten aan het licht bracht en dat de bestaande richtlijnen voor Spectre v2 de techniek afdekken. Intel en Arm reageerden niet.
Onze analyse
BTR past in een bekend patroon: jaren nadat Spectre voor het eerst opdook, blijven onderzoekers nieuwe manieren vinden om de mitigaties te omzeilen die het probleem hadden moeten dichten. Het kernprobleem zit hier in de hardware, maar de last om het op te lossen komt terecht bij ontwikkelaars van kernels, browsers en runtimes. Dat doet vermoeden dat de aanpak ongelijk zal verlopen, omdat elk project de prestatiekosten anders afweegt, zoals de keuze van Mozilla om zich op site-isolatie te richten laat zien.
Voor de meeste lezers komt het er in de praktijk op neer dat ze Linux-kernels, browsers en runtimes zoals GraalVM bijgewerkt houden naarmate deze mitigaties beschikbaar komen. Multi-tenant hosts waar onbetrouwbare gebruikers cBPF-filters kunnen laden, verdienen extra aandacht. BTR sluit ook aan bij ander onderzoek, zoals recent werk waaruit bleek dat API's voor bestandsmeldingen gebruikersactiviteit lekken, en herinnert ons eraan dat systeemgedrag op laag niveau op onverwachte manieren data kan blootgeven. Het is de moeite waard om in de gaten te houden of er een volledige browserexploit opduikt, en of cpu-fabrikanten uiteindelijk een hardwaremechanisme toevoegen dat branch predictors gelijk laat lopen met het geheugen.
