En gruppe forskere fra ETH Zürich har identificeret en ny type angreb på mekanismen for spekulativ udførelse af indirekte spring i CPU'en, der gør det muligt at udtrække information fra kernehukommelsen eller udføre et angreb på værtsystemet fra virtuelle maskiner. Sårbarhederne har kodenavn Retbleed (CVE-2022-29900, CVE-2022-29901) og ligner i deres essens angrebene Spectre-v2. Forskellen ligger i organiseringen af spekulativ udførelse af vilkårlig kode ved behandling af instruktionen "ret" (return), som udtrækker adressen til springet fra stakken i stedet for indirekte at springe ved hjælp af instruktionen "jmp" med en indlæsning af adressen fra hukommelsen eller CPU-registeret.
En angriber kan skabe betingelser for en forkert forudsigelse af springet og organisere et målrettet spekulativt spring til en kodeblok, der ikke er forudset af programmets udførelseslogik. I sidste ende vil processoren bestemme, at forudsigelsen af grenen ikke holdt stik og gå tilbage til den oprindelige tilstand, men de data, der blev behandlet under den spekulative udførelse, vil forblive i cachen og mikroarkitekturelle buffere. Hvis den fejlagtigt udførte blok foretager en hukommelsesadgang, vil dens spekulative udførelse føre til, at den ligger i den fælles cache sammen med data, der er læst fra hukommelsen.
For at identificere data, der er tilbageholdt i cachen efter spekulativ udførelse af operationer, kan angriberen bruge metoder til at bestemme residualdata via sideløbende kanaler, for eksempel ved at analysere ændringer i adgangstiden til cacherede og ikke-cacherede data. Til målrettet udtrækning af information fra områder på et andet privilegieniveau (for eksempel fra kernehukommelsen) anvendes "gadgets" — sekvenser af instruktioner til stede i kernen, der er velegnede til spekulativt at læse data fra hukommelsen, afhængigt af de ydre forhold, som angriberen kan påvirke.
For protection against classic Spectre-class attacks that utilize conditional and indirect branch instructions, most operating systems use the technique "retpoline," which is based on replacing indirect branch operations with the "ret" instruction. This involves a separate stack state prediction block in processors that does not utilize the branch prediction block. When retpoline was introduced in 2018, it was believed that manipulations similar to Spectre involving addresses were not practically applicable to speculative branching using the "ret" instruction.
Researchers who developed the Retbleed attack method demonstrated the possibility of creating microarchitectural conditions to initiate speculative branching using the "ret" instruction and published a toolkit to identify suitable exploitable instruction sequences (gadgets) in the Linux kernel where such conditions manifest.
During the research, a working exploit was prepared that allows arbitrary data to be extracted from kernel memory at a rate of 219 bytes per second with 98% accuracy on Intel CPU systems from an unprivileged user space process. On AMD processors, the exploit's effectiveness is much higher — the leak rate is 3.9 KB per second. As a practical example, it was shown how to use the proposed exploit to determine the contents of the file /etc/shadow. On systems with Intel CPU, the attack to determine the hash of the root user's password was conducted in 28 minutes, while on AMD CPU systems it took 6 minutes.

The ability to carry out the attack is confirmed for Intel processors of the 6th to 8th generations manufactured before the 3rd quarter of 2019 (including Skylake) and AMD processors based on Zen 1, Zen 1+, and Zen 2 microarchitectures that were produced before the 2nd quarter of 2021. In newer processor models, such as AMD Zen3 and Intel Alder Lake, as well as ARM processors, the issue is mitigated by existing protection mechanisms. For example, the use of IBRS (Indirect Branch Restricted Speculation) instructions helps protect against the attack.
Der er en række ændringer for Linux-kernen og hypervisoren Xen, som er udviklet til ældre CPU'er, der blokerer problemet via software. Den foreslåede patch til Linux-kernen ændrer 68 filer, tilføjer 1783 linjer og fjerner 387 linjer. Desværre medfører beskyttelsen betydelige overheadomkostninger – i udførte tests på AMD- og Intel-processorer vurderes ydelsesreduktionen at være mellem 14% og 39%. Det er mere ønskeligt at anvende beskyttelse baseret på IBRS-instruktioner, som er tilgængelige i de nye generationer af Intel CPU'er og understøttes fra Linux-kernen 4.19.
På Intel-processorer udføres adressestikning til spekulativ indirekte spring takket være en egenskab, der viser sig ved underflow i return stack buffer (Return Stack Buffer). Under sådanne forhold begynder logikken for adressevalg at blive anvendt for 'ret'-instruktionen, svarende til den, der bruges ved normale indirekte spring. I Linux-kernen er der fundet over tusinde steder, der skaber betingelser for initiation af en sådan tilbagegående underflow, som kan nås via systemanrop.
På AMD-processorer udføres det spekulative udførelse af 'ret'-instruktionen uden henvisning til en specifik for stack buffer (Return Address Stack), og spr predictionscaching enser 'ret'-instruktionen som en indirekte overgang i stedet for en tilbagevenden, og bruger derfor data til indirekte spring ved forudsigelsen. Under sådanne forhold kan i princippet enhver 'ret'-operation, der kan nås via et systemanrop, udnyttes.
Yderligere er der i AMD CPU'er også identificeret et andet problem (CVE-2022-23825, Branch Type Confusion) relateret til udførelse af falske overgange – betingelser for predictionspring kan opstå selv uden de nødvendige greneinstruktioner, hvilket gør det muligt at påvirke predictionscaching uden en 'ret'-instruktion. Denne egenskab gør implementeringen af beskyttelse betydeligt mere kompleks og kræver en mere aktiv oprydning af predictionspring pufferen. Det forventes, at tilføjelsen af en fuld beskyttelse i kernen vil føre til en stigning i overheadomkostningerne på 209%.
Kilde: opennet.ru
