Aracılığıyla paylaş


Veri Yürütme Engelleme

Veri Yürütme Engellemesi (DEP), Windows XP ve Windows Server 2003'den başlayarak işletim sisteminde yerleşik olarak bulunan sistem düzeyinde bir bellek koruma özelliğidir. DEP, sistemin bir veya daha fazla bellek sayfasını yürütülebilir olmayan olarak işaretlemesini sağlar. Bellek bölgelerinin yürütülemez olarak işaretlenmesi, kodun bu bellek bölgesinden çalıştırılamayacağı anlamına gelir ve bu da arabellek taşmalarından yararlanmayı zorlaştırır.

DEP kodun varsayılan yığın, yığın ve bellek havuzları gibi veri sayfalarından çalıştırılmasını engeller. Bir uygulama korumalı bir veri sayfasından kod çalıştırmayı denerse, bellek erişim ihlali özel durumu oluşur ve özel durum işlenmezse çağrı işlemi sonlandırılır.

DEP, tüm sömürülere karşı kapsamlı bir savunma olmak üzere tasarlanmamıştır; uygulamanızın güvenliğini sağlamak için kullanabileceğiniz başka bir araç olması amaçlanmıştır.

Veri Yürütme Engelleme Nasıl Çalışır?

Bir uygulama korumalı bir sayfadan kod çalıştırmayı denerse, uygulama STATUS_ACCESS_VIOLATIONdurum koduyla bir özel durum alır. Uygulamanızın bir bellek sayfasından kod çalıştırması gerekiyorsa, uygun sanal bellek koruması özniteliklerini ayırması ve ayarlaması gerekir. Ayrılan bellek, bellek ayrılırken PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITEveya PAGE_EXECUTE_WRITECOPY olarak işaretlenmelidir. malloc ve HeapAlloc işlevleri çağrılarak yapılan yığın ayırmaları yürütülebilir değil.

Uygulamalar varsayılan işlem yığınından veya yığından kod çalıştıramaz.

DEP, önyükleme yapılandırma verilerinde yürütülmeyen sayfa koruma ilkesi ayarına göre sistem önyüklemesinde yapılandırılır. Uygulama, GetSystemDEPPolicy işlevini çağırarak geçerli ilke ayarını alabilir. İlke ayarına bağlı olarak, bir uygulama SetProcessDEPPolicy işlevini çağırarak geçerli işlemin DEP ayarını değiştirebilir.

Programlamayla İlgili Dikkat Edilmesi Gerekenler

Bir uygulama, uygun bellek koruma seçenekleriyle yürütülebilir bellek ayırmak için VirtualAlloc işlevini kullanabilir. Bir uygulama kümesinin en azından bellek koruma seçeneğini PAGE_EXECUTE önerilir. Yürütülebilir kod oluşturulduktan sonra, uygulamanın ayrılan belleğe yazma erişimine izin vermek için bellek korumaları ayarlaması önerilir. Uygulamalar, VirtualProtect işlevini kullanarak ayrılmış belleğe yazma erişimine izin verebilir. Yazma erişimine izin verme, işlem adres alanının yürütülebilir bölgeleri için en yüksek korumayı sağlar. Bellek kullanımına açık bellek miktarını en aza indiren, mümkün olan en küçük yürütülebilir adres alanını kullanan uygulamalar oluşturmayı denemeniz gerekir.

Ayrıca uygulamanızın sanal belleğinin düzenini denetlemeyi ve yürütülebilir bölgeler oluşturmayı denemeniz gerekir. Bu yürütülebilir bölgeler yürütülemeyen bölgelere göre daha düşük bir bellek alanında bulunmalıdır. Yürütülebilir bölgeleri yürütülemez bölgelerin altında bularak, arabellek taşmasının belleğin yürütülebilir alanına taşmasını önlemeye yardımcı olabilirsiniz.

Uygulama Uyumluluğu

Bazı uygulama işlevleri DEP ile uyumsuzdur. Dinamik kod oluşturma (YalnızcaIn-Time kod oluşturma gibi) gerçekleştiren ve oluşturulan kodu yürütme izniyle açıkça işaretlemeyen uygulamalarda, DEP kullanan bilgisayarlarda uyumluluk sorunları olabilir. Etkin Şablon Kitaplığı (ATL) sürüm 7.1 ve önceki sürümlerine yazılan uygulamalar yürütülemez olarak işaretlenmiş sayfalarda kod yürütmeyi deneyerek NX hatasını tetikleyebilir ve uygulamayı sonlandırır; Daha fazla bilgi için bkz. setProcessDEPPolicy . DEP ile uyumlu olmayan eylemler gerçekleştiren çoğu uygulamanın düzgün çalışması için güncelleştirilmiş olması gerekir.

Az sayıda yürütülebilir dosya ve kitaplık, görüntü dosyasının veri bölümünde yürütülebilir kod içerebilir. Bazı durumlarda, uygulamalar veri bölümlerine küçük kod kesimleri (genellikle thunk olarak adlandırılır) yer alabilir. Ancak DEP, görüntü dosyasının belleğe yüklenen bölümlerini yürütülebilir olmayan olarak işaretler. Bu bölümde yürütülebilir öznitelik uygulanmadığı sürece.

Bu nedenle, veri bölümlerindeki yürütülebilir kod bir kod bölümüne geçirilmelidir veya yürütülebilir kodu içeren veri bölümü açıkça yürütülebilir olarak işaretlenmelidir. yürütülebilir IMAGE_SCN_MEM_EXECUTEözniteliği, yürütülebilir kod içeren bölümler için ilgili bölüm üst bilgisinin Özellikleri alanına eklenmelidir. Bölüme öznitelik ekleme hakkında daha fazla bilgi için bağlayıcınızla birlikte verilen belgelere bakın.

Veri Yürütme Engelleme

Windows XP SP2'de Bellek Korumasını Yapılandırma