Condividi tramite


Prevenzione dell'esecuzione dei dati

Protezione esecuzione dati (DEP) è una funzionalità di protezione della memoria a livello di sistema integrata nel sistema operativo a partire da Windows XP e Windows Server 2003. DEP consente al sistema di contrassegnare una o più pagine di memoria come non eseguibili. Contrassegnare le aree di memoria come non eseguibili significa che il codice non può essere eseguito da tale area di memoria, che rende più difficile lo sfruttamento dei sovraccarichi del buffer.

DEP impedisce l'esecuzione del codice da pagine di dati, ad esempio l'heap predefinito, gli stack e i pool di memoria. Se un'applicazione tenta di eseguire codice da una pagina di dati protetta, si verifica un'eccezione di violazione dell'accesso alla memoria e, se l'eccezione non viene gestita, il processo chiamante viene terminato.

DEP non è destinato a essere una difesa completa contro tutti gli exploit; è progettato per essere un altro strumento che è possibile usare per proteggere l'applicazione.

Funzionamento della prevenzione dell'esecuzione dei dati

Se un'applicazione tenta di eseguire codice da una pagina protetta, l'applicazione riceve un'eccezione con il codice di stato STATUS_ACCESS_VIOLATION. Se l'applicazione deve eseguire codice da una pagina di memoria, deve allocare e impostare la protezione della memoria virtuale appropriata attributi. La memoria allocata deve essere contrassegnata PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITEo PAGE_EXECUTE_WRITECOPY durante l'allocazione della memoria. Le allocazioni dell'heap effettuate chiamando le malloc e heapAlloc funzioni non eseguibili.

Le applicazioni non possono eseguire codice dall'heap del processo predefinito o dallo stack.

DEP viene configurato all'avvio del sistema in base all'impostazione dei criteri di protezione delle pagine senza esecuzione nei dati di configurazione di avvio. Un'applicazione può ottenere l'impostazione dei criteri corrente chiamando la funzione GetSystemDEPPolicy. A seconda dell'impostazione dei criteri, un'applicazione può modificare l'impostazione DEP per il processo corrente chiamando la funzione SetProcessDEPPolicy.

Considerazioni sulla programmazione

Un'applicazione può usare la funzione virtualalloc per allocare memoria eseguibile con le opzioni di protezione della memoria appropriate. È consigliabile impostare almeno un'applicazione con l'opzione di protezione della memoria PAGE_EXECUTE. Dopo aver generato il codice eseguibile, è consigliabile che l'applicazione imposti le protezioni di memoria per impedire l'accesso in scrittura alla memoria allocata. Le applicazioni possono impedire l'accesso in scrittura alla memoria allocata usando la funzione VirtualProtect. La disabilitazione dell'accesso in scrittura garantisce la massima protezione per le aree eseguibili dello spazio indirizzi del processo. È consigliabile tentare di creare applicazioni che usano lo spazio indirizzi eseguibile più piccolo possibile, riducendo al minimo la quantità di memoria esposta allo sfruttamento della memoria.

È anche consigliabile tentare di controllare il layout della memoria virtuale dell'applicazione e creare aree eseguibili. Queste aree eseguibili devono trovarsi in uno spazio di memoria inferiore rispetto alle aree non eseguibili. Individuando le aree eseguibili sottostanti le aree non eseguibili, è possibile evitare che un overflow del buffer venga sovraccaricato nell'area eseguibile della memoria.

Compatibilità delle applicazioni

Alcune funzionalità dell'applicazione non sono compatibili con DEP. Le applicazioni che eseguono la generazione dinamica del codice (ad esempio Just-In-Time generazione di codice) e non contrassegnano in modo esplicito il codice generato con l'autorizzazione di esecuzione possono avere problemi di compatibilità nei computer che usano DEP. Le applicazioni scritte in Active Template Library (ATL) versione 7.1 e precedenti possono tentare di eseguire codice nelle pagine contrassegnate come non eseguibili, che attiva un errore NX e termina l'applicazione; Per altre informazioni, vedere SetProcessDEPPolicy. La maggior parte delle applicazioni che eseguono azioni incompatibili con DEP deve essere aggiornata per funzionare correttamente.

Un numero ridotto di file eseguibili e librerie può contenere codice eseguibile nella sezione dati di un file di immagine. In alcuni casi, le applicazioni possono inserire piccoli segmenti di codice (comunemente denominati batchk) nelle sezioni dei dati. Tuttavia, DEP contrassegna le sezioni del file di immagine che viene caricato in memoria come non eseguibile, a meno che la sezione non abbia l'attributo eseguibile applicato.

Pertanto, il codice eseguibile nelle sezioni di dati deve essere migrato in una sezione di codice o la sezione dati che contiene il codice eseguibile deve essere contrassegnata in modo esplicito come eseguibile. L'attributo eseguibile, IMAGE_SCN_MEM_EXECUTE, deve essere aggiunto al campo caratteristiche dell'intestazione di sezione corrispondente per le sezioni che contengono codice eseguibile. Per altre informazioni sull'aggiunta di attributi a una sezione, vedere la documentazione inclusa nel linker.

prevenzione dell'esecuzione dei dati

Come configurare la protezione della memoria in Windows XP SP2