- A hozzászóláshoz be kell jelentkezni
- 840 megtekintés
Hozzászólások
"Már nagyon hiányoztak azok az extra patchelési napok/éjszakák/hétvégék ..."
Köszönjük Intel! Lesz túlórám, nem kevés.
Még jó, hogy otthon csak x86_64 vonalon csak AMD CPU/APU van.
- A hozzászóláshoz be kell jelentkezni
Akkor rossz hirem van:
"Notable with this pull request too is no longer defaulting to LFENCE-based Spectre V2 mitigations on AMD systems. The LFENCE-based mitigation is deemed no longer sufficient for mitigating Spectre V2 attacks. Now the Linux kernel will use return trampolines "retpolines" by default on all AMD processors."
Régóta vágyok én, az androidok mezonkincsére már!
- A hozzászóláshoz be kell jelentkezni
tényleg az
A+
- A hozzászóláshoz be kell jelentkezni
Még bedobnék két rossz hírt akkor:
https://grsecurity.net/amd_branch_mispredictor_just_set_it_and_forget_it
https://grsecurity.net/amd_branch_mispredictor_part_2_where_no_cpu_has_…
Összegyűjtve:
https://seclists.org/oss-sec/2022/q1/171
Jóccakát
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
- A hozzászóláshoz be kell jelentkezni
Valaki el tudja magyarázni, hogy "tér vissza" egy ilyen?
Azt érteném jobban, ha azt mondják, hogy nem néztek meg minden teszt esetet, és egyik esetben nem jó a javítás.
- A hozzászóláshoz be kell jelentkezni
Úgy, de holt lényegtelen a mi szintünkön. A lényeg, hogy foglalkozni kell vele.
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Eredetileg csak a végén lévő rövid választ írtam, de mivel visszaolvasva totál érthetetlen rövidítéshalmaz lett belőle, muszáj volt magyarázatot fűzni hozzá.
tldr begins
Van a processzorban egy olyan erőforrás, amit branch target buffer-nek (BTB) hívnak. Ebben levő entry-k lényegében azok a címek, ahova egy feltételes elagázás után ugorna a processzor, ha az adott feltétel teljesülne. Egy ugrásnál a target cím nem feltétlen konstans, lehet számított értek is (pl offset-eket hozza kell adni egy függvényen belüli utasítás címéhez), ezért nem lehet egzaktul előre tudni hova fog ugrani. Nyilván, mire a végrehajtás ténylegesen odaér, akkorra előáll a számított cím és kiderül hogy pontosan hova kell ugrani. Csakhogy ez a pipeline végen történik, miközben a processzornak mar régen el kellett volna kezdenie betölteni az ugrás célcíméről az első utasítást a pipeline elejére, hogy ne akadjon el a végrehajtás a pipelnie hosszának megfelelő számú órajelciklusig. Ezért van értelme ilyen BTB gyorsítótárat fenntartani, ami előre tartalmazza "tippeket", hogy merre folytatódhat a végrehajtás. Az entry-k korábbi futások alapján töltődnek.
Ha valamiért hibás találat van a BTB-ben, nincs gond, a processzor ugyan spekulatívan előre megpróbál végrehajtani rossz helyről utasítást, de ezt vissza tudja görgetni, mihelyst a pipeline végén kiderül, hogy rosszfele ment. A regiszterek értekének visszaírása, memória írás, üzemmódváltás stb. csak akkor történik meg, amikor már biztos, hogy jó fele megy. A legrosszabb, ami történt, hogy a végrehajtás lassú volt és a processzor feleslegesen elégetett néhány pJ energiát.
Így volt, amíg nem jöttek a Meltdown-Spectre típusú sebezhetőségek. Ezek arra épülnek, hogy a spekulativ write műveleteket ugyan visszagörgeti a processzor, de a read műveleteket nem, mert logikailag nincs mit rajtuk visszagörgetni. De mégis lehet csinálni "enyhén mellékhatásos" read-et, pl azzal, hogy az olvasott adat bekerül az L1 cache-be. Utána már csak azt kell kimérni, hogy ugyanerről a címről olvasás hány órajelciklus alatt történik meg, ezzel 1-1 bitet ki lehet szivárogtatni.
A Spectre v2-nél, ügyesen konstruált elő-traininggel bele lehetett szemetelni a BTB-be hibás bejegyzéseket, ami a processzort szándékosan megvezette. Mivel a BTB-t nem ürítette a processzor privilégiumszint-váltásokkor (különben mindig nulláról kéne felépülnie, tehát lassú lenne), ezért a userspace alkalmazás megtehette, hogy a kernelt vezette bele valami "gadget"-be (kernel kódjaban egy olyan részlet, amit a kontextusából kiragadva fel lehet használni memóriatartalom kiszivárogtatására).
tldr ends
Eredetileg az Intel "eIBRS" néven, valamint az ARM "CSV2" néven azt csinálta, hogy az IBRS (az ARM-os megfelelőjét nem tudom) utasítás hatására lekapcsolta a BTB-ből az ugrások célcímének spekulatív felhasználását. Ez ugyan lassít, de csak a rendszerhívások ki-be lépési pontjainál kellett alkalmazni.
Viszont kiderült most, hogy létezik valami "global branch history" puffer is a processzorban - ami, mint neve is mutatja, globális - az IBRS nem hat rá, és sikerült egy új módszert kidolgozni ami ezt a GBH puffert train-eli félre a BTB helyett. A támadás többi része teljesen megegyezik a Spectre V2-vel, ezért a szerzők úgy gondolták nem érdemes új variánsnak nevezni. Ettől függetlenül azt írják, hogy ehhez az új branch history injection-höz sokkal nehezebb alkalmas gadget-címet találni a kernelben.
Itt van a rendes leírás róla: https://www.vusec.net/projects/bhi-spectre-bhb/
Azt igérték lesz valami tudományos cikk is, amiben teljes részletességgel le van írva minden.
Régóta vágyok én, az androidok mezonkincsére már!
- A hozzászóláshoz be kell jelentkezni
Köszönöm. Egyáltalán nem értek ezekhez a dolgokhoz, de a leírásod alapján sikerült valamennyire felfognom.
- A hozzászóláshoz be kell jelentkezni
Kösz az össsefoglalót! Ez sajnos a zárt hardver átka, hogy késve derülnek ki ilyen dolgok, hogy „valami global branch history” is van a prociban, ezekről persze elfelejtenek előre szólni. Bár szerintem a kernelesek iszonyat gyorsan léptek, meg ahogy néztem a pacman frissítést, az Arch már szállítja a legújabb AMD CPU microcode-ot, 9-ei dátummal, gondolom a javítás került bele. Azt viszont kötve hiszem, hogy az Intel és a MS ilyen villám lesz.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni