Újabb teljesítménygyilkos sebezhetőségek: Retbleed

kami911 képe

Négy évvel ezelőtt gyülekeztek a Baljós árnyak a modern processzorok felett a Meltdown és Spectre hibák képében, valamint annak variánsai után (Újra támad a Spectre és a Meltdown) továbbra is a számítógépbiztonság-kutatók célkeresztjében vannak a spekulatív végrehajtással összefüggő hibák kutatása és feltárása.

Most egy újabb hiba került biztonsági jelentések és kernel hibajavítások formájában a publikum elé: a Retbleed. A Retbleed, vagy más néven Spectre-BTI egy spekulatív végrehajtással összefüggő támadási forma x86-64 és ARM processzorok ellen, amely a nem túl régi Intel és AMD chipeket is veszélyezteti. Azok az ARM CPU-k, amelyek sebezhetőek a Spectre indirekt elágazásokat használó oldalcsatornás támadással szemben, szintén sebezhetőek a Retbleed sebezhetőséggel is.

A sebezhetőség a Spectre 2. változathoz, azaz a branch target injection-höz (CVE-2017-5715) valamint a Spectre-BHB-hez (CVE-2022-23960) van köze, amely javítható CPU mikrókód frissítéssel is, meglévő hardveres (FEAT_CSV2), valamint a Retpoline technikával szoftveres oldalon is. Az ETH Zurich kutatói azért nevezték el támadásukat RETBLEED sérülékenységnek (CVE-2022-29900 és CVE-2022-29901), mert az a retpoline néven ismert szoftveres védelmet használja ki, amelyet 2018-ban vezettek be a spekulatív végrehajtási támadások káros hatásainak csökkentésére.

Ahogy a kutatók írják:

„A Retbleed (CVE-2022-29900 és CVE-2022-29901) az általunk Spectre-BTI-nek nevezett spekulatív végrehajtási támadások családjának új tagja, amely az elágazási célpontok beszúrását használja ki információk kiszivárgására. Testvéreivel ellentétben, amelyek a káros elágazási célpontok spekulációját közvetett ugrások vagy hívások kihasználásával váltják ki, a Retbleed a visszatérési utasításokat használja ki. Ezzel eléggé sok teendő lesz, mivel aláássa a jelenlegi Spectre-BTI védelmek egy részét.

Az egyik ilyen védekezés, amelyet ma sok operációs rendszer használ, az úgynevezett retpoline. A retpolinák úgy működnek, hogy a közvetett ugrásokat és hívásokat visszatérésekkel helyettesítik. Még 2018-ban találták ki a retpoline-t, hogy megakadályozzák, hogy az illetéktelen támadók a Spectre-BTI segítségével információkat lopjanak el a rendszer memóriájából. Bár egyesek aggódtak amiatt, hogy a (RET) visszatérések is érintettek lehetnek a Spectre-BTI támadásokra, a visszatéréseket nem tartották praktikusnak kihasználni, és az aggodalmakat csökkentették. Ennek elsődleges oka az volt, hogy a visszatérési célelőrejelzések normál mikroarchitektúra mellett nem indirekt elágazásokként jelennek meg.

Mint azonban kiderült, a Retbleed-et valóban praktikus kihasználni, köszönhetően a következő két felismerésnek:

  • Rájöttünk, hogy mind az AMD, mind az Intel CPU-kon kiválthatjuk azokat a mikroarchitekturális feltételeket, amelyek arra kényszerítik a visszatéréseket, hogy indirekt elágazásokként legyenek előre jelezve. Megépítettük a szükséges eszközöket is, hogy felfedezzük a Linux kernel azon helyeit, ahol ezek a feltételek teljesülnek.
  • Megállapítottuk, hogy a kernel címtartományán belül található elágazási célpontokat is be tudjuk illeszteni, akár jogosulatlan felhasználóként is. Bár a kernel címtartományán belüli elágazási célpontokhoz nem férhetünk hozzá - az ilyen célpontra történő elágazás oldalhibát eredményez -, az elágazás-előrejelző egység frissíti magát egy elágazás észlelésekor, és feltételezi, hogy az elágazás jogszerűen végrehajtásra került, még akkor is, ha az egy kernel-címre történt.

A Retbleed kihasználásának mikroarchitekturális feltételei

  • Intel processzorokon a visszatérések akkor kezdenek közvetett ugrásokként viselkedni, amikor a visszatérési célelőrejelzéseket tároló Return Stack Buffer alulcsordul. Ez mély hívási verem végrehajtásakor történik. Kiértékelésünk során több mint ezer ilyen feltételt találtunk, amelyeket egy rendszerhívás kiválthat. Az Intel CPU-kra vonatkozó indirekt elágazásbecslést korábbi munkákban már tanulmányoztuk.
  • AMD processzorokon a visszatérések indirekt elágazásként viselkednek, függetlenül a Return Address Stack állapotától. Valójában a visszatérési utasítás indirekt ugrással történő megmérgezésével az AMD elágazás-előrejelzője feltételezi, hogy visszatérés helyett indirekt ugrással találkozik, és következésképpen indirekt elágazási célpontot jelez előre. Ez azt jelenti, hogy minden visszatérés, amelyet rendszerhíváson keresztül elérhetünk, kihasználható – és ezekből rengeteg van.

Fantom JMP-k

Azt is megállapítottuk, hogy az AMD processzorok fantom ugrásokat (CVE-2022-23825) produkálnak: olyan elágazási előrejelzéseket, amelyek akkor is előfordulnak, ha nincs megfelelő elágazási utasítás. Ugyanazzal a technikával, amelyet a Retbleed kihasználásához használtunk, teljesen ki tudtuk hagyni a visszatérési utasítást, és megfigyelhettük az elágazás céljának előrejelzését bármely adott utasításnál. Ennek jelentős következményei vannak a feltárt támadási felületre és az elhárításokra. Ha többet szeretne megtudni, olvassa el a Retbleed-dokumentumhoz fűzött kiegészítésünket.

Kárenyhítések

A rendszermag és a hypervisor fejlesztői az Intellel és az AMD-vel együttműködve fejlesztettek ki enyhítő intézkedéseket. A Linux kernelben a Retbleed elleni védekezés jelentős erőfeszítést igényelt, 68 fájl módosítását, 1783 új sor és 387 eltávolított sor megváltoztatását jelentette. A teljesítménymérés azt mutatja, hogy a Retbleed kárenyhítése sajnos igen költségesnek bizonyult: 14% és 39% közötti sebességcsökkenést mértünk az AMD és az Intel javításokkal.”

Az első méréseket Phoronix által publikált itt találtam meg. Ezek a javítások jelenleg hatalmas teljesítményveszteséggel járnak, és a Linux kernelben beállítható, hogy a kárenyhítések be legyenek-e kapcsolva:

Érintett gépek

Ellenőriztük, hogy a Retbleed működőképes az AMD Zen 1, Zen 1+, Zen 2 és Intel Core 6, 7 és 8 generációs gépeken. Az Intel itt, az AMD pedig itt ad egy átfogóbb listát az érintett CPU-król.

Érintett a gépem?

Ha a gépben egy 0x15-0x17-es AMD CPU családba tartozó processzor vagy egy 6-8-as Intel Core generációs processzor található, akkor valószínűleg érintett. Vegye figyelembe, hogy csak a 0x17-es AMD CPU-családot (AMD Zen 1, Zen 1+ és Zen 2) teszteltük.

Ezek az eszközök nem a Spectre és a Meltdown ismertté válása előttről származnak?

Nem mindegyik. Valójában az AMD a Spectre eredeti megjelenésekor még nem dobta piacra a Zen2-t.

Csak a Linux rendszerek érintettek?

Linux-ra építettük a proof of concept kódot. De mivel az alapvető probléma hardveres szinten van, az érintett hardverrel rendelkező Microsoft és Apple számítógépek is érintettek.

Mit kell tennem?

Telepítse a legújabb operációs rendszerfrissítéseket.

Kell aggódnom?

Ha megosztott hardverrel rendelkező virtuális gépeken (például felhőben) vannak titkai, akkor tisztában kell lennie a problémával. De nem tesz jót az egészségének, ha túl sokat aggódik.

További információk

(forrás)