Protezione esecuzione programmi

Prevenzione esecuzione dati (DEP) è una funzionalità di protezione della memoria a livello di sistema incorporata 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 eseguibile. 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 degli overrun del buffer.

DEP impedisce l'esecuzione del codice da pagine di dati, ad esempio l'heap, gli stack e i pool di memoria predefiniti. Se un'applicazione tenta di eseguire codice da una pagina dati protetta, si verifica un'eccezione di violazione di 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; è destinato a 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 gli attributi di protezione della memoria virtuale appropriati. La memoria allocata deve essere contrassegnata PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITEo PAGE_EXECUTE_WRITECOPY durante l'allocazione della memoria. Le allocazioni heap effettuate chiamando le funzioni malloc e HeapAlloc non sono 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 dell'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 che un set di applicazioni, almeno, l'opzione di protezione della memoria PAGE_EXECUTE . Dopo aver generato il codice eseguibile, è consigliabile impostare le protezioni di memoria dell'applicazione per consentire l'accesso in scrittura alla memoria allocata. Le applicazioni possono impedire l'accesso in scrittura alla memoria allocata usando la funzione VirtualProtect . L'accesso in scrittura non consentito garantisce la protezione massima 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 necessario 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 aree eseguibili sotto aree non eseguibili, è possibile impedire che un overflow del buffer venga sovraflow 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 la generazione di codice JUST-In-Time) e non contrassegnano in modo esplicito il codice generato con l'autorizzazione di esecuzione potrebbero avere problemi di compatibilità nei computer che usano DEP. Le applicazioni scritte in Active Template Library (ATL) versione 7.1 e versioni 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 correttamente 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 definiti thunks) nelle sezioni dei dati. Tuttavia, dep contrassegna le sezioni del file di immagine caricato in memoria come non eseguibile a meno che la sezione non abbia l'attributo eseguibile applicato.

Pertanto, il codice eseguibile nelle sezioni dati deve essere migrato in una sezione di codice o nella sezione dati che contiene il codice eseguibile deve essere contrassegnato 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 (TechNet)

Come configurare la protezione della memoria