Kees Cook představil nové opravy pro zlepšení zabezpečení zásobníku jádra Linuxu

Linux

Kees Cook, bývalý šéf sysadmin na kernel.org a vůdce bezpečnostního týmu Ubuntu, nyní pracuje ve společnosti Google na ochraně Android a ChromeOS, vydala sadu oprav, které náhodně vyvažují vyrovnání zásobníku jádra při zpracování systémových volání. Opravy zlepšují zabezpečení jádra změnou umístění zásobníku, lnebo to dělá útoky zásobníku mnohem obtížnějším a méně úspěšným

Původní nápad na opravu náleží projektu PaX RANDKSTACK. V roce 2019 se Elena Reshetova, inženýrka společnosti Intel, pokusila vytvořit implementaci této myšlenky, vhodnou pro zahrnutí do hlavního složení linuxového jádra.

Iniciativu následně převzal Kees Cook kdo představil vhodnou implementaci pro hlavní verzi jádra a jehož opravy jsou plánovány pro verzi 5.13 Linuxu.

Režim bude ve výchozím nastavení deaktivován a pro jeho aktivaci je nabízen parametr příkazového řádku jádra "Randomize_kstack_offset = zapnuto / vypnuto»A nastavení CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, Kromě toho se režie povolení režimu odhaduje na přibližně 1% ztrátu výkonu.

Podstatou navrhované ochrany je zvolit náhodné vyrovnání zásobníku při každém systémovém volání, což komplikuje určení rozložení zásobníku v paměti, i když jsou přijaty informace o adrese, protože základní adresa zásobníku se při příštím volání změní.

Na rozdíl od implementace PaX RANDK STACK, v opravách navržených pro zahrnutí do jádra, randomizace se neprovádí v počáteční fázi, ale po nastavení struktury pt_regs, což znemožňuje použití metod založených na ptrace k určení náhodného posunu během dlouhotrvajícího systémového volání.

Jelikož se ochrana zásobníku jádra Linuxu neustále zlepšovala (mapování zásobníku založené na vmap s ochrannými stránkami, odstraňování thread_info, STACKLEAK), museli útočníci najít nové způsoby, jak jejich exploity fungovat.

Mají a nadále se spoléhají na determinismus zásobníku jádra v situacích, kdy VMAP_STACK a THREAD_INFO_IN_TASK_STRUCT nebyly relevantní. Například následující nedávné útoky by byly brzděny, pokud by offset systému nebyl mezi systémovými voláními deterministický

Účelem funkce randomize_kstack_offset je přidání náhodného posunutí po vložení pt_regs do zásobníku a před použitím zbytku zásobníku podprocesů během zpracování systémového volání a změňte ho pokaždé, když proces vydá systémové volání. Zdroj náhodnosti je aktuálně definován architekturou (ale x86 používá nízký bajt rdtsc ()).

Budoucí vylepšení jsou možná pro různé zdroje entropie, ale mimo rozsah této opravy. Aby se zvýšila nepředvídatelnost, jsou na konci systémových volání volena nová vyrovnání (jejichž čas by měl být měřitelný z uživatelského prostoru méně snadno než v době zadání systémového volání) a jsou uloženy v jedné proměnné za CPU, aby životnost hodnoty nezůstala výslovně vázána na jeden úkol.

Na x86 pro to nejsou žádné viditelné změny, protože spořič zásobníku je pro kompilační jednotku již bezpodmínečně deaktivován, ale změna je vyžadována v arm64. Bohužel neexistuje žádný atribut, kterým lze zakázat spořič zásobníku pro konkrétní funkce. Porovnání s funkcí PaX RANDKSTACK: Funkce RANDKSTACK randomizuje umístění začátku zásobníku (cpu_current_top_of_stack), to znamená, že zahrnuje umístění struktury pt_regs na zásobníku.

Zpočátku tento patch sledoval stejný přístup, ale během nedávných diskusí bylo zjištěno, že mají malou hodnotu, jako kdyby byla útočníkovi k dispozici funkce ptrace, můžete použít PTRACE_PEEKUSR ke čtení / zápisu různých offsetů do struktury pt_regs, sledovat chování přístupové mezipaměti pt_regs a zjistit náhodný vyrovnání zásobníku.

Nakonec je to zmíněno počáteční implementace podporuje procesory ARM64 a x86 / x86_64.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Za data odpovídá: AB Internet Networks 2008 SL
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.