Skupina výzkumníků z Amsterdamské svobodné univerzity představila novou techniku útoku SLAM (Spectre Linear Address Masking), která nabízí nový způsob, jak využívat mikroarchitektonické zranitelnosti třídy Spectre, při kterých dochází k úniku dat během translace nekonvenčních adres. K obcházení kontrol konvenčnosti jsou využívány rozšíření pro maskování liniových adres, která jsou nově k dispozici v procesorech. Výzkumníci zveřejnili nástroj s implementací této metody a navrhli demonstraci, která ukazuje, jak lze během několika desítek sekund extrahovat z paměti jádra data odpovídající určité masce (bylo prokázáno, jak v Ubuntu extrahovat z paměti jádra řetězec s hash hodnotou hesla uživatele root).

Útok může být proveden na systémech s procesory Intel, které podporují rozšíření LAM (Linear Address Masking), procesory AMD s rozšířením UAI (Upper Address Ignore) a procesory ARM s rozšířením TBI (Top Byte Ignore). Tato rozšíření umožňují používat část bitů 64bitových ukazatelů pro ukládání metadat nesouvisejících s adresováním (pro běžné programy není třeba tolik paměti, takže mohou adresovat 64bitové ukazatele, a proto mohou být horní bity vyčleněny například pro zabezpečovací kontroly). Zajímavé je, že procesory Intel, AMD a ARM, které podporují LAM, UAI a TBI, byly teprve oznámeny, ale ještě nejsou v masové výrobě, což činí SLAM prvním spekulativním útokem na budoucí CPU. Útok lze také provést na starých CPU AMD Zen+ a Zen 2, které jsou zranitelné vůči CVE-2020-12965.
Podobně jako u využití zranitelností Spectre vyžaduje provedení útoku SLAM přítomnost určitých sekvencí instrukcí (gadgets) v jádru, které vedou ke spekulativnímu vykonávání instrukcí. Takové instrukce vedou k spekulativnímu čtení dat z paměti v závislosti na vnějších podmínkách, na které může útočník mít vliv. Poté, co je stanoveno chybný odhad, je výsledek spekulativního vykonávání odmítnut, avšak zpracovaná data zůstávají v cache a mohou být poté získána pomocí analýzy přes externí kanály. Pro získání dat uložených v cache využívají výzkumníci metodu Evict+Reload, která se zakládá na vytváření podmínek pro vyřazení dat z cache (například se vytváří aktivita, která rovnoměrně zaplňuje cache typickým obsahem) a provádění operací, jejichž doba provádění umožňuje usuzovat na přítomnost dat v procesorové cache.
Pro provedení útoku SLAM se využívají gadgets na základě kódu, ve kterém jsou kontrolovaná data (dále proměnná „secret“) používána jako ukazatel. Například: void unmasked_gadget(long **secret) { **secret; }
Je pozorováno, že podobné vzory kódu se často používají v programech, například v jádře Linux bylo odhaleno desítky tisíc takových gadgets, z nichž alespoň několik set je vhodných k použití v exploitech. Únik lze zablokovat přidáním dalších instrukcí do takových gadgets, které blokují spekulativní vykonávání. Společnost Intel plánuje poskytnout programovou metodu blokování úniku před zahájením dodávek procesorů s podporou LAM. Společnost AMD doporučila používat existující metody blokování útoků třídy Spectre v2. Vývojáři jádra Linux se rozhodli pro ochranu před útokem ve výchozím nastavení vypnout podporu LAM do publikování doporučení společnosti Intel k blokování zranitelnosti.
Zdroj: opennet.ru
