Sok kiberbiztonsági exploitot nevezték már „A Mindeneket Uraló Egy Gyűrűnek”, de kevésre igaz ez annyira, mint egyetlen bitre, amely letiltja a memóriatérképezést bizonyos AMD CPU-kon, és hozzáférést ad normál esetben elérhetetlen területekhez. Egyetlen utasítással elérhetővé válik a tiltott szoftverek egy része, például a Platform Security Processor (PSP), ahol a TPM fut, a System Management Mode (SMM), a mikrokód-javító RAM és még néhány egyéb rész – vagyis gyakorlatilag teljes hardverszintű irányítás.
Az exploit neve Skitter Creek Bath Salts (röviden Skitter), és a termékeny hacker, Christopher Domas fejlesztette, aki olyan CPU-hibákról ismert, mint a Sandsifter és a
autoplay:0 width:350]&ref=linuxmint.hu">God Mode Unlocked. Csak az AMD 15h és 16h családba tartozó chipek érintettek, nagyjából a 2011 és 2015 közötti időszakból. A 15-ös családba az FX-sorozatú asztali chipek és néhány Opteron tartozik, míg a 16h a kis fogyasztású, Jaguar- és Puma-alapú SoC-kat foglalja magában, például a PlayStation 4-ben és az Xbox One-ban lévőket, valamint néhány Athlon, Sempron és Opteron-X chipet, többek között.
Az exploit kihasználásához kernel szintű hozzáférés kell, vagyis képesnek kell lenned saját driverek futtatására. Ha ez megvan, onnantól a teljes DRAM a tiéd. Az AMD biztonsági közleményt adott ki az ügyről, amelyben közölték, hogy ezek a chipek már nincsenek biztonsági támogatás alatt, és – ahogy említettük – az ehhez szükséges hozzáférési szint amúgy is azt jelenti, hogy a támadó már eleve uralja a gépet.
Ha nem világos, hogyan nyithat meg egyetlen utasítás egy teljes rendszert, íme egy leegyszerűsített magyarázat. Tegyük fel, hogy 16 GB RAM-od van. Azt gondolnád, hogy a Windows mind a 16 GB-ot használhatja, a 0-s címtől a memória végéig – de ahogy talán már észrevetted, valójában ennél valamivel kevesebb áll rendelkezésre. A többit a rendszer szintű adatok számára foglalják le.
Egy részük látható az operációs rendszer számára, hogy az eszközökkel kommunikálni tudjon, de vannak olyan területek is, ahol nagyon fontos dolgok találhatók, például a PSP, az SMM és a mikrokód-javítások. Ezek olyan memóriaszakaszokban vannak, amelyekhez elvileg egyáltalán nem lehet hozzáférni. Ha mégis elérhetők lennének, a rendszer definíció szerint már nem lenne biztonságos – gondolj csak bele, mit jelentene, ha egy rosszindulatú driver szabadon belenyúlhatna abba, hogyan kezeli a processzor az adatokat.
A teljesítmény miatt a modern processzorok RAM-vezérlői nem „egyenes vonalban” használják a memóriát, hanem úgynevezett bank-interleavinget alkalmaznak. A DRAM-ban lévő bájtok valójában össze vannak keverve, miközben az operációs rendszer egy szép, rendezett, sík memóriaterületet lát. Kiderült, hogy az a CPU-beállítás, amely ezt a funkciót vezérli, az említett processzorcsaládoknál az operációs rendszerből is elérhető, és BankSwizzleMode-nak (Swizzle) hívják. Egyetlen utasítással ki-be lehet kapcsolni: „xor dword [0xf80c2094], 0x00400000” – mindössze egy bit átállításáról van szó. Mint kiderült, ezt ki lehet használni.
Először egy ciklust futtatsz, hogy feltérképezd, normál esetben hogyan működik a leképezés. Elhelyezel egy „kanári” értéket a memóriában (a hagyomány szerint mondjuk 0xDEADBEEF-et), letiltod a Swizzle-t, végigpásztázod a memóriát, hogy megtaláld, hová került, majd újra engedélyezed a Swizzle-t. Ha ezt elégszer megismétled, pontosan megismered, hogyan képeződik le a látható memória a fizikai DRAM-ra, és fordítva.
Ha már megvan a térkép, letilthatod a Swizzle-t, és olyan DRAM-területekre is tudsz olvasni vagy írni, amelyekhez normál esetben nem férnél hozzá, hiszen most már tudod, hová fognak esni ezek a műveletek. Így hozzáférsz minden eddig rejtett kódhoz és adathoz, és hardverszintű hozzáférést szerzel, amivel gyakorlatilag bármit megtehetsz – beleértve az fTPM aláírókódjának olvasását és bármilyen más, alacsony szintű trükköt, ami csak eszedbe jut.
Felmerülhet a kérdés, hogy a rendszer miért nem omlik össze a folyamat közben, hiszen átmenetileg gyakorlatilag spagettivé változtatod a RAM-ot. A magyarázat az, hogy minden egyes Swizzle ki- és bekapcsolás előtt felkészíted a CPU-t: letiltod a megszakításokat, és még több óvintézkedést is teszel. Ennek ellenére a gép összeomolhat a térkép készítése közben, de ezt a lépést csak egyszer kell elvégezni. Ha már megvan a térkép, a rendszerösszeomlás esélye viszonylag kicsi, mert onnantól kezdve célzottan, konkrét helyeket támadsz.
Másik jogos kérdés, hogy egyetlen bit beállítása egy memóriahelyen hogyan tudja „megzavarni” a CPU-t. A válasz az, hogy az operációs rendszer által elérhető memória egy része valójában hardverre van leképezve a Memory-Mapped Configuration Space (MMCONFIG) szabvány szerint. Vagyis az oda irányuló olvasások és írások valójában hardverkonfigurációs beállításokat érnek el, nem a tényleges RAM-ot.

