MacOS-apps die cryptografie gebruiken worden mogelijk trager door fix voor lek

Apps voor macOS die cryptografische berekeningen uitvoeren worden in de toekomst mogelijk trager, specifiek op apparaten met Apple M1- en M2-socs. Die apps zullen vermoedelijk een fix uitvoeren voor een lek dat het mogelijk maakt keys uit te lezen en die fix zorgt voor vertraging.

Apps moeten de fix gaan uitvoeren, omdat Apple het lek in de M1 en M2 niet kan fiksen, melden beveiligingsonderzoekers. Zij hebben het lek GoFetch genoemd. De fix kan bijvoorbeeld bestaan uit het laten uitvoeren van cryptografische berekeningen op de zuinigere kernen van de soc, die dus mindere prestaties bieden. Ook een techniek die 'blinding' heet kan een oplossing bieden. Daarmee voegt de software random code toe om de key te verbergen, maar ook dat zorgt voor verminderde prestaties.

Het lek in M1- en M2-socs zit in de 'data memory-dependent prefetchers', een functie van de soc om de geheugenadressen te voorspellen van gegevens waartoe code in de nabije toekomst waarschijnlijk toegang zal hebben. Die functie vermindert de latency tussen processor en geheugen. De functie zit ook in Intel Raptor Lake-processors, maar die zijn beter beschermd tegen dit lek.

Het lek zorgt ervoor dat de app zonder roottoegang kleine stukjes van de key kan uitlezen. Een RSA-2048-key uitlezen duurt daardoor rond 50 minuten. Ontwikkelaars kunnen op een M3-soc DMP uitzetten, waardoor de aanval daar niet altijd mogelijk is. Tot hoeveel prestatieverlies dat leidt, is niet duidelijk.

GoFetch-lek in Apple M1 M2
GoFetch-lek in Apple M1 en M2

Door Arnoud Wokke

Redacteur

21-03-2024 • 21:44

52 Linkedin Whatsapp

Reacties (52)

52
50
37
8
1
7
Wijzig sortering
Kan iemand meer context geven? Wat betekend de afbeelding onder het artikel? Waarom kan het niet worden gefixt (Apple maakt zelf de firmware)? Wat zijn de type apps die het betreft, en wat is de reële impact?

[Reactie gewijzigd door kamerplant op 21 maart 2024 21:55]

Geheugentoegang is verschrikkelijk langzaam. Om CPUs op een acceptabele snelheid te kunnen draaien, is het daarom nodig om te "voorspellen" wat de komende data is die nodig is - een programma dat adres 0x001, 0x002, en 0x003 leest, heeft waarschijnlijk in de nabije toekomst ook 0x004 en 0x005 nodig, dus deze kan je alvast uit het geheugen lezen.

Het voordeel is dat de toegang van 0x004 significant sneller is, dus de CPU hoeft niet op het geheugen te wachten. Het nadeel is dat de toegang van 0x004 sneller is - dus een aanvaller kan het programma timen en concluderen dat het programma als geheime waardes 0x002 en 0x003 gebruikt.

Deze zogenaamde "side-channel attacks" zijn al heel lang bekend. De gebruikelijke oplossing is om de code expres inefficient te schrijven, waardoor deze altijd dezelfde draaitijd heeft en het onmogelijk is voor de CPU om te voorspellen welke data nodig is. Dit maakt een timing-aanval onmogelijk.

Het probleem dat Apple nu heeft is dat hun CPU probeert extra "slim" te zijn: in plaats van alleen te kijken naar geheugentoegang, kijkt het ook naar de data in het geheugen: iets dat er uit ziet als een geheugenadres zal waarschijnlijk in de toekomst gebruikt worden als geheugenadres - dus kan die data alvast worden geladen.

In deze aanval geeft de aanvaller speciaal gekozen waardes aan het slachtofferprogramma, die er voor zorgen dat de CPU denkt dat een tussenwaarde er uit ziet als een geheugenadres. Door de waardes goed te kiezen, kan je zo stukje bij beetje aan de hand van de tijdsduur van de berekening een geheime sleutel uitlezen.

