Preventie van gegevensuitvoering
Preventie van gegevensuitvoering (DEP) is een systeemniveaufunctie voor geheugenbeveiliging die is ingebouwd in het besturingssysteem vanaf Windows XP en Windows Server 2003. MET DEP kan het systeem een of meer pagina's met geheugen markeren als niet-uitvoerbaar bestand. Geheugenregio's markeren als niet-uitvoerbaar, betekent dat code niet kan worden uitgevoerd vanuit die regio van het geheugen, waardoor het moeilijker wordt voor het gebruik van bufferoverschrijdingen.
DEP voorkomt dat code wordt uitgevoerd vanaf gegevenspagina's, zoals de standaard-heap, stacks en geheugengroepen. Als een toepassing probeert code uit te voeren vanaf een gegevenspagina die is beveiligd, treedt er een uitzondering op voor geheugentoegang en als de uitzondering niet wordt verwerkt, wordt het aanroepen beƫindigd.
DEP is niet bedoeld als een uitgebreide verdediging tegen alle aanvallen; het is bedoeld als een ander hulpprogramma dat u kunt gebruiken om uw toepassing te beveiligen.
Hoe preventie van gegevensuitvoering werkt
Als een toepassing probeert code uit te voeren vanaf een beveiligde pagina, ontvangt de toepassing een uitzondering met de statuscode STATUS_ACCESS_VIOLATION. Als uw toepassing code moet uitvoeren vanaf een geheugenpagina, moet deze de juiste virtuele geheugenbeveiliging toewijzen en instellen kenmerken. Het toegewezen geheugen moet worden gemarkeerd als PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITEof PAGE_EXECUTE_WRITECOPY bij het toewijzen van geheugen. Heap-toewijzingen die zijn gemaakt door het aanroepen van de malloc- en HeapAlloc--functies zijn niet uitvoerbaar.
Toepassingen kunnen geen code uitvoeren vanaf de standaardproces-heap of de stack.
DEP wordt geconfigureerd bij het opstarten van het systeem volgens de beleidsinstelling voor paginabeveiliging zonder uitvoering in de opstartconfiguratiegegevens. Een toepassing kan de huidige beleidsinstelling ophalen door de functie GetSystemDEPPolicy aan te roepen. Afhankelijk van de beleidsinstelling kan een toepassing de DEP-instelling voor het huidige proces wijzigen door de functie SetProcessDEPPolicy- aan te roepen.
Aandachtspunten voor programmeren
Een toepassing kan de functie VirtualAlloc gebruiken om uitvoerbaar geheugen toe te wijzen met de juiste opties voor geheugenbeveiliging. Het wordt aangeraden dat een toepassing die minimaal is ingesteld, de optie PAGE_EXECUTE geheugenbeveiliging. Nadat de uitvoerbare code is gegenereerd, wordt het aanbevolen dat de toepassing geheugenbeveiligingen instelt om schrijftoegang tot het toegewezen geheugen niet toe te laten. Toepassingen kunnen schrijftoegang tot toegewezen geheugen weigeren met behulp van de functie VirtualProtect. Het ongedaan maken van schrijftoegang zorgt voor maximale beveiliging voor uitvoerbare regio's van procesadresruimte. U moet proberen toepassingen te maken die gebruikmaken van de kleinste uitvoerbare adresruimte die mogelijk is, waardoor de hoeveelheid geheugen die wordt blootgesteld aan geheugenuitbuiting wordt geminimaliseerd.
U moet ook proberen de indeling van het virtuele geheugen van uw toepassing te beheren en uitvoerbare regio's te maken. Deze uitvoerbare regio's moeten zich in een lagere geheugenruimte bevinden dan niet-uitvoerbare regio's. Door uitvoerbare regio's onder niet-uitvoerbare regio's te zoeken, kunt u voorkomen dat een bufferoverloop overloopt naar het uitvoerbare gebied van het geheugen.
Toepassingscompatibiliteit
Sommige toepassingsfunctionaliteit is niet compatibel met DEP. Toepassingen die dynamische code genereren (zoals Just-In-Time code genereren) en gegenereerde code niet expliciet markeren met een machtiging voor uitvoeren, kunnen compatibiliteitsproblemen hebben op computers die DEP gebruiken. Toepassingen die naar de ATL-versie (Active Template Library) versie 7.1 en eerder zijn geschreven, kunnen proberen code uit te voeren op pagina's die zijn gemarkeerd als niet-uitvoerbaar, waardoor een NX-fout wordt geactiveerd en de toepassing wordt beƫindigd; Zie SetProcessDEPPolicyvoor meer informatie. De meeste toepassingen die acties uitvoeren die niet compatibel zijn met DEP, moeten worden bijgewerkt om goed te kunnen functioneren.
Een klein aantal uitvoerbare bestanden en bibliotheken kan uitvoerbare code bevatten in de gegevenssectie van een afbeeldingsbestand. In sommige gevallen kunnen toepassingen kleine codesegmenten (ook wel thunks genoemd) plaatsen in de gegevenssecties. DEP markeert echter secties van het afbeeldingsbestand dat in het geheugen wordt geladen als niet-uitvoerbaar, tenzij in de sectie het uitvoerbare kenmerk is toegepast.
Daarom moet uitvoerbare code in gegevenssecties worden gemigreerd naar een codesectie of moet de gegevenssectie met de uitvoerbare code expliciet worden gemarkeerd als uitvoerbaar. Het uitvoerbare kenmerk, IMAGE_SCN_MEM_EXECUTE, moet worden toegevoegd aan het Kenmerken veld van de bijbehorende sectieheader voor secties die uitvoerbare code bevatten. Zie de documentatie in uw linker voor meer informatie over het toevoegen van kenmerken aan een sectie.