Megosztás a következőn keresztül:


Adatvégrehajtás megakadályozása

Az Adatvégrehajtás-megelőzés (DEP) egy rendszerszintű memóriavédelmi funkció, amely a Windows XP-től és a Windows Server 2003-tól kezdve az operációs rendszerbe van beépítve. A DEP lehetővé teszi a rendszer számára, hogy egy vagy több memórialapot nem végrehajthatóként jelöljön meg. A memóriarégiók nem végrehajthatóként való megjelölése azt jelenti, hogy a kód nem futtatható az adott memóriaterületről, ami megnehezíti a puffertúllépések kihasználását.

A DEP megakadályozza, hogy a kód olyan adatoldalakról fusson, mint az alapértelmezett halom, a halom és a memóriakészlet. Ha egy alkalmazás egy védett adatlapról próbál kódot futtatni, memóriahozzáférési szabálysértési kivétel lép fel, és ha a kivételt nem kezelik, a hívási folyamat leáll.

A DEP nem célja, hogy átfogó védelmet nyújtson minden kihasználtság ellen; ez egy másik eszköz, amellyel biztonságossá teheti az alkalmazást.

Az adatvégrehajtás megakadályozása

Ha egy alkalmazás egy védett oldalról próbál kódot futtatni, az alkalmazás kivételt kap az állapotkód STATUS_ACCESS_VIOLATION. Ha az alkalmazásnak egy memórialapról kell futtatnia a kódot, le kell foglalnia és be kell állítania a megfelelő virtuális memóriavédelmi attribútumokat. A lefoglalt memóriát PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITEvagy PAGE_EXECUTE_WRITECOPY kell megjelölni a memória lefoglalásakor. A malloc és HeapAlloc függvény meghívásával végrehajtott halomfoglalások nem végrehajthatók.

Az alkalmazások nem futtathatnak kódot az alapértelmezett folyamathalomból vagy a veremből.

A DEP rendszerindításkor van konfigurálva a rendszerindításkor a rendszerindítási konfigurációs adatokban a nem futtatható lapvédelmi házirend-beállításnak megfelelően. Az alkalmazások a GetSystemDEPPolicy függvény meghívásával lekérhetik az aktuális házirend-beállítást. A házirend-beállítástól függően az alkalmazás módosíthatja az aktuális folyamat DEP-beállítását a SetProcessDEPPolicy függvény meghívásával.

Programozási szempontok

Az alkalmazások a VirtualAlloc függvénnyel lefoglalhatják a végrehajtható memóriát a megfelelő memóriavédelmi beállításokkal. Javasoljuk, hogy egy alkalmazás legalább a PAGE_EXECUTE memóriavédelmi beállítást állítsa be. A végrehajtható kód létrehozása után ajánlott, hogy az alkalmazás memóriavédelmet állítson be a lefoglalt memória írási hozzáférésének letiltásához. Az alkalmazások a VirtualProtect függvény használatával letilthatják a lefoglalt memória írási hozzáférését. Az írási hozzáférés letiltása maximális védelmet biztosít a folyamatcímterület végrehajtható régiói számára. Olyan alkalmazásokat kell létrehoznia, amelyek a lehető legkisebb végrehajtható címteret használják, ami minimálisra csökkenti a memória kihasználtságának kitett memória mennyiségét.

Meg kell kísérelnie az alkalmazás virtuális memóriájának elrendezését is, és végrehajtható régiókat kell létrehoznia. Ezeknek a végrehajtható régióknak alacsonyabb memóriaterületen kell lenniük, mint a nem végrehajtható régióknak. A végrehajtható régiók nem végrehajtható régiók alatti helyének kiválasztásával megakadályozhatja, hogy a puffer túlcsorduljon a végrehajtható memóriaterületre.

Alkalmazáskompatibilitás

Egyes alkalmazásfunkciók nem kompatibilisek a DEP-vel. A dinamikus kódgenerálást (például Just-In-Time kódgenerálást) végző alkalmazások, amelyek nem jelölik meg explicit módon a generált kódot végrehajtási engedéllyel, kompatibilitási problémákat okozhatnak a DEP-t használó számítógépeken. Az Active Template Library (ATL) 7.1-es és korábbi verziójára írt alkalmazások megpróbálhatják végrehajtani a kódot a nem végrehajthatóként megjelölt oldalakon, ami NX-hibát vált ki, és leállítja az alkalmazást; További információ: SetProcessDEPPolicy. A DEP-vel nem kompatibilis műveleteket végrehajtó alkalmazások többségét frissíteni kell a megfelelő működéshez.

Kis számú végrehajtható fájl és tár tartalmazhat végrehajtható kódot egy képfájl adatszakaszában. Bizonyos esetekben az alkalmazások kis kódszegmenseket (más néven thunkokat) helyezhetnek el az adatszakaszokban. A DEP azonban nem végrehajthatóként jelöli meg a memóriába betöltött képfájl szakaszait, kivéve, ha a szakasz a végrehajtható attribútumot alkalmazza.

Ezért az adatszakaszok végrehajtható kódját át kell telepíteni egy kódszakaszba, vagy a végrehajtható kódot tartalmazó adatszakaszt explicit módon végrehajthatóként kell megjelölni. A végrehajtható attribútumot (IMAGE_SCN_MEM_EXECUTE) hozzá kell adni a végrehajtható kódot tartalmazó szakaszok megfelelő szakaszfejlécének Jellemzők mezőjéhez. Az attribútumok szakaszhoz való hozzáadásáról további információt a hivatkozáshoz mellékelt dokumentációban talál.

adatvégrehajtás-megelőzési

Memóriavédelem konfigurálása Windows XP SP2