Dit is waarschijnlijk niet in firmware te fixen, want het is een fundamenteel defect in het chipontwerp. In principe is alle cryptografie-code die op een Apple-SoC draait kwetsbaar - het paper laat zien dat de aanval zelfs werkt bij een standaard SSL-verbinding naar bijvoorbeeld een webserver, maar ook twee applicaties die op dezelfde machine draaien kunnen elkaar aanvallen. Zolang er enige vorm van cryptografie is over data die van een derde partij komt, is een aanval mogelijk.

De "oplossing" is om de code zo te herschrijven dat de CPU de data onmogelijk kan zien als een geheugenadres - in feite moet je dus de CPU voor de gek houden. Dat is het "blinding". Of je draait het op een CPU-core die geen "slimme" voorspeller heeft.

[Reactie gewijzigd door laurxp op 21 maart 2024 23:30]

Los je het probleem ook niet op door het memory te encrypten?
Dat zet hoogstens een extra stap in het process, maar lost het niet op.
Waarschijnlijk niet.

De CPU heeft de niet-geencrypte waardes nodig om er berekeningen op uit te voeren - dus de CPU heeft dan per definitie ook toegang tot de niet-geencrypte waarde om een foutieve prefetch te doen.

Aan de andere kant, bij blinding doe je heeel ruwweg hetzelfde: in plaats van de geheime waardes werk je met een afgeleide variant die gelekt zou mogen worden. Het verschil is dat er geen decryptie nodig is voor het rekenwerk, de operaties werken op de geblinde waarde. Hiervoor is het wel nodig om je hele cryptografie-algoritme te herschrijven.
Wat ik zo raar vind, is dat men er van uit gaat dat de ‘vijandige software’ al op dezelfde computer / soc draait. Ik bedoel.. Het is een beetje alsof de vijand alle verdedigingslinies al doorbroken heeft, over de stadsmuren is en in de achtertuin aan de achterdeur staat te morrelen. Dan kun je allerlei trucs bedenken, maar hoe realistisch is het dan nog om te denken dat je nog veilig bent in je huis? Als de computer zelf al besmet is, wordt het toch sowieso heel moeilijk, zo niet op termijn onmogelijk om data waterdicht af te schermen?
Dat is omdat vijandige software ook daadwerkelijk op je eigen PC draait! Denk bijvoorbeeld maar aan de Javascript-code van de willekeurige websites die je bezoekt, of de clouddiensten waar je een stukje van een server huurt ipv de hele server.

De oplossing is om een soort "zero-trust" model te gebruiken: alle code is verdacht en moet dus in volledige isolatie draaien, en voor alle toegang moeten er expliciet rechten verkregen worden. Eigenlijk wil je het draaien alsof ieder programma een compleet eigen computer heeft.
Staat uitgelegd in de link. In het kort, de aanvaller (Dilitium encryptie) moet eerst "offline" een "m" aantal berichten verzamelen, die hij vervolgens "online" weer aanbiedt om daarmee stukjes van de private key te verkrijgen. Ik vermoed dat het aantal minuten opgeteld het aantal minuten weergeeft wat het kost om de verschillende methodes van encryptie te kraken.

Aangezien dit in de hardware van de M1/M2 niet goed zit, is dat ook niet meer te fixen. Toekomstige M2's zullen dit wel gefixed krijgen met een nieuwe revisie, maar alles wat er nu gemaakt is, heeft pech.

Ik zat nog even door te lezen, elke encryptie vorm heeft een net andere tactiek. Zie de stukjes "Experimental result" in de paper in de link van het artikel. De Dilithiium encryptie kost iets van 15 uur in totaal om die te slopen. En voor de rest gaat het VER boven mijn pet ...

[Reactie gewijzigd door Houtenklaas op 21 maart 2024 22:18]

Eerlijk gezegd zou het me verbazen als dit in M1 of M2 nog hersteld gaat worden. Een echte oplossing voor dit probleem zal waarschijnlijk pas in latere generaties zitten.
Eerlijk gezegd zou het me verbazen als dit in M1 of M2 nog hersteld gaat worden
Het hangt af van de complexiteit van het probleem of er een nieuwe stepping ervoor uitgebracht wordt.
Dan is er toch sprake van een soort patroon in het internet verkeer naar de computer toe?

Is het dan niet op te vangen in de router waar de computer achter hangt?
Dat is een stuk lastiger omdat de router hele packets krijgt die ook nog eens beïnvloed worden door andere activiteit op het netwerk.
Op AppleInsider wordt het best ok uitgelegd en worden die getalletjes ook wat toegelicht. (het is de tijd die nodig is om dergelijke sleutels te kraken).

https://appleinsider.com/...nd-cant-be-patched-easily

Het plaatje komt rechtstreeks uit het GoFetch rapport.
Enig idee om welke applicaties het dan gaat? Is dit niet van toepassing op de M3?
Het gaat vooral om libraries zoals OpenSSL.
Niet echt “apps” dus in de zin van gebruikersapps. Dit gaat om de onderliggende software die gebruikt wordt door die apps.
- Security Framework
- CommonCrypto
- LibreSSL
- Apple CryptoKit
- Secure Transport

Alle apps die internet (vooral https) gebruiken zoals browsers of chat-apps, gebruiken die libraries om een beveiligde verbinding te leggen. Ook de App store, als je een app download is die versleuteld en moet worden ontsleuteld. Maar ook offline apps zoals passwordmanagers die lokaal cryptografie doen.

Dus echt bijna alles zal er last van krijgen. De vraag is alleen hoe erg dat in de praktijk is.

[Reactie gewijzigd door Mushroomician op 22 maart 2024 02:03]

Dus echt bijna alles zal er last van krijgen. De vraag is alleen hoe erg dat in de praktijk is.
Ik denk dat het echt heel erg meevalt als het puur beperkt is tot cryptografie.
De M1 draait crypto algoritmes op snelheden van honderden megabytes tot gigabytes per seconde. Zelfs als daar 50% af gaat is het nog steeds meer dan genoeg voor vrijwel alle 'normale' toepassingen zoals het decrypten van web verkeer en videostreams. Misschien pakt zo'n crypto stream dan 2% van een CPU in plaats van 1%.
Voor heel specifieke crypto heavy toepassingen zal het wel een stukje pijnlijker zijn.
Oh, dat klinkt niet best. Dan maar even goed in de gaten houden. Heel erg bedankt voor de uitleg!
De laatste zin van het paper laat zien dat het probleem groter is dan alleen de M1/M2, volgens de onderzoekers:
Given our findings that DMPs also exist on the Apple M2/M3 and Intel 13th Generation CPUs, the problem seemingly transcends specific processors and hardware vendors and thus requires dedicated hardware countermeasures.
De huidige proof of concept is ontwikkeld voor de M1/M2, maar de onderzoekers verwachten dat Intel en de M3 ook dit soort kwetsbaarheden hebben. Ik vermoed dat het een kwestie van tijd is voor dat onderzoek klaar is.

Tot alle versleutelingssoftware een bepaalde bit aanzet die alleen in hele recente hardware zit, zijn de oudere generaties effectief niet zo kwetsbaar als de nieuwe.

[Reactie gewijzigd door GertMenkel op 22 maart 2024 07:04]

Eventjes doemdenken, maar kan dit een slim bedachte planned obsolescence zijn?

Keer op keer komt Apple met iets dat hun oude producten een pak slomer maakt.
Beveiligingslekken worden ‘regelmatig’ gevonden in alle processors. Hier worden dan fixes voor uitgebracht en dit heeft vaak een negatief effect op performance.

Dus ja dit kan natuurlijk opzettelijk zijn maar persoonlijk betwijfel ik.
Toen de beerput over de prefectchers voor het eerst open ging, werden sommige Intel processoren tot 40% trager in hypervisor toepassingen. Dat was zo erg, dat sommige zwaarbezette clusters die de fix moesten toepassen fysiek servers moesten bijkopen en bijplaatsen om de load nog te kunnen dragen. Er kwamen toen ook advisories uit dat je bij complete controle over een cluster dat enkel vertrouwde code draaide, best die fixes maar niet uit moest voeren.

Gelukkig was dat wel met firmware en microcode te beveiligen op server/device niveau, want wie kan tegenwoordig nog alle code overzien die draait, supercomputers met specifieke rekenmodellen en weinig anders? Nu bij Apple moeten afzonderlijke applicaties dus hun gedrag aanpassen, of het wordt onveilig. Dat doet qua security nog een stuk meer pijn, want ga al die software developers eens zover krijgen. En dan moet je als je om security geeft, dus alle app updates in de gaten houden, in het meest extreme geval bepaalde apps uitschakelen en pas weer gaan gebruiken na die updates. Niet veel mensen en instituten zullen zo ver gaan hiermee. Thuisgebruikers en MKB draaien vast gewoon door alsof er niets aan de hand is, maar dit is voor high security 'want Apple is walled garden' type omgevingen wel een heel vervelende. Misschien hebben die nog wel liever 40% performance verlies in zo een omgeving, dan dit knagende gevoel rond app security.

En met de M3 moet je dus nog altijd als app een keuze maken voor wel of niet de 'data memory-dependent prefetchers' (DMP) feature te gebruiken. Er staat op SOC niveau, dus vermoedelijk dan niet enkel op encryptie routines te schakelen, maar voor heel die app aan/uit, of zelfs heel de SOC terwijl die app actief is aan/uit. Dus pas op zijn vroegst bij de M4 lijkt het dan finaal verholpen te kunnen zijn door Apple. Intel heeft toen ook meerdere generaties gehad waarbij het prestatieverlies steeds wat kleiner werd, dus dat is in de hardware design wereld prima voorstelbaar, dat dit bij Apple soortgelijk gaat nadreunen.
Het lijkt me sterk. Cachefouten zitten in heel veel CPU's, dat is simpelweg het resultaat van tientallen jaren van snelheidstrucs nu iedere generatie meer gigahertz toevoegen geen optie meer is. Al die trucs geven stiekem een klein beetje data weg door te meten wat het verschil is tussen de snelle uitvoer en de langzame uitvoer, en als je pech hebt dan kan een aanvaller daarmee data stelen.

Apple verkoopt genoeg apparaten waar de hardware gewoon weinig is voor de prijs die je ervoor overhandigt (de bare minimum RAM+opslag-combinatie bijvoorbeeld, die je ook niet kunt uitbreiden). Ik denk niet dat ze de CPU kunstmatig hoeven te verlangzamen, helemaal nu Intel en AMD de eerste M-chips alweer hebben ingehaald qua performance.

Daarnaast is "langzamer" natuurlijk relatief, ook op de efficiency cores zal Apple vele gigabytes per seconde kunnen versleutelen.
Het is echter vaak geen ‘slimme’ planned obselescence maar ‘domme’ mensen; het onvermogen van media en gebruikers om de technische complexiteit erachter te willen begrijpen.

Apple nerved niet opzettelijk hun telefoons zonder reden. Anders zouden ze ook geen 8 jaar software ondersteuning bieden.
De reden dat de telefoons trager werden gemaakt is omdat ze anders zouden uitvallen. Dat kwam weer door (natuurlijks) batterij degradatie en de manier hoe de processor tijdens pieken op korte tijd enorm veel stroom vraagt van de batterij die na een paar jaar dit niet meer aan kan.

Oplossing: cpu nerven of batterij vervangen. Ze kozen voor het eerste. Qua berichtgeving (en uberhaupt optie aanbieden tot batterij vervangen) hadden ze het wel netter kunnen doen overigens

[Reactie gewijzigd door lmartinl op 22 maart 2024 10:44]

Wat betekent dit feitelijk voor een eindgebruiker? Is het nu onveilig om mijn M2 MacBook te gebruiken voor gevoelige informatie omdat keys gekraakt kunnen worden? Of moet er dan eerst software draaien die dat überhaupt probeert?
Als je die software niet op je systeem hebt kan er ook niet naar de key gevist worden.
Als je niet voorzichtig bent in wat je allemaal op je systeem gooit heb je een groter probleem.

Soms kan zo'n aanval ook via een webbrowser uitgevoerd worden (Javascript is ook software), maar veel mogelijkheden daarvoor zijn al dichtgetimmerd sinds de Meltdown/Spectre lekken van Intel.
Weet iemand wat dit betekent voor iPadOS (en iOS die geen M1/M2 kent)
Waarschijnlijk niet heel veel, aangezien de aanvaller een applicatie moet draaien op het apparaat wat wel wat moeilijker is op iOS.
Nee, dat is niet nodig. De aanval kan ook vanaf een externe machine gedaan worden - hoewel het dan wel een heel stuk langzamer is. Het paper geeft zelfs expliciet een voorbeeld van een aanval op een programma dat de OpenSSL-library gebruikt.
Zelf gelezen en in hun disclosure...
OpenSSL reported that local side-channel attacks (i.e., ones where an attacker process runs on the same machine) fall outside of their threat model.
Nee dus, geen remote attack.

Ze geven een voorbeeld waarbij er een attack plaatsvindt op een verbinding met de buitenwereld via OpenSSL, maar de attacker zit OP de computer waar de berekeningen (DMP) gedaan worden.
Het is wel een remote attack. Ten eerste is "local" relatief, doordat je in de huidige wereld van clouddiensten praktisch altijd een fysieke machine deelt met derden en een lokale aanvaller dus een realistisch threat model is. Ten tweede zijn lokale aanvallen triviaal te escaleren naar remote aanvallen - zie bijvoorbeeld experiment 5 & 6 in dit paper uit 2003 waar ze OpenSSL aanvallen. Er zijn simpelweg meer metingen nodig om dezelfde resultaten te behalen.

Daarnaast is de reactie van OpenSSL vrij irrelevant. Het OpenSSL-project kiest er bewust voor om niet te verdedigen tegen dit type aanvallen. Zie hun blog voor de beredenering achter zulke keuzes - het komt er op neer dat ze er weinig of niks tegen doen omdat het gaat om een hardware bug, en niet een issue in OpenSSL zelf. Volgens hun is het aan anderen om het probleem op te lossen.
Deze aanval is feitelijk een side-channel "lekkage" die mogelijk is op M1/2/etc chips omdat die die nieuwe DPM component hebben. Die bestaat niet op oudere chips (Bionic A14 e.d.); Apple zal deze fix dus hoogstwaarschijnlijk zo maken dat het OS de mitigatie alleen voor die chipsets gebruikt en verder niet.
Fair, alleen er zijn ook iPad Pro modellen met de M1/M2 aan boord. Ik denk dat er daarop gedoeld wordt.
Dit is weer een variatie op de Spectre bug die in Intel CPU's zat. Lastig dat ARM hier ook last van heeft. Maar dat was wel te verwachten.
Volgens mij eerder een variatie van Meltdown, waar ook veel ARM processoren last van hadden. Beide Spectre en Meltdown hadden betrekking om speculative execution.
Die technieken waar de aanval op wordt uitgevoerd kunnen in principe in de meeste CPU architecturen worden toegepast. Gezien de forse prestatiewinst die ermee te behalen is het niet gek dat de meeste moderne architecturen het in een of andere vorm gebruiken. Afhankelijk van de implementatie kan het lekken veroorzaken en door die combinatie worden inmiddels met enige regelmaat aanvallen op deze technieken in nieuwere CPUs gevonden. ARM is daar in geen wijze veilig voor.

[Reactie gewijzigd door Darkstriker op 21 maart 2024 22:39]

Mag dan hopen dat je keuze krijgt. Als het iets vertraagd dan zal het niet zo heel veel uitmaken, maar als het er echt heel veel trager door wordt, en he dus veel langer bezig bent, dan wil je liever de keuze, immers moet er dan ook andere software draaien die misbruik maakt van dat lek, wat niet heel waarschijnlijk is als alles goed beheert wordt.
Nee ik wil niet dat een persoon op hetzelfde netwerk de keuze kan maken voor een onveilige machine.
en hoe dwing je dat op dit moment af? Want ook al het Intel spul van een aantal jaar geleden heeft vergelijkbare bugs.
Ook die krijgen updates, verder is dat gewoon whataboutism.
Wat ik bedoel is dat je ook niet kan verifiëren of de andere kant ook die updates heeft gedaan dus dat het eigenlijk nooit mogelijk is zeker te weten of beide kanten veilig genoeg zijn.
Ja, als je beide machines onder beheer hebt. Maar als je vervolgens gaat communiceren met de rest van het internet waar je die garantie niet hebt hen je daar heel weinig aan.
Security is werken in lagen. Dus update policy's, maar ook gewoon firewalls en andere manieren die je kan bedenken.
Jij hebt inzage in alle update policies van alle servers waarmee jouw machines communiceren?

Voor iedere website, custom updater, licentie service, virus scanner en andere remote onzin legt jouw computer een verbinding met een remote server. Hopelijk altijd over TLS. De meeste mensen (inclusief beheerders) hebben geen inzage in de exacte configuratie van de servers waarmee al hun software verbindt en daarmee bedoel ik dat het ondoenlijk is om te controleren of al die machines correct gepatched en niet afluisterbaar zijn.
Ja, je kan je leverancier een briefje laten ondertekenen dat ze het voor elkaar hebben...
Wie ben jij om te beslissen dat iemand anders zijn werk niet goed kan doen omdat jij niet wilt dat een 'onveilige' machine aan het netwerk hangt. Ik noem vooral al dat er dan ook andere software op die machine draait die hier misbruik van zou maken, en dan heb jij als netwerk-/systeembeheerder dus sowieso al niet goed je werk gedaan.
Ik zeg overigens niet dat iedere jan doedel zomaar die keuze moet kunnen maken, maar als het zo vertraagd dat daardoor het echt de hele workflow tegen zit, dan moet jij als bedrijf dus wel de keuze krijgen om wel/niet die beperkingen te laten werken. Het is dan dus aan het bedrijf om misbruik tegen te gaan zodat je wel veilig die machine op volle snelheid te kunnen blijven gebruiken.
Maar ik verwacht dat we hier sowieso over minuscule vertragingen hebben, dus dat het sowieso onzin is dat we het hier over hebben. Alhoewel wij in het verleden zeker wel antivirus/malware software de deur uit hebben gedaan, en vervangen door andere, omdat die een behoorlijke impact hadden op het dataverkeer/werking computer.
Nou ja, geen mention van mijn tip 🐣
Wat ik mis in dit nieuwsbericht is of Apple dit gaat oplossen? Ik zie twee mogelijkheden:
1. Apple zorgt voor een software fix, die waarschijnlijk tot prestatievermindering en verhoogd stroomgebruik (lees: accu sneller leeg) leidt -> schadevergoeding aan klant.
2. Apple zorgt voor een terugroepactie waarbij de defecte/onveilige M1/M2 processoren vervangen worden voor correct werkende exemplaren.

[Reactie gewijzigd door ari3 op 22 maart 2024 11:05]

Werken beveiligingen van software zoals iLok ook niet op deze manier?

Op dit item kan niet meer gereageerd worden.

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee