Ochrana spustitelného prostoru - Executable space protection - Wikipedia
![]() | tento článek potřebuje další citace pro ověření.duben 2013) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
v zabezpečení počítače, ochrana spustitelného prostoru známky Paměť regiony jako neproveditelné, například pokus o provedení strojový kód v těchto oblastech způsobí výjimka. Využívá hardwarové funkce, jako je NX bit (bit bez provedení) nebo v některých případech softwarová emulace těchto funkcí. Technologie, které nějakým způsobem emulují nebo dodávají bit NX, však obvykle vyžadují měřitelnou režii; při použití hardwarem dodávaného bitu NX neukládá žádnou měřitelnou režii.
The Burroughs 5000 při svém zavedení v roce 1961 nabídl hardwarovou podporu pro ochranu spustitelného prostoru; tato schopnost zůstala ve svých nástupcích nejméně do roku 2006. Při provádění označená architektura, každé slovo paměti mělo přidružený skrytý bit značky, který jej označoval jako kód nebo data. Uživatelské programy tedy nemohou psát ani číst programové slovo a datová slova nelze provádět.
Pokud operační systém může označit některé nebo všechny zapisovatelné oblasti paměti jako nespustitelné, může být schopen zabránit zásobník a halda oblasti paměti nelze spustit. To pomáhá předcházet jistým přetečení zásobníku využije z úspěchu, zejména těch, které vkládají a spouštějí kód, jako je Sasser a Blaster červi. Tyto útoky se spoléhají na to, že část paměti, obvykle zásobník, je zapisovatelná i spustitelná; pokud tomu tak není, útok selže.
Implementace OS
Mnoho operačních systémů implementuje nebo má dostupnou politiku ochrany spustitelného prostoru. Zde je seznam takových systémů v abecedním pořadí, každý s technologiemi seřazenými od nejnovějších po nejstarší.
U některých technologií existuje souhrn, který poskytuje hlavní funkce, které každá technologie podporuje. Souhrn je strukturován níže.
- Hardwarově podporované procesory: (seznam architektur CPU oddělených čárkami)
- Emulace: (Ne) nebo (Architektura nezávislá) nebo (Seznam architektur CPU oddělených čárkami)
- Další podporované: (Žádný) nebo (Seznam architektur CPU oddělených čárkami)
- Standardní distribuce: (Ne) nebo (Ano) nebo (Seznam distribucí nebo verzí podporujících technologii oddělených čárkami)
- Datum vydání: (Datum prvního vydání)
Technologie dodávající nezávislost na architektuře emulace bude funkční na všech procesorech, které nepodporují hardware. Řada „Další podporované“ je pro procesory, které umožňují nějakou metodu šedé oblasti, kde explicitní bit NX dosud neexistuje, ale hardware ji umožňuje nějakým způsobem emulovat.
Android
Do Android 2.3 a novější, architektury, které jej podporují, mají ve výchozím nastavení nespustitelné stránky, včetně nespustitelného zásobníku a haldy.[1][2][3]
FreeBSD
Počáteční podpora pro NX bit, na x86-64 a IA-32 procesory, které to podporují, se poprvé objevily v FreeBSD -CURRENT 8. června 2004. Je ve vydáních FreeBSD od vydání 5.3.
Linux
The Linuxové jádro podporuje zapnutý bit NX x86-64 a IA-32 procesory, které to podporují, například moderní 64bitové procesory od AMD, Intel, Transmeta a VIA. Podpora této funkce v 64bitovém režimu na procesorech x86-64 byla přidána v roce 2004 společností Andi Kleen a později téhož roku, Ingo Molnár přidána podpora pro něj v 32bitovém režimu na 64bitových procesorech. Tyto funkce byly součástí Hlavní linka linuxového jádra od vydání jádra verze 2.6.8 v srpnu 2004.[4]
Dostupnost bitů NX na 32bitových jádrech x86, které mohou běžet na 32bitových procesorech x86 i na 64bitových procesorech kompatibilních s IA-32, je významná, protože 32bitové jádro x86 by za normálních okolností nečekalo bit NX že AMD64 nebo IA-64 zásoby; patch NX enabler zajišťuje, že se tato jádra pokusí použít bit NX, pokud jsou k dispozici.
Nějaký desktop Linuxové distribuce, jako Fedora, Ubuntu a openSUSE, ve výchozích jádrech ve výchozím nastavení nepovolujte možnost HIGHMEM64, která je nutná pro získání přístupu k bitům NX v 32bitovém režimu, protože PAE režim, který je vyžadován k použití bitu NX, způsobí selháníPentium Pro (včetně Pentium MMX) a Celeron M a Pentium M procesory bez podpory NX. Ostatní procesory, které nepodporují PAE, jsou AMD K6 a dříve, Transmeta Crusoe, VIA C3 a dříve a Geode GX a LX. Pracovní stanice VMware verze starší než 4.0, Parallels Workstation verze starší než 4.0 a Microsoft Virtual PC a Virtuální server nepodporují PAE u hosta. Fedora Core 6 a Ubuntu 9.10 a novější poskytují balíček kernel-PAE, který podporuje PAE a NX.
Ochrana paměti NX byla v Ubuntu vždy k dispozici pro všechny systémy, které podporovaly hardware a používaly 64bitové jádro nebo 32bitové jádro serveru. 32bitové desktopové jádro PAE (linux-image-generic-pae) v Ubuntu 9.10 a novějším také poskytuje režim PAE potřebný pro hardware s funkcí NX CPU. U systémů, které postrádají hardware NX, 32bitová jádra nyní poskytují aproximaci funkce procesoru NX prostřednictvím softwarové emulace, která může pomoci blokovat mnoho zneužití, které by útočník mohl spustit ze zásobníku nebo paměti haldy.
Funkce nespouštění byla také k dispozici pro jiné procesory jiné než x86 podporující tuto funkci pro mnoho verzí.
Štít Exec
červená čepice vývojář jádra Ingo Molnár vydal opravu jádra Linuxu s názvem Štít Exec pro přiblížení a využití funkcí NX na 32-bit x86 CPU. Oprava Exec Shield byla vydána do Seznam adresářů jádra Linuxu 2. května 2003, ale byl zamítnut kvůli sloučení se základním jádrem, protože zahrnoval některé rušivé změny v základním kódu za účelem zvládnutí složitých částí emulace. Podpora starších procesorů Exec Shield přibližuje emulaci NX sledováním horního limitu segmentu kódu. To ukládá pouze několik cyklů režie během přepínání kontextu, což je pro všechny záměry a účely neměřitelné. U starších procesorů bez bitu NX selhává ochrana Exec Shield stránky pod limitem segmentu kódu; volání mprotect () k označení vyšší paměti, například zásobníku, spustitelný soubor také označí celou paměť pod tímto limitem. V těchto situacích tedy schémata Exec Shield selhávají. To jsou náklady na nízkou režii štítu Exec. Štít Exec kontroluje dva ELF značení záhlaví, které určují, zda musí být zásobník nebo halda spustitelný. Nazývají se PT_GNU_STACK a PT_GNU_HEAP. Štít Exec umožňuje nastavit tyto ovládací prvky pro binární spustitelné soubory i pro knihovny; pokud spustitelný soubor načte knihovnu vyžadující uvolnění daného omezení, spustitelný soubor toto označení zdědí a toto omezení uvolní.
- Hardware podporované procesory: Vše, na čem Linux podporuje NX
- Emulace: NX aproximace pomocí segment kódu limit na IA-32 (x86 ) a kompatibilní
- Další podporované: Žádné
- Standardní distribuce: Fedora Core a Red Hat Enterprise Linux
- Datum vydání: 2. května 2003
PaX
The PaX Technologie NX může emulovat funkčnost NX nebo používat hardwarový NX bit. PaX funguje na procesorech x86, které nemají bit NX, například 32bitový x86. Linux jádro stále není dodáván s PaX (od května 2007); patch musí být sloučen ručně.
PaX poskytuje dvě metody emulace bitů NX, nazývané SEGMEXEC a PAGEEXEC. Metoda SEGMEXEC ukládá měřitelnou, ale nízkou režii, obvykle menší než 1%, což je konstantní skalár vzniklý v důsledku zrcadlení virtuální paměti používaného pro oddělení mezi prováděním a přístupem k datům.[5] SEGMEXEC má také za následek snížení virtuálního adresního prostoru úkolu na polovinu, což úkolu umožňuje přístup k méně paměti, než by za normálních okolností mohl. To není problém, dokud úkol nevyžaduje přístup k více než polovině normálního adresního prostoru, což je vzácné. SEGMEXEC nezpůsobuje, aby programy používaly více systémové paměti (tj. RAM), omezuje pouze to, k jakému množství mají přístup. Na 32bitových procesorech se to stane spíše 1,5 GB než 3 GB.
PaX dodává metodu podobnou aproximaci Exec Shield v PAGEEXEC jako zrychlení; když je však vyšší paměť označena jako spustitelná, ztrácí tato metoda svoji ochranu. V těchto případech PaX spadne zpět ke starší metodě variabilní režie, kterou používá PAGEEXEC k ochraně stránek pod limitem CS, což se v určitých případech může stát docela vysokou režií vzory přístupu do paměti. Když se metoda PAGEEXEC použije na CPU dodávajícím hardwarový NX bit, použije se hardwarový NX bit, takže nevznikne žádná významná režie.
PaX dodává omezení mprotect (), aby zabránila programům v označování paměti způsoby, které produkují paměť užitečnou pro potenciální využívat. Tato zásada způsobí, že určité aplikace přestanou fungovat, ale u postižených programů ji lze deaktivovat.
PaX umožňuje individuální kontrolu nad následujícími funkcemi technologie pro každý binární spustitelný soubor:
- PAGEEXEC
- SEGMEXEC
- mprotect () omezení
- Trampolína emulace
- Randomizovaná spustitelná základna
- Randomizovaná základna mmap ()
PaX ignoruje jak PT_GNU_STACK, tak PT_GNU_HEAP. V minulosti měl PaX možnost konfigurace, která ctí tato nastavení, ale tato možnost byla z bezpečnostních důvodů odstraněna, protože to nebylo považováno za užitečné. Stejných výsledků PT_GNU_STACK lze normálně dosáhnout deaktivací omezení mprotect (), protože program při načítání obvykle mprotect () použije zásobník. To nemusí být vždy pravda; v situacích, kdy se to nezdaří, jednoduše deaktivováním PAGEEXEC a SEGMEXEC efektivně odstraníte všechna omezení spustitelného prostoru a dáte úkolu stejnou ochranu v jeho spustitelném prostoru jako systém, který není PaX.
- Hardwarově podporované procesory: Alfa, AMD64, IA-64, MIPS (32 a 64 bitů), PA-RISC, PowerPC, SPARC
- Emulace: IA-32 (x86 )
- Další podporované: PowerPC (32 a 64 bitů), SPARC (32 a 64 bitů)
- Standardní distribuce: Alpine Linux
- Datum vydání: 1. října 2000
Operační Systém Mac
Operační Systém Mac pro Intel podporuje bit NX na všech procesorech podporovaných společností Apple (od Mac OS X 10.4.4 - první vydání Intel - dále). Mac OS X 10.4 podporoval pouze ochranu zásobníku NX. V systému Mac OS X 10.5 mají všechny 64bitové spustitelné soubory zásobník NX a haldu; W ^ X ochrana. To zahrnuje x86-64 (Core 2 nebo novější) a 64bitové PowerPC na G5 Macy.
NetBSD
Do NetBSD 2.0 a novější (9. prosince 2004), architektury, které ji podporují, mají nespustitelný zásobník a haldu.[6]
Architektury s přesností na stránku se skládají z: alfa, amd64, hppa, i386 (s PAE ), powerpc (ibm4xx), sh5, sparc (sun4m, sun4d ), sparc64.
Architektury, které je mohou podporovat pouze s podrobností regionu, jsou: i386 (bez PAE), další powerpc (například macppc).
Jiné architektury nemají prospěch z nespustitelného zásobníku nebo haldy; NetBSD ve výchozím nastavení nepoužívá žádnou softwarovou emulaci k nabízení těchto funkcí na těchto architekturách.
OpenBSD
Technologie v OpenBSD operační systém, známý jako W ^ X, označuje ve výchozím nastavení zapisovatelné stránky jako nespustitelné na procesorech, které to podporují. Na 32-bit x86 procesory, segment kódu je nastaven tak, aby zahrnoval pouze část adresního prostoru, aby poskytoval určitou úroveň ochrany spustitelného prostoru.
OpenBSD 3.3 byl dodán 1. května 2003 a jako první obsahoval W ^ X.
- Hardwarově podporované procesory: Alfa, AMD64, HPPA, SPARC
- Emulace: IA-32 (x86)
- Další podporované: Žádné
- Standardní distribuce: Ano
- Datum vydání: 1. května 2003
Solaris
Solaris podporuje globálně zakázání provádění zásobníku na procesorech SPARC od verze Solaris 2.6 (1997); v systému Solaris 9 (2002) byla přidána podpora pro zakázání provádění zásobníku na základě jednotlivých spustitelných souborů.
Okna
Začínání s Windows XP Service Pack 2 (2004) a Windows Server 2003 Service Pack 1 (2005), funkce NX byly poprvé implementovány na x86 architektura. Ochrana spustitelného prostoru v systému Windows se nazývá „Zabránění spuštění dat“ (DEP).
V systému Windows XP nebo Server 2003 byla ochrana NX použita u kritických Služby Windows výhradně ve výchozím nastavení. Pokud x86 procesor podporoval tuto funkci v hardwaru, pak byly funkce NX ve výchozím nastavení zapnuty automaticky v systému Windows XP / Server 2003. Pokud tato funkce nebyla procesorem x86 podporována, nebyla poskytnuta žádná ochrana.
Rané implementace DEP poskytly č randomizace rozvržení adresního prostoru (ASLR), který umožňoval potenciál útoky na návrat do libc které by bylo možné použít k deaktivaci DEP během útoku.[7] The PaX dokumentace rozpracovává, proč je ASLR nezbytná;[8] byl vytvořen důkaz koncepce podrobně popisující metodu, kterou by bylo možné obejít DEP bez ASLR.[9] Je možné vyvinout úspěšný útok, pokud je adresa připravených dat, jako jsou poškozené obrázky nebo MP3 může být útočníkem známa.
Microsoft přidal funkčnost ASLR do Windows Vista a Windows Server 2008. Na této platformě je DEP implementováno automatickým používáním PAE jádro ve 32bitovém systému Windows a nativní podpora v 64bitových jádrech. Systém Windows Vista DEP funguje tak, že označuje určité části paměti jako určené k uchovávání pouze dat, které procesor s podporou bitů NX nebo XD poté chápe jako nespustitelné.[10] Ve Windows od verze Vista lze na serveru zobrazit, zda je funkce DEP povolena nebo zakázána pro určitý proces Procesy / podrobnosti záložka v Správce úloh systému Windows.
Windows implementují software DEP (bez použití bitu NX) prostřednictvím „bezpečného strukturovaného zpracování výjimek“ společnosti Microsoft (SafeSEH). U správně zkompilovaných aplikací SafeSEH kontroluje, že při vyvolání výjimky během provádění programu je obslužná rutina výjimky definována aplikací tak, jak byla původně kompilována. Účinek této ochrany spočívá v tom, že útočník není schopen přidat svůj vlastní obslužný program výjimek, který má uložený na datové stránce prostřednictvím nekontrolovaného vstupu programu.[10][11]
Když je NX podporováno, je ve výchozím nastavení povoleno. Windows umožňuje programům řídit, které stránky zakazují jeho provádění API a také prostřednictvím záhlaví sekcí v a Soubor PE. V API je runtime přístup k bitům NX vystaven prostřednictvím Win32 Volání API VirtualAlloc [Ex] a VirtualProtect [Ex]. Každá stránka může být jednotlivě označena jako spustitelná nebo nespustitelná. Přes nedostatek předchozí hardwarové podpory x86 byla od začátku poskytována jak spustitelná, tak nespouštěcí nastavení stránky. Na procesorech před NX nemá přítomnost atributu „spustitelný soubor“ žádný účinek. Bylo to zdokumentováno, jako by to fungovalo, a ve výsledku to většina programátorů používala správně. Ve formátu souboru PE může každá sekce určit svou spustitelnost. Příznak spuštění existuje od začátku formátu a standardu linkery vždy používali tento příznak správně, dokonce i dlouho před bitem NX. Z tohoto důvodu je Windows schopen vynutit bit NX u starých programů. Za předpokladu, že programátor vyhověl „osvědčeným postupům“, by aplikace měly fungovat správně, jakmile bude NX skutečně vynucováno. Pouze v několika případech došlo k problémům; Vlastní .NET Runtime společnosti Microsoft měl problémy s bitem NX a byl aktualizován.
- Hardwarově podporované procesory: x86-64 (AMD64 a Intel 64), IA-64, Efficeon, Pentium M (pozdější revize), AMD Sempron (pozdější revize)
- Emulace: Ano
- Další podporované: Žádné
- Standardní distribuce: Příspěvek Windows XP
- Datum vydání: 6. srpna 2004
Xbox
V Microsoftu Xbox, i když CPU nemá bit NX, novější verze XDK nastavit limit segmentu kódu na začátek jádra .data sekce (za normálních okolností by po tomto bodě neměl být žádný kód). Počínaje verzí 51xx byla tato změna implementována také do jádra nových Xboxů. Tím došlo k prolomení technik, které se ze starých exploitů staly TSR. Rychle však byly vydány nové verze podporující tuto novou verzi, protože základní exploit nebyl ovlivněn.
Omezení
Kde se kód zapisuje a spouští za běhu - a Překladač JIT je prominentní příklad - kompilátor lze potenciálně použít k výrobě exploit kódu (např. pomocí JIT sprej ), který byl označen k provedení, a proto by nebyl uvězněn.[12][13]
Zpáteční programování může útočníkovi umožnit spuštění libovolného kódu, i když je vynucena ochrana spustitelného prostoru.
Viz také
- Přetečení zásobníku
- Ochrana proti přetečení vyrovnávací paměti
- Přetečení haldy
- Ochrana před rozbitím zásobníku
- Nekontrolovaný formátovací řetězec
Reference
- ^ "Vylepšení zabezpečení správy paměti", Přehled zabezpečení systému Android, vyvoláno 2012/07/29.
- ^ „Změna kódu Android ve výchozím nastavení povolující NX“. Změna zdroje Androidu. Citováno 2019-08-27.
- ^ „Požadavek na kompatibilitu Androidu pro NX“. Recenze kódu Android. Citováno 2019-08-27.
- ^ „Linuxové jádro 2.6.8“. kernelnewbies.org. 2004-08-14. Citováno 2015-08-01.
- ^ "Dokumentace PaX SEGMEXEC" (TXT). pax.grsecurity.net. 10. září 2004. Citováno 25. ledna 2015.
- ^ NetBSD, Nespustitelný zásobník a hromada, vyvoláno 2011/07/14.
- ^ „Blog o kyberterorismu“.
- ^ http://pax.grsecurity.net/docs/aslr.txt
- ^ „Neinformovaný - díl 2 článek 4“. Archivovány od originál dne 2016-03-12. Citováno 2010-03-19.
- ^ A b „Podrobný popis funkce Data Execution Prevention (DEP) v systému Windows XP Service Pack 2, Windows XP Tablet PC Edition 2005 a Windows Server 2003“. Microsoft. 2006-09-26. Archivovány od originál dne 11. 9. 2014. Citováno 2008-07-11.
- ^ Johnson, Peter. „Yasm User Manual, win32: Safe Structured Exception Handling“. Tortall Networks: Open Source a svobodný software. Archivovány od originál 2. ledna 2015. Citováno 27. září 2015.
- ^ Dion Blazakis. „Využití tlumočníka: odvození ukazatele a postřik JIT“ (PDF).
- ^ Alexey Sintsov (5. března 2010). "Psaní JIT-Spray Shellcode pro zábavu a zisk" (PDF). Archivovány od originál (PDF) dne 04.03.2016.