PaX

V počítačové bezpečnosti je PaX (pron. "Pax") záplatou linuxového jádra , která poskytuje možnost konfigurovat minimální přístupová práva aplikací ke stránkám paměti. To poskytuje jemné nastavení, které umožňuje programům provádět pouze ty akce, které jsou nezbytné, na základě funkcí, které poskytují, ale ne více. PaX byl poprvé vydán v roce 2000. Od roku 2014 je distribuován pouze v rámci projektu grsecurity [1] , který se stal placeným od dubna 2017 [2] .

PaX označí datový segment programů v paměti jako nespustitelný (protože z definice nemůže obsahovat programové direktivy, které je třeba provést) a kódový segment jako nezapisovatelný a navíc přiděluje paměť programu z libovolného míst na každý požadavek (randomizace stránek paměti). Jakýkoli program, který se pokusí přenést řízení do kódu, který je v nespustitelné paměti, je nucen ukončit [1] .

Tato technika je účinná proti použití různých exploitů využívajících například zranitelnost založenou na přetečení vyrovnávací paměti. Taková ochrana zpočátku zcela znemožňuje přímé spouštění kódu z paměti a zároveň z aplikačního hlediska ztěžuje provádění tzv. return-to-libc (ret2libc) útoků (stávají se náhodnějšími, bez předvídatelný výsledek). PaX však zároveň nezabrání chybám, které vedou k možnosti předefinování proměnných a hodnot ukazatelů.

PaX napsal stejnojmenný vývojový tým. Zakladatel PaX v současnosti preferuje zůstat v anonymitě z veřejně neznámých důvodů.

Popis

Poměrně velká část z celkového počtu zranitelností v počítačových systémech je způsobena chybami v programech, které umožňují redefinovat jejich funkce jejich přepisováním za běhu (přímo v RAM). Princip fungování mnoha červů, virů a také četné metody přímých pokusů o hackování systémů jsou založeny na změně obsahu paměti vložením a následným spuštěním škodlivého kódu, na spuštění části obsahu paměťové oblasti záměrnou změnou ukazatele atd. Pokud jsou takové akce nějakým způsobem blokovány, pak se celkové poškození stává zcela nepatrným, nebo nemusí být vůbec, i když virus pronikl do systému. Navíc mnoho červů (jako například Sasser ) nebude v tomto případě schopno vůbec proniknout do systému.

PaX byl vytvořen proto, aby takovým útokům předcházel a dělal to co nejobecnějším způsobem, tedy aby se zabránilo spouštění nelegitimního kódu řízením přístupu do paměti (pro čtení, zápis, spouštění a jejich možné kombinace), navíc, aniž byste se přímo dotkli samotného spustitelného kódu. Za tak nízkou cenu dělá PaX systém odolnější vůči hackerům, snižuje počet exploitů, které vedou k aplikačnímu odmítnutí služby ( DoS ) nebo vzdáleně monitorují průběh provádění kódu; exploity, které využívají takové zranitelnosti k udělení přístupu root útočníkovi, přístupu k citlivým informacím v systému nebo k jinému poškození. Místo toho se záležitost může omezit na ukončení fungování jakéhokoli procesu nebo programu s minimálními důsledky pro celý systém.

Škodou způsobenou DoS útokem je nejčastěji ztráta času a prostředků v důsledku selhání funkčnosti napadeného objektu. PaX však v tomto případě zabrání nelegitimnímu přístupu a distribuci citlivých systémových dat kvůli útoku a nezabrání útoku samotnému. Mezitím jsou přímé důsledky DoS také velmi nežádoucí, zejména pro systémy, kde je jakékoli přerušení služby kritické a pronikání narušitele zjevně způsobuje menší škody než ukončení služeb. V tomto případě PaX nebude nejlepší řešení, ale přesto je to docela přijatelná metoda ochrany důležitých informací.

Mnoho chyb (ale rozhodně ne všech) vývojářů způsobuje, že jejich programy špatně zacházejí s pamětí. To poskytuje hypotetickou možnost přimět program udělat něco, co dělat nemá (například vydat privilegovaný shell). Účelem PaX není najít a opravit taková zranitelnost, ale spíše zabránit jejich zneužití útočícími aplikacemi. Důsledky chyb budou minimalizovány – jednoduše se přeruší provádění programu, což je z pohledu PaX lepší než jeho narušená funkčnost.

Je třeba chápat, že PaX přímo nebrání přetečení bufferu, ale pouze se snaží efektivně potlačit případné vývojářské chyby s tím spojené, které mohou vést například k nezamýšlenému přístupu do systému. Existuje však vývoj, jako je Stack-Smashing Protector a StackGuard , které se snaží přesně detekovat samotné přetečení vyrovnávací paměti a zastavit spouštění programů, které kompromitují systém. Tato technika se nazývá ochrana před rozbitím zásobníku . Je zaměřena na přímé blokování přímých útoků, pokud je to možné. Zatímco jak PaX, tak ochrana proti rozbíjení zásobníku v podstatě slouží stejnému účelu, nejsou zaměnitelné. Zavedení obou technologií však jistě systém zajistí bezpečnější. Některé distribuce Linuxu již obsahují obě komponenty najednou (PaX a Stack Smash Protection) [3] .

Od října 2006 PaX ještě nebyl začleněn do hlavní řady jádra , protože vývojáři patche věří, že stále není dostatečně vyspělý. Ale i přes skutečnost, že PaX byl úspěšně použit na mnoha architekturách, na řadě dalších je stále podporován pouze částečně nebo není podporován vůbec. PaX byl tedy úspěšně použit na IA-32 ( x86 ), AMD64 , IA-64 , Alpha , PA-RISC , 32 a 64bitových MIPS , PowerPC a SPARC .

Viz také

Poznámky

  1. ↑ 1 2 Robert C. Seacord. Zabezpečené kódování v C a C++: Bezpečné kódování v C a C++ . - Addison-Wesley, 2013. - S. 115-116. — 1169 s. — ISBN 978-0-13-298197-2 .
  2. Jonathan Corbet. Grsecurity je soukromý [  LWN.net ] . lwn.net (4. května 2017). Staženo 26. května 2020. Archivováno z originálu dne 1. dubna 2020.
  3. o | Alpine Linux . www.alpinelinux.org. Datum přístupu: 19. ledna 2016. Archivováno z originálu 15. ledna 2016.

Literatura

Odkazy