Sdílet prostřednictvím


Prevence spuštění dat

Ochrana před spuštěním dat (DEP) je funkce ochrany paměti na úrovni systému, která je integrovaná v operačním systému počínaje systémem Windows XP a Windows Server 2003. Program DEP umožňuje systému označit jednu nebo více stránek paměti jako nespustitelné. Označení oblastí paměti jako nespustitelných prostředků znamená, že kód nelze spustit z této oblasti paměti, což znesnadňuje zneužití přetečení vyrovnávací paměti.

PROGRAM DEP zabraňuje spuštění kódu z datových stránek, jako jsou výchozí haldy, zásobníky a fondy paměti. Pokud se aplikace pokusí spustit kód z datové stránky, která je chráněná, dojde k výjimce porušení přístupu k paměti a pokud se výjimka nezpracuje, volající proces se ukončí.

PROGRAM DEP není určen jako komplexní obrana proti všem zneužitím; je určen jako další nástroj, který můžete použít k zabezpečení aplikace.

Jak funguje prevence spouštění dat

Pokud se aplikace pokusí spustit kód z chráněné stránky, aplikace obdrží výjimku se stavovým kódem STATUS_ACCESS_VIOLATION. Pokud aplikace musí spustit kód ze stránky paměti, musí přidělit a nastavit správnou virtuální ochranu paměti atributy. Přidělená paměť musí být při přidělování paměti označena PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITEnebo PAGE_EXECUTE_WRITECOPY. Přidělení haldy provedené voláním malloc a funkce HeapAlloc nejsou spustitelné.

Aplikace nemůžou spustit kód z výchozí haldy procesu ani ze zásobníku.

Program DEP se konfiguruje při spouštění systému podle nastavení zásad ochrany stránek bez spuštění v konfiguračních datech spouštění. Aplikace může získat aktuální nastavení zásad voláním funkce GetSystemDEPPolicy. V závislosti na nastavení zásad může aplikace změnit nastavení DEP pro aktuální proces voláním funkce SetProcessDEPPolicy.

Důležité informace o programování

Aplikace může použít funkci VirtualAlloc k přidělení spustitelné paměti s odpovídajícími možnostmi ochrany paměti. Navrhuje se, aby aplikace nastavil minimálně možnost ochrany paměti PAGE_EXECUTE. Po vygenerování spustitelného kódu se doporučuje, aby aplikace nastavila ochranu paměti, aby nepovolila přístup k zápisu do přidělené paměti. Aplikace mohou zakázat přístup k zápisu do přidělené paměti pomocí funkce VirtualProtect. Zákaz přístupu k zápisu zajišťuje maximální ochranu pro spustitelné oblasti adresního prostoru procesu. Měli byste se pokusit vytvořit aplikace, které používají nejmenší možný spustitelný adresní prostor, což minimalizuje množství paměti vystavené zneužití paměti.

Měli byste se také pokusit řídit rozložení virtuální paměti vaší aplikace a vytvořit spustitelné oblasti. Tyto spustitelné oblasti by se měly nacházet v menším paměťovém prostoru než spustitelné oblasti. Umístěním spustitelných oblastí pod nespustitelnými oblastmi můžete zabránit přetečení vyrovnávací paměti do spustitelné oblasti paměti.

Kompatibilita aplikací

Některé funkce aplikace nejsou kompatibilní s programem DEP. Aplikace, které provádějí dynamické generování kódu (například just-In-Time generování kódu) a nedají explicitně označit vygenerovaný kód s oprávněním ke spuštění, můžou mít problémy s kompatibilitou na počítačích, které používají program DEP. Aplikace zapsané do knihovny ATL (Active Template Library) verze 7.1 a starší se mohou pokusit spustit kód na stránkách označených jako nespustitelné, což aktivuje chybu NX a ukončí aplikaci; Další informace naleznete v tématu SetProcessDEPPolicy. Většina aplikací, které provádějí akce nekompatibilní s programem DEP, musí být aktualizována, aby fungovaly správně.

Malý počet spustitelných souborů a knihoven může obsahovat spustitelný kód v datové části souboru obrázku. V některých případech můžou aplikace v datových oddílech umístit malé segmenty kódu (běžně označované jako thunks). Program DEP však označí oddíly souboru obrázku, který je načten v paměti jako nespustitelný, pokud oddíl nemá použitý spustitelný atribut.

Proto by se spustitelný kód v datových oddílech měl migrovat do oddílu kódu nebo by měl být datový oddíl obsahující spustitelný kód explicitně označený jako spustitelný. Spustitelný atribut, IMAGE_SCN_MEM_EXECUTE, by měl být přidán do Vlastnosti pole odpovídající hlavičky oddílu pro oddíly, které obsahují spustitelný kód. Další informace o přidávání atributů do oddílu najdete v dokumentaci, která je součástí linkeru.

prevence spuštění dat

Konfigurace ochrany paměti v systému Windows XP SP2