Meltdown är en sårbarhet för sidokanalläckor i hårdvara som finns i ett antal mikroprocessorer, särskilt de som tillverkas av Intel och ARM-arkitekturen . Meltdown använder bugg för implementering av spekulativ kommandoexekveringpå vissa Intel- och ARM-processorer (men inte AMD [1] [2] ), vilket gör att processorn ignorerar sidbehörigheter när den spekulativt utför minnesläsinstruktioner.
Sårbarheten tillåter en lokal angripare (när ett specialprogram startas) att få obehörig läsåtkomst till privilegierat minne (minne som används av operativsystemets kärna). [3] [4] [5] .
Attacken tilldelades CVE - sårbarhets-ID CVE-2017-5754 [6] .
Meltdown-attacken upptäcktes oberoende av forskare vid Google Project Zero , Cyberus Technology och Graz University of Technology i mitten av 2017 och har varit under sluten diskussion och patchning i flera månader. Publiceringen av detaljer och korrigeringar var planerad till den 9 januari 2018, men detaljerna om sårbarheten offentliggjordes den 4 januari 2018 samtidigt som Spectre- attacken , på grund av publiceringar av The Register [7] journalister som fick reda på om KAISER/KPTI-fixarna från Linux-kärnans sändlista [8] .
Förmågan att attackera genereras av tre mekanismer som gör att du kan snabba upp processorn, och var och en av dessa mekanismer individuellt skapar inte en sårbarhet:
Moderna högpresterande mikroprocessorer har förmågan att exekvera ny kod utan att vänta på att de tidigare åtgärderna ska slutföras. Till exempel, om en greninstruktion väntar på att ta emot data från huvudminnet för att fatta ett beslut, kan en ledig processor vara upptagen med att exekvera en av grenriktningarna (och i vissa arkitekturer, även båda grenarna) i hopp om att få resultatet av beräkningen klar när resultatet av grenen är känt. Denna teknik kallas spekulativt utförande. Om gissningen lyckas ändrar den spekulativt exekverade koden de synliga värdena för registren (arkitektoniskt tillstånd) och exekveringen fortsätter. Om exekveringsgrenen antogs felaktigt, ändrar inte instruktionerna från den processorns synliga tillstånd, och den faktiska exekveringen kommer att återgå till grenpunkten.
På grund av särdragen hos vissa implementeringar, under spekulativ exekvering, utförs faktiskt minnesåtkomst oberoende av åtkomsträttigheterna för den exekverande processen till detta minne; detta gör att kommandon kan utföras utan att vänta på svar från minneskontrollern . Om denna gren av spekulativ exekvering senare visar sig vara korrekt, kommer ett felaktigt minnesåtkomstundantag att kastas. Om grenen kasseras som felaktig, kommer inget undantag att kastas; men variabler som laddas in i cachen under grenexekveringen kommer att finnas kvar i cachen. Därför föreslog författarna till attacken en metod för att analysera förekomsten av data i cachen (baserat på åtkomsttiden till dem), som, om attacken är korrekt konstruerad, kan ge en uppfattning om vad som hände i den kasserade spekulativ exekveringsgren och innehållet i mer privilegierat minne.
Attacken kan utföras ungefär enligt följande. [9]
För att läsa bit 0 från det skyddade minnesområdet Ap , angriparen:
Under normal exekvering orsakar steg 4 ett säkerhetsfel, men under spekulativ exekvering på sårbara arkitekturer ignoreras detta fel tillfälligt, och fortsätter med steg 5 och 6. Som ett resultat laddas ett av värdena in i cachen - från adress A0 u eller A1 u . Efter att ha tagit reda på grentillståndet avbryter processorn alla resultat från steg 4, 5 och 6, men tillståndet för cachen förblir oförändrat.
Därefter räcker det för angriparen att läsa "deras" adresser A0 u och A1 u , och mäta åtkomsttiden till dem. Och baserat på mätningarna, bestäm vilken bit (0 eller 1) som lästes från det skyddade minnesområdet Ap .
Genom att upprepa denna algoritm för andra bitar av värdet V(A p ), kan du få hela innehållet i det skyddade minnesområdet som helhet.
Enligt forskarna är "alla Intel-mikroprocessorer som implementerar out-of-order exekvering potentiellt mottagliga för attacker, det vill säga vilken processor som helst sedan 1995 (med undantag för Intel Itanium och Intel Atom som släpptes före 2013)." [tio]
Sårbarheten förväntas påverka världens största molnleverantörer , i synnerhet Amazon Web Services (AWS) [11] , Google Cloud Platform , Microsoft Azure . Molnleverantörer tillåter olika användare att köra sina applikationer på delade fysiska servrar. Eftersom program kan behandla känsliga användardata används säkerhets- och isoleringsåtgärderna som tillhandahålls av processorn för att förhindra obehörig åtkomst till privilegierat minne (används av OS-kärnan). Meltdown-attacken, när den används på system som inte implementerar programvaruskydd (patchar), låter dig kringgå vissa minnesisoleringsåtgärder och få läsåtkomst till operativsystemets minne.
En av författarna till sårbarhetspublikationen indikerar att paravirtualiseringssystem ( Xen ) och containersystem ( Docker , LXC , Openvz , etc.) också är känsliga för attacker [12] . Helt virtualiserade system tillåter användarapplikationer att endast läsa minnet av gästkärnan, inte minnet i värdsystemet.
Det finns ett tillförlitligt mjukvarusätt att bekämpa attacken, där sidtabellen över användarprocesser inte visar OS-kärnminnessidor (med undantag för ett litet antal kärnminnestjänstområden), Kernel Page-table isolation (KPTI) teknologi . Samtidigt saktar samtal med ändrad behörighetsnivå (i synnerhet systemanrop) ner något, eftersom de dessutom måste byta till en annan sidtabell som beskriver hela minnet i OS-kärnan.
I vissa fall kan korrigeringen minska prestandan för vissa funktioner, till exempel applikationer som gör systemanrop mycket ofta. Samtidigt visar Phoronix -tester ingen nedgång i spel som körs på Linux med KPTI-patchen [17] [18] .