Egyetlen utasítással törhető fel a régebbi AMD processzorok titkos memóriája

amd-nyito

Egyetlen rejtett utasítással kijátszhatók a régi AMD processzorok legmélyebb hardveres védelmi vonalai. Christopher Domas biztonsági kutató olyan eljárást publikált, amellyel a 2011 és 2015 között gyártott AMD chipcsaládok védett rendszermemóriája teljesen megnyitható.

A modern központi egységek biztonsági architektúrája azon az elven alapul, hogy az operációs rendszer nem láthatja és nem módosíthatja a processzor belső működéséhez szükséges legérzékenyebb adatokat. A most bemutatott, Skitter Creek Bath Salts névre keresztelt sérülékenység azonban rávilágított arra, hogy a memóriavezérlő egyetlen beállításának megváltoztatásával a szigorúan elkülönített területek is elérhetővé válnak. A támadási eljárás a hardveres memóriacímzés átalakítását használja ki, amellyel a támadó kikerülheti az operációs rendszer alatti védelmi szinteket.

A felfedezés mögött az a Christopher Domas áll, aki korábban már több úttörő x86-os architekturális sérülékenységre hívta fel a figyelmet. A szakember ezúttal a memóriavezérlők fizikai és logikai címtartomány-leképezését vette górcső alá, és kimutatta, hogy bizonyos regiszterek módosításával a hardver által felépített védelmi gátak összeomlanak. Az eljárás nem szoftveres hibát vagy kódvégrehajtási hiányosságot használ ki, hanem magának a memóriavezérlőnek a beépített működési logikáját fordítja a rendszer ellen.

Hogyan zilálja szét a rendszermemóriát a Swizzle mód?

A modern processzorok a jobb teljesítmény és a sávszélesség hatékonyabb kihasználása érdekében nem egyenes vonalban címzik a fizikai memória celláit. A rendszermemória-vezérlő az úgynevezett bank-interleaving és összefésülési technikák segítségével elosztja az adatokat a memóriatípus fizikai blokkjai között, miközben az operációs rendszer felé egy összefüggő, sima címtartományt mutat. Az AMD 15h és 16h jelű processzorcsaládjaiban ez a funkcionalitás a BankSwizzleMode (röviden Swizzle) regiszter segítségével vezérelhető.

A kutató rámutatott, hogy a BankSwizzleMode állapotát szabályozó regiszterbit az operációs rendszer számára hozzáférhető memóriatartományban helyezkedik el. Egyetlen egyszerű XOR utasítás segítségével a memória-leképezési mód kikapcsolható, majd tetszőlegesen visszakapcsolható. Amikor ez a bit megváltozik, a memóriavezérlő teljesen máshogy értelmezi a fizikai DRAM-ba küldött olvasási és írási kéréseket, miközben a felette lévő védelmi szintek továbbra is a korábbi fizikai címek alapján ellenőrzik a hozzáférési jogosultságokat.

A támadás lebonyolításához a támadó először egy feltérképezési fázist hajt végre. Ennek során jól ismert tesztértékeket helyez el a memóriában, majd a Swizzle mód ki- és bekapcsolgatásával megfigyeli, hogy az adott adatsorok hová kerülnek át a fizikai DRAM-ban. Ezt a folyamatot elégszer megismételve a támadó egy lineáris egyenletrendszer megoldásával pontosan feltérképezi a memóriavezérlő teljes átrendezési mátrixát.

Az eljárás lefolytatása során a rendszermemória átmenetileg kaotikussá válik, hiszen a ciklikusan ki- és bekapcsolt Swizzle mód miatt a megszokott adatstruktúrák pillanatokra elérhetetlenné válnak. A folyamat stabilitásának megőrzése érdekében a támadó kódnak le kell tiltania a megszakításokat a CPU-n, nehogy a rendszer összeomoljon a memóriamátrix átrendezése közben. Bár a tesztelési fázisban előfordulhat lefagyás, a pontos memóriatérkép elkészítése után a célzott olvasások és írások már minimális kockázattal hajthatók végre.

A teljes memóriatérkép birtokában a támadó pontosan ki tudja számítani, milyen logikai címet kell megcímeznie ahhoz, hogy a memóriavezérlő a kérést az egyébként szigorúan védett memóriaterületekre irányítsa. Így elérhetővé és felülírhatóvá válnak a Platform Security Processor (PSP) adatai, a System Management Mode (SMM) kódja, a processzor mikrokód-frissítései, valamint a C6 energiatakarékossági állapotban elmentett belső regiszterértékek is.

Milyen lapkákat érint a most feltárt sebezhetőség?

A sérülékenység közvetlenül a 2011 és 2015 között piacra dobott AMD architektúrákat érinti, név szerint a Family 15h és Family 16h jelzésű lapkákat. A Family 15h körébe tartoznak az egykori AMD FX sorozatú asztali processzorok, valamint több Opteron szerverlapka. Ezek a chipek a maguk idejében a gyártó zászlóshajóinak számítottak, és sok régebbi munkaállomásban vagy otthoni számítógépben a mai napig teljesítenek szolgálatot.

Ennél is kiterjedtebb lehet a hatás a Family 16h család esetében, amely a kisfogyasztású Jaguar és Puma architektúrákra épült. Ezek a lapkák nemcsak asztali Athlon, Sempron és Opteron-X processzorokban kaptak helyet, hanem egy egész konzolgeneráció alapját képezték. A Sony PlayStation 4 és a Microsoft Xbox One játékkonzolok egyaránt erre az AMD SoC architektúrára támaszkodnak, így a hardveres memóriacímzés gyengesége ezekben a berendezésekben is jelen van.

Az újabb, Zen architektúrára épülő AMD processzorok (Family 17h és az azt követő generációk) már nem érintettek a hibában. A gyártó a Zen lapkák tervezésekor alapjaiban alakította át a memóriavezérlőt és a belső biztonsági struktúrákat, így ezeknél a chipeknél a BankSwizzleMode nem érhető el ilyen formában, és a memóriacímek leképezése sem fordítható el a védett zónák felé.

Kijátszott biztonsági szintek és a gyártói válasz

Bár a sérülékenység elméleti és technikai szempontból rendkívül súlyos eredményeket mutat, a gyakorlati kihasználhatóságát komoly feltételek korlátozzák. A Skitter eljárás futtatásához a támadónak már meglévő kernel-szintű jogosultsággal (Ring 0) kell rendelkeznie a célgépen, ami azt jelenti, hogy saját illesztőprogramot kell bejuttatnia a rendszerbe. Ha egy támadó már eljutott erre a szintre, az operációs rendszer feletti ellenőrzést lényegében amúgy is megszerzte.

Ugyanakkor a sérülékenység valódi veszélye abban rejlik, hogy a Ring 0 szint alatti, úgynevezett negatív biztonsági gyűrűket töri át. A System Management Mode és a biztonsági coprocessor feladata pontosan az lenne, hogy védelmet nyújtson még egy fertőzött vagy kompromittálódott operációs rendszerrel szemben is. A memória átrendezésével azonban a támadó teljesen átveheti az uralmat a firmware felett, és akár felülírhatatlan rootkiteket is elhelyezhet a rendszerben.

Az AMD hivatalos tájékoztatóban reagált a publikált kutatásra. A gyártó hangsúlyozta, hogy az érintett processzorcsaládok már évekkel ezelőtt elérték az életciklusuk végét, így nem állnak aktív biztonsági támogatás alatt. Mivel a javításhoz a memóriavezérlő alapszintű logikáját kellene átírni, szoftveres vagy mikrokód-frissítéssel a hiba nem orvosolható hatékonyan, ezért az AMD nem ad ki javítócsomagot a régi rendszerekre.