Bezpečnostní chyba CrossTalk v procesorech Intel zpomalí programy závislé na RdRand

16. 6. 2020

Sdílet

 Autor: Cnews
Byla publikována další side-channel zranitelnost v procesorech Intel. Provádění instrukcí jako RdRand mimo jádro umožňuje kompromitování šifrovacích klíčů.

Vypadá to, že tento měsíc opět nebudeme ušetřeni populární rubriky „díry v procesorech“. Minulý týden 9. června byla v rámci většího balíku bezpečnostních oprav zejména pro různý software a firmware publikována také zranitelnost s přezdívkou CrossTalk, která je přímo v architektuře současných procesorů Intel. Oprava bude stát nějaký výkon, ale naštěstí jen ve specifických situacích, které by na desktopu neměly být moc podstatné.

Intel chybě CrossTalk říká „Special Register Buffer Data Sampling“ a přiřadil jí kód Intel-SA-00320; její CVE kód je CVE-2020-0543. Závažnost má podle Intelu střední se skóre 6.5.

Některé instrukce zpracovává CPU mimo jádra

Tato chyba spočívá v tom, že určité operace v CPU jádrech současných procesorů Intel nejsou zpracovávány lokálně, ale mimo jádro v „uncore“ čipu, kde je daná jednotka sdílená mezi všemi jádry. Výzkumníci z nizozemské Vrije Universiteit a z ETH Zürich objevili, že procesory mají společnou frontu, tzv. staging buffer, v které jsou společně požadavky na tyto sdílené zdroje. Problém je, že kód běžící na jednom jádře má k této frontě plný přístup a může přes ní šmírovat kód běžící na dalších jádrech, nejsou od sebe izolovány.

Takto sdílené nemohou být samozřejmě žádné standardní výpočetní jednotky kritické pro výkon. Ale výzkumnici zjistili, že mimo jádra a sdílený je generátor náhodných čísel volaný instrukcemi RdRand a RdSeed. Požadavky na tyto operace jdou právě do onoho staging bufferu a výzkumníci na nich demonstrovali bezpečnostní rizika tohoto uspořádání.

Staging buffer obsahuje přímo výstupy generátoru, takže program může číst náhodná čísla pro programy běžící na jiných jádrech. Což je riziko na serveru, protože na nich při virtualizaci běží zcela jiný klient. Problém je, že náhodná čísla se používají při kryptografii a jejich znalost může vést k úniku či prolomení šifrovacího klíče, který se pak dál dá využít ke krádeži vašich dat.

Podobně se útok CrossTalk dá využít také k průniku do bezpečné enklávy SGX. Zranitelnost je umocněna tím, že staging buffer údajně obsahuje výsledky i již obsloužené předchozí požadavky i poté, co byly předány jádru, které si je vyžádalo. Díky tomu má škodlivý program o dost lepší možnosti zde šmírovat.

Aktualizace zabrání šmírování, ale zdecimuje výkon RdRand

Tuto zranitelnost Intel opravil aktualizací mikrokódu, přičemž postihuje zřejmě všechny současné procesory až po serverová Cascade Lake – Ice Lake výzkumníci neotestovali, ale nejspíš to u něj bude podobné. Úplná oprava zde asi není takto snadno možná, ale mikrokód nahrazuje chybějící izolaci jader/vláken od sebe tím, že zcela zablokuje sběrnici sloužící pro přístup do staging bufferu do doby, než vrátí patřičnému jádru jeho výsledek, a pak buffer vyprázdní.

Teprve poté je zase přístup do fronty odblokován. Jde tedy o jakési softwarové nahrzení chybějící hardwarové izolace. Díky tomu je možné ochránit tyto operace před odposlechem z jiných jader, ale za cenu promrhání většiny kapacity dané jednotky. Kvůli tvrdému dopadu na výkon je tato ochrana implementována jen pro instrukce kritické pro bezpečnost (RdRand, RdSeed, EgetKey). Výstupy z dalších instrukcí, které se zpracovávají mimo CPU jádro přes staging buffer, například RDMSR, lez pořád odposlouchávat.

Oprava totiž přináší razantní snížení výkonu instrukcí RdRand a RdSeed, podle testu Phoronixu je výkon generátoru náhodných čísel snížený na zlomek původního. Rychlost či propustnost generování náhodných hodnot pomocí instrukce RdRand klesla o 97 %, tj. na 3 % původních schopností. Pokud tedy máte nějaký software, který konzumuje velké množství náhodných čísel z tohoto zdroje, může se projevit propad výkonu. Toto naštěstí nebude mimo server nic běžného.

Reálně by dopady neměly být velké, a nastanou jen izolovaně

Phoronix při testování ověřil, že aktualizace firmwaru v naprosté většině programů s výkonem nic nedělá, takže jsou zřejmě opravdu ovlivněné jen a pouze instrukce RdRand a RdSeed. Benchmarky Apache, NGINX a DaCapo mohou v celkovém měření přijít o pár procent výkonu. Nejspíš je to dáno tím, že potřebují náhodná čísla pro různé kryptografické účely během komunikace (HTTPS...).

Z tohoto útoku a výkonnostních dopadů si tedy budou muset dělat vrásky uživatelé serverů s procesory Intel. Jde o útok specificky na jejich architekturu – je možné, že něco takového by mohlo paralelně postihovat i jiná CPU třeba od AMD nebo ARMu, ale vývojáři zřejmě nezjišťovali, zda jsou také zranitelná tímto způsobem. Útok by se jim asi musel přepsat na míru. Pro běžného uživatele není asi příliš důvodů ke starostem ani k tomu, bránit se instalaci těchto záplat (tedy této aktualizace mikrokódu).

ICTS24

Aktualizace by již měla být venku; časem by se měla dostat i přímo do BIOSů desek, ale většině uživatelů by ji dříve měla přinést aktualizace prostřednictvím operačního systému – opravy mikrokódu procesorů Intel jsou distribuovány jak přes Windows, tak v Linuxových distribucích.

Galerie: Bezpečnostní chyba CrossTalk v procesorech Intel

Zdroje: Intel, VUSec, CrossTalk (referát s podrobnostmi), TheRegister, Phoronix