Díry v CPU: Zen 3 má zneužitelný Predictive Store Forwarding. Podle AMD je riziko malé

10. 4. 2021

Sdílet

 Autor: Cnews
Jednou z ingrediencí vysokého výkonu procesorů AMD Zen 3 je zdá se spekulativní funkce Predictive Store Forwarding. Bohužel také otevírá novou zranitelnost.

Dlouho jsme nepsali o bezpečnostních problémech v procesorech (ne že by se žádné side-channel útoky neobjevovaly, ale zdá se, že se to již stalo součástí normálního běhu věcí). Teď ovšem byla publikována bezpečnostní chyba, která ukazuje, že stereotyp, podle kterého jsou „děravé“ Intely oproti bezpečným alternativním CPU, není moc užitečný. Minimálně část z těchto útoků na spekulativní vykonávání kódu je vedlejším produktem samotné podstaty fungování procesorů a nepředstavuje „selhání“ Intelu.

AMD teď publikovalo dokument, v kterém prezentuje jedno z výkonnostních zlepšení v architektuře Zen 3, tzv. funkci Predictive Store Forwarding. A důvodem je zřejmě ani ne tak chlubení, jako hlavně, že tato technika podobně jako další spekulativní optimalizace v procesorech otevírá cestu k bezpečnostním útokům typu Spectre. Jde o nové architektonické zlepšení (míněno po stránce výkonu), takže momentálně je takto zranitelný jen Zen 3 a ne předchozí architektury. Tedy Ryzeny 5000 (mimo mobilní APU Lucienne) a Epyc 7003 Milan.

Predictive Store Forwarding

Predictive Store Forwarding navazuje na běžně používanou funkci Store to Load Forwarding. To je technika, s níž procesor identifikuje situace, kdy kód čte z paměti stejnou adresu, na kterou předtím bylo něco zapsáno, respektive něco čeká ve frontě na zapsání. Pokud procesor má tuto zapisovanou hodnotu ještě v bufferech, může jí rovnou předat následné čtecí operaci. Přístup do paměti, který normálně stojí stovky cyklů času, se tím obejde a výsledkem je velké zlepšení výkonu.

Predictive Store Forwarding k tomuto přidává další úroveň, která funguje v momentě, kdy je možné, že by se dal tento Forwarding použít, ale ještě nebyly vyhodnocené podmínky ukazující, zda k situaci opravdu dojde (tedy ještě není potvrzeno, že se adresa dat v paměti shoduje).

Predictive Store Forwarding proto funguje spekulativně – dodá daná data předem pro případ, že správně uhodne, co kód za chvíli bude chtít. To dobře funguje třeba ve smyčkách, kdy je pravděpodobné, že se bude opakovat vzorec z předchozí iterace. Pokud by se spekulace netrefila, vše je vráceno zpět.

graficke karty metodika 13 Procesor AMD Ryzen 9 5900X (Zdroj: HWCooling)

Právě případy chybného odhadu jsou ovšem zranitelné na útoky. Podobně jako predikce větvení a další takové techniky je možné, že chybná spekulace zanese do cache procesoru data ze špatné adresy. A pokud je na tuto situaci napsán speciální škodlivý kód, může se k těmto datům v cache dostat, než je procesor zase zahodí.

Kvůli tomuto riziku nyní AMD publikovalo MSR registry, s nimiž bude operační systém moci toto chování procesoru dočasně vypnout v situacích, kdy by mohlo hrozit napadení – typicky by to mohlo jít u prohlížečů, které spouštějí javascript z webových stránek, který by mohl obsahovat útočný kód. Povaha chyby je podobná zranitelnosti Speculative Store Bypass (Spectre v4), takže ochrana by asi měla být aktivována v podobných situacích.

Poměrně potěšitelný detail je, že zranitelnost Predictive Store Forwarding funguje jen v rámci jednoho vlákna procesoru, protože stav spekulativního prediktoru má každé vlákno vlastní. SMT tedy touto zranitelností není postiženo. Chyba také není zneužitelná, pokud se přechází mezi separátním adresními prostory, takže virtuální stroj se například dá ochránit použitím funkce Secure Encrypted Virtualization (na Epycu 7003).

Riziko je prý jen malé

Nebezpečnost je podle AMD malá („low“), takže pro běžné uživatele je doporučeno nechat procesor ve výchozím stavu, což nemá způsobovat vážnější riziko. Optimalizace Predictive Store Forwaring zůstává ve výchozím stavu aktivní, čili nedochází ke změnám výkonu.

AMD recommends leaving the Predictive Store Forwarding feature enabled as the default setting.

Pro enterprise a serverové uživatele je možné použít zmíněnou separaci adresního prostoru. V případě, že to nelze, je pak možné použít ony kontrolní registry k deaktivaci PSF, což zneužití znemožní za cenu nějakého výkonu. Negativní dopad by snad neměl být velký, soudě podle testu Phoronixu. Nejhorší propady v ojedinělých případech jsou prý do 1–2 %. Toto opatření vypínající PSF lze na Linuxu zapnout zvlášť, ale je také implicitně zapnuté vždy, pokud uživatel aktivuje ochranu před chybou Speculative Store Bypass (v takovém případě má ale také výkonnostní propad této mitigace, který je větší).

Propad výkonu procesoru s architekturou Zen 3 vlivem vypnutí funkce Predictive Store Forwarding Propad výkonu procesoru s architekturou Zen 3 vlivem vypnutí funkce Predictive Store Forwarding (Zdroj: Phoronix)

Na Linuxu se ochrana zapíná parametrem jádra psfd. Parametr mitigations=auto nyní ochranu psfd nezapíná, v defaultním nastavení ji tedy Linux neaplikuje, dle doporučení AMD.

Parametry Linuxu ovládající ochrany proti zranitelnostem Predictive Store Forwarding a Speculative Store Bypass Parametry Linuxu ovládající ochrany proti zranitelnosti Predictive Store Forwarding (Zdroj: AMD)

Spekulativní forwarding asi nebude výsadou Zenu 3

Ačkoli zatím byl problém publikován jen u Zenu 3, spekulativní provádění store-to-load forwardingu zřejmě není unikátní vlastností této architektury. Podle patentů by totéž měly dělat například i jádra Apple. Nemáme zprávy o tom, zda už podobnou predikci a spekulaci dělají i aktuální jádra Intelu (Ice Lake/Tiger Lake/Rocket Lake), ale je asi pravděpodobné, aby takovéto optimalizace nyní nebo v budoucnu Intel nasadil také.

bitcoin_skoleni

Tyto procesory asi pak také budou mít podobný mechanismus na deaktivaci této spekulace a podobné (volitelné) ochrany. Zřejmě půjde stejně jako u prediktoru větvení (Spectre V2) o potenciálně zranitelnou věc, která ale v procesorech je třeba.

Galerie: AMD Epyc 7003 Milan: odhalení

Zdroj: AMD