Míg az Intel Shadow Stack támogatása a Tiger Lake CPU-k óta létezik az Intel Control-flow Enforcement Technology (CET) részeként, végül a Linux 6.4 rendszermag esetében ez a biztonsági funkció engedélyezve van a fő Linux kernellel.
Az Intel Linux mérnökei régóta dolgoznak az árnyékverem támogatásán a CET részeként. A CET másik része, az Indirect Branch Tracking, a Linux 5.18-as verziójában került felfelé.
Az Intel árnyékverem funkciója a Linux 6.4-hez a visszatérési cím védelme, amely védelmet nyújt a visszatérés-orientált programozási (ROP) támadásokkal szemben. A legújabb AMD CPU-k Shadow Stack funkciót is biztosítanak, amely kompatibilis az Intel implementációjával.
A hosszú távú Intel Linux mérnök, Dave Hansen benyújtotta az x86/shstk lekérést hétfőn, hogy végre bemutassa ezt a funkciót. Ebben az üzenetben kifejtette:
Kérjük, húzza ki az x86/shstk-t a 6.4-hez. Ez a régóta várt Shadow Stack támogatás. Hosszú idő óta ez a leginkább kívánt hardverbiztonsági funkció. Mind az AMD, mind az Intel rendelkezik (kompatibilis) megvalósítással. A 11. generációs CPU-k óta jelen van az Intel oldalán, de volt néhány akadozás útközben, és kicsit késik.
A legtrükkösebb része ennek az egésznek (IMNHO) az volt, hogy árnyékhalmok léteznek egy engedélyes szürke területen. Egy árnyékverem PTE szó szerint azt írja, hogy Write=0, de néhány utasítás _lehet_ írni rá. A PTE-k szintén nem lehetnek csak olvashatók, így nem lehet őket tehénmentesíteni. Furcsa golyók.
A Write=0,Dirty=1 PTE engedélyek azt is jelentik, hogy a dirty bit nem használható olyan szabadon, mint korábban. Ez a két dolog együttesen jelentős mennyiségű PTE-kezelési lemorzsolódást eredményez.
Még néhány dolog, amit tudnod kell:
1. Nem triviális mennyiségű mag mm-es lemorzsolódás található. Ack-jei vannak mm-es emberektől, és remélem, ez nem meglepetés Andrew számára. Ezek hozzáadnak egy VMA argumentumot a pte_mkwrite() függvényhez. Andrew halmában van egy új felhasználó, akit ki kell javítani, mielőtt összeolvadna a mm fával.
2. Szokatlan vicsorgás történt a felhasználói térrel kapcsolatos kompatibilitási problémák miatt az árnyékveremekkel kapcsolatban. Bár az új arch_prctl() értékekre való átállás segített, még mindig elképzelhetünk olyan forgatókönyveket, amelyekben ez a régi kód megharaphat bennünket. A terv az, hogy megpróbáljuk letiltani a problémás alkalmazásokat az árnyékverem használatáról, ha bármi adódik a gyakorlatban. Nyilvánvalóan ezekre kell figyelnünk.
3. Ez ütközik a LAM kóddal, amely x86/mm-ben érkezik. A felbontást megbeszélem, amikor x86/mm-t küldök.
Linus Torvalds írásának pillanatáig még nem vette igénybe a Shadow Stack támogatását, és nem fűzött megjegyzéseket a levelezőlistához. Meglátjuk, minden rendben van-e azzal, hogy Linus bekapcsolja ezt a funkciót a Linux 6.4-hez, vagy vannak-e fenntartásai a fenti megjegyzések alapján. Remélhetőleg azonban ezt az Intel/AMD biztonsági funkciót, amely segít a ROP támadások kivédésében, végre összevonják.