En gruppe forskere fra Dresdens Tekniske Universitet har identificeret en sårbarhed (CVE-2020-12965) i AMD-processorer baseret på Zen+ og Zen 2 mikroarkitekturerne, der muliggør et Meltdown-angreb. I starten forventedes det ikke, at AMD Zen+ og Zen 2-processorer ville være sårbare over for Meltdown-sårbarheden, men forskerne opdagede en funktion, der fører til spekulativ adgang til beskyttede hukommelsesområder, når man bruger ikke-kanoniske virtuelle adresser.
AMD64-arkitekturen er designet til kun at bruge de første 48 bit af den virtuelle adresse og ignorere de resterende 16 bit. Det er defineret, at bit 48 til og med 63 altid skal kopiere værdien af bit 47 (fortegnsbitudvidelse). Hvis denne betingelse overtrædes, og der gøres et forsøg på at få adgang til en adresse med vilkårlige værdier af de øvre bits, genererer processoren en undtagelse. Gentagen udfyldning af de øvre bits resulterer i, at det tilgængelige adresserum opdeles i to blokke: den nederste blok (0 til 00007FFFFFFFFFFF), hvor de øvre bits er sat til nul, og den øvre blok (FFFF800000000000 til FFFFFFFFFFFFFFFFFF), hvor alle øvre bits er sat til 1.
Adresser, der falder inden for de specificerede blokke, kaldes kanoniske, og forkerte adresser med vilkårligt indhold af de øverste bit kaldes ikke-kanoniske. Det nederste område af kanoniske adresser tildeles typisk til procesdata, mens det øverste område bruges til kernedata (adgang til disse adresser fra brugerområdet er blokeret på privilegieadskillelsesniveauet).
Den klassiske Meltdown-sårbarhed er baseret på det faktum, at processoren under spekulativ udførelse af instruktioner kan tilgå et lukket dataområde og derefter kassere resultatet, da de satte rettigheder forhindrer sådan adgang fra brugerprocessen. I programmet er den spekulativt udførte blok adskilt fra hovedkoden af et betinget hop, hvilket altid fungerer under reelle forhold, men fordi den betingede operator bruger en beregnet værdi, som processoren ikke kender under den prædiktive udførelse af koden, udføres der spekulativ udførelse af alle forgreningsmuligheder.
Da spekulativt udførte operationer bruger den samme cache som normalt udførte instruktioner, er det muligt under spekulativ udførelse at sætte markører i cachen, der afspejler indholdet af individuelle bits i et privat hukommelsesområde, og derefter i normalt udført kode for at bestemme deres værdi gennem timing analyseadgange til cachelagrede og ikke-cachelagrede data.
Det særegne ved den nye sårbarhed, som påvirker AMD Zen+ og Zen 2 processorer, er, at CPU'erne tillader spekulativ udførelse af læse- og skriveoperationer, der tilgår hukommelse ved hjælp af ugyldige ikke-kanoniske adresser, og ignorerer simpelthen de øverste 16 bits. Under spekulativ kodeudførelse bruger processoren derfor altid kun de nederste 48 bits, og adressens gyldighed kontrolleres separat. Hvis der, når en ikke-kanonisk virtuel adresse oversættes til en fysisk adresse, findes et match i den associative oversættelsesbuffer (TLB) for den kanoniske del af adressen, vil den spekulative indlæsningsoperation returnere en værdi uden at tage højde for indholdet af de øverste 16 bits, hvilket gør det muligt at omgå opdelingen af hukommelse mellem tråde. Efterfølgende vil operationen blive genkendt som ugyldig og kasseret, men hukommelsesadgangen vil blive udført, og dataene vil blive lagret i cachen.
Under eksperimentet lykkedes det forskerne ved hjælp af FLUSH+RELOAD cache-indholdsdetektionsteknikken at organisere en kanal til skjult dataoverførsel med en hastighed på 125 bytes pr. sekund. Ud over AMD-chips påvirker problemet også alle Intel-processorer, der er modtagelige for den klassiske Meltdown-sårbarhed. De samme metoder, der hjælper med at blokere Meltdown-angreb, såsom brug af LFENCE-instruktioner, kan bruges til at beskytte mod den nye type angreb. Hvis en Intel-processor f.eks. inkluderer hardwarebeskyttelse mod Meltdown, eller softwarebeskyttelse er aktiveret i systemet, er sådanne konfigurationer ikke modtagelige for den nye angrebsvariant.
Samtidig bemærker forskerne, at i forhold til Intel-processorer begrænser arkitekturen af AMD-processorer muligheden for at udføre rigtige angreb, men udelukker ikke brugen af den nye metode i kombination med andre mikroarkitektoniske angreb for at øge deres effektivitet. Især tillader den foreslåede angrebsvariant ikke at bestemme indholdet af kernehukommelsesområderne og andre processer, men er begrænset til muligheden for at få adgang til andre tråde i det samme program, der kører i det samme virtuelle hukommelsesrum.
Так как программа из без уязвимости имеет возможность получить доступ к своим потокам, то с практической стороны метод представляет интерес для обхода sandbox-изоляции и организации вмешательства в работу других потоков в программах, допускающих выполнение стороннего кода, таких как web-браузеры и JIT-движки. Исследователи изучили подверженность атаке JavaScript-движка SpiderMonkey и ядра Linux, но не нашли уязвимых последовательностей кода, при помощи которых можно было бы совершить атаку. Помимо атаки на приложения метод также может применяться для форсирования недопустимых потоков данных между микроархитектурными элементами процессора в процессе эксплуатации других микроархитектурных уязвимостей.
Kilde: opennet.ru
