Donanım tarafından zorlanan DEP
Birkaç küçük fark dışında, Windows'un veri yürütme engellemesi davranışı 32-bit ve 64-bit Windows sürümlerinde aynıdır. Uygulama ve sürücü geliştiriciler için tutarlılık sağlamak amacıyla, bellek koruması modeli (DEP dahil), 32-bit ve 64-bit Windows sürümlerinde aynı olacak biçimde tasarlanmıştır.
Uygulama geliştiriciler kullanıcı modundaki DEP davranışını bilmelidir. Bir kullanıcı modu DEP özel durumu, Windows sistemlerinde STATUS_ACCESS_VIOLATION (0xc0000005) hatasına neden olur. EXCEPTION_RECORD yapısında bulunan ExceptionInformation öğesinin ilk parametresi, oluşan erişim ihlali türünü içerir. ExceptionInformation[0] için 8 değeri erişim ihlalinin bir yürütme ihlali olduğunu gösterir.
Çoğu işlemde, STATUS_ACCESS_VIOLATION özel durumu bir işlenmeyen özel durum olacak ve işlemin sonlandırılmasına neden olacaktır.
DEP, çekirdek modundaki sürücülere de uygulanır. Çekirdek modundaki bellek bölgeleri için DEP isteğe bağlı olarak etkinleştirilemez ve devre dışı bırakılamaz. 32-bit Windows sürümlerinde, DEP varsayılan olarak yığına uygulanır. Bu, yığına, sayfalama havuzuna ve oturum havuzuna veri yürütme engellemesi uygulanan 64-bit Windows sürümlerindeki çekirdek modu DEP'den farklıdır.
DEP etkinleştirildiğinde, aygıt sürücülerinin yığından kod yürütmesine izin verilmez. Çekirdek modunda DEP erişim ihlali, şu hata denetimine neden olur: 0xFC: ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY
Yazılım tarafından zorlanan DEP
Yazılım tarafından zorlanan DEP, Windows'un özel durum işleme mekanizmalarında ek denetimler gerçekleştirir. Programın yansıma dosyaları Güvenli Yapılandırılmış Özel Durum İşleme (SafeSEH) ile oluşturulmuşsa, yazılım tarafından zorlanan DEP, bir özel durum bildirilmeden önce özel durum işleyicisinin yanısma dosyası içinde bulunan işlev tablosuna kaydedilmesini sağlar.
Programın yansıma dosyaları SafeSEH ile oluşturulmamışsa, yazılım tarafından zorlanan DEP, bir özel durum bildirilmeden önce özel durum işleyicisinin yürütülebilir olarak işaretlenmiş bir bellek bölgesinde bulunmasını sağlar.
Bu değişiklik neden önemli? Hangi tehditlerin azaltılmasına yardımcı oluyor?
Veri yürütme engellemesinin birincil faydası, varsayılan öbek gibi veri sayfalarından, çeşitli yığınlardan ve bellek havuzlarından kod yürütülmesinin engellenmesine yardımcı olmasıdır. Sistemin normal işlemlerinde, varsayılan öbekten veya yığından kod yürütülmez. Donanım tarafından zorlanan DEP, bu konumlardan çalıştırılan kodu algılar ve yürütme gerçekleştiğinde bir özel durum oluşturur. Özel durum işlenmezse, işlem sonlandırılır. Çekirdek modunda korumalı bellekten kod yürütülmesi bir hata denetimine neden olur.
İşlemin sonlandırılması veya sistemin bir hata denetimiyle başarısız olmasına neden olunması en uygun deneyim gibi görünmemesine karşın, bu yolla kötü niyetli kodun yürütülmesi engellenebilir. Kötü niyetli kodun sistemde yürütülmesinin engellenmesi, sisteminize zarar gelmesini veya kötü niyetli kodun dağıtılarak hata denetimiyle sonlandırılan bir işlemden daha zararlı sonuçlara neden olmasını engelleyebilir.
DEP, bir güvenlik açığı sınıfının etkilerini azaltabilir. Özellikle de, bir virüs veya başka bir saldırı tarafından ek kod içeren bir işlem yerleştirilip bu eklenen kod yürütülmeye çalışılarak gerçekleştirilen saldırılar veri yürütme engellemesi sayesinde engellenebilir. DEP kullanılan bir sistemde, eklenen kodun yürütülmesi özel duruma neden olacaktır. Yazılım tarafından zorlanan DEP, Windows'taki özel durum işleme mekanizmalarından yararlanılarak gerçekleştirilen saldırıları azaltabilir.
DEP'nin yan faydası da uygulama ve sürücü geliştiriciler için iyi mühendislik ve en iyi uygulamalarla ilişkilidir. Veri yürütme engellemesi, veri sayfaları açıkça yürütülebilir olarak işaretlemedikçe geliştiricileri bu sayfalardan kod yürütmekten kaçınmaya zorlar.
Farklı çalışan nedir?
Uygulama Uyumluluğu
Bazı uygulama davranışlarının veri yürütme engellemesiyle uyumsuz olması beklenmektedir. Dinamik kod oluşturma gerçekleştiren (Tam Zamanında kod oluşturma gibi) ve oluşturulan kodu Yürütme izniyle işaretlemeyen uygulamalarda veri yürütme engellemesi özelliğiyle uyumluluk sorunları olabilir. SafeSEH ile oluşturulmamış olan uygulamaların özel durum işleyicileri yürütülebilir bellek bölümlerinde bulunmalıdır.
DEP'yi ihlal etme girişiminde bulunan uygulamalar STATUS_ACCESS_VIOLATION (0xC0000005) durum koduyla bir özel durum alır. Uygulama için yürütülebilir bellek gerekiyorsa, Sanal* bellek ayırma işlevlerinin bellek koruması değişkeninde PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE veya PAGE_EXECUTE_WRITECOPY belirterek bu özniteliği uygun bellekte ayarlamalıdır. malloc() ve HeapAlloc() işlevleri kullanılarak ayrılan bellek öbekleri yürütülebilir değildir.
Sürücü Uyumluluğu
Veri yürütme engellemesiyle ilişkili sürücü uyumluluğu sorunları genelde PAE moduna indirgenen uyumluluk sorunlarıdır.
Not PAE, yalnızca donanım tarafından zorlanan DEP'yi destekleyen işlemci bulunan sistemlerde gerekir.
DEP, kod oluşturan veya gerçek zamanlı yürütülebilir kod oluşturmak için başka teknikler kullanan sürücülerle uyumluluk sorunlarına neden olabilir. Bu davranışa sahip olan birçok sürücünün düzeltilmiş olması gerekse de (çünkü 64-bit Windows sürümlerinde yüklenen sürücüler için DEP “her zaman açıktır”), tüm sürücülerin güncelleştirilmiş olduğunun garantisi yoktur. Ancak, bu teknikleri kullanan az sayıda sürücü vardır ve DEP'nin kendi başına çok fazla sürücü uyumluluğu sorununa neden olması beklenmemektedir.
Temel sürücü uyumluluğu sorunu, 32-bit sistemlerde Fiziksel Adres Uzantısı (PAE) modunun çalıştırılmasıdır. PAE modu, işlemcilerin 4 gigabayttan (GB) fazla belleği adreslemesini sağlar. PAE bellek sayfalama ve PAE olmayan bellek sayfalama düzenleri arasındaki temek fark, PAE modunda ek sayfalama düzeyidir gerekmesidir (2 yerine 3 düzey).
PAE etkinleştirilmişse bazı sürücüler yüklenemeyebilir, çünkü aygıt 64-bit adresleme yapamayabilir veya sürücüler PAE modunun 4 GB'den fazla RAM gerektirdiğini varsayabilir. Bu tür sürücüler, PAE modundayken her zaman 64-bit adresler almayı beklerler ve kendileri (veya aygıtları) adresi yorumlayamaz.
Diğer sürücüler, PAE modunda yüklenebilir ancak sistem sayfa tablosu girdilerini (PTE) doğrudan değiştirerek sistemin kararsız hale gelmesine neden olabilir. Bu sürücüler 32-bit PTE'ler bekler, ancak bunun yerine PAE modunda 64-bit PTE'ler alır.
En büyük sürücü PAE uyumluluğu sorunu, doğrudan bellek erişimi (DMA) aktarımları ve eşleşme kayıt ayırması ile ilgilidir. DMA'yı destekleyen çoğu aygıt, genellikle de 32-bit bağdaştırıcılar, 64-bit fiziksel adresleme gerçekleştiremez. 32-bit modda çalıştırıldığında, aygıt tüm fiziksel adres alanını adresleyebilir. PAE modunda, verilerin 4 GB'den daha büyük bir fiziksel adreste bulunması olasıdır. Bu kısıtlamaları bulunan aygıtların bu senaryoda düzgün çalışabilmesi için, Windows 2000 Server ailesi ve sonraki sürümleri bir eşleşme kaydı ile gösterilen bir 32-bit adres sağlamak yoluyla DMA işleminde çift arabellekleme sağlanır. Aygıt, 32-bit adrese DMA işlemi gerçekleştirebilir ve çekirdek de sürücüye sağlanan 64-bit adrese belleği kopyalar.
Sistem PAE devre dışı bırakılmış olarak çalıştırıldığında, 32-bit aygıtların sürücüleri eşleşme kayıtlarının asıl bellek tarafından desteklenmesini hiçbir zaman gerektirmez. Bu, çift arabelleklemenin gerekli olmadığı anlamına gelir; çünkü tüm aygıt ve sürücüler 32-bit adres alanı içinde bulunur. 64-bit işlemci tabanlı bilgisayarlarda 32-bit aygıtlar için yapılan sürücü sınamalarının sonuçlarına göre, istemci tarafından sınanan ve DMA becerisi bulunan sürücülerin sınırsız eşleşme kaydı beklediği söylenebilir.
Uyumluluk sorunlarını sınırlamak amacıyla, Windows XP Service Pack 2'de 32-bit donanım özet düzeyi (HAL) DMA davranışını taklit eden HAL değişiklikleri bulunmaktadır. Değiştirilen HAL, sistem PAE modunda çalışırken sınırsız eşleşme kaydı sağlar. Ayrıca, çekirdek bellek yöneticisi 4 GB'nin üzerindeki tüm fiziksel adresleri yok sayar. 4 GB sınırının yukarısında olan tüm sistem RAM'leri, Windows tarafından adreslenemez ve sistemde kullanılamaz. Adres alanı 4 GB ile sınırlandığında, 32-bit DMA veri yolu yöneticisi becerisi bulunan aygıtlar 4 GB sınırının üstündeki bir adreste herhangi bir işlemi göremez. Bu değişiklikler işlemleri çift arabellekleme gereksinimini ortadan kaldırdığı için, bazı sürücülerde çift arabellekleme desteğinin düzgün uygulanmasıyla ilgili bir hata sınıfını da ortadan kaldırır.
HAL ve bellek yöneticisindeki bu değişikliklerin sonucu olarak, Windows XP Service Pack 2 çalıştıran ve veri yürütme engellemesi etkinleştirilmiş olan sistemlerde aygıt sürücüsü uyumluluğuna etkisinin en alt düzeyde olması beklenmektedir.
Sistem Uyumluluğu
Son bir DEP uyumluluğu sorunu, 4 GB'den fazla fiziksel RAM için tasarlanmamış olsalar bile PAE modunun etkinleştirilmiş olduğu sistemler nedeniyle ortaya çıkar. Microsoft, donanım tarafından zorlanan DEP desteği bulunan işlemcilerin çalıştırıldığı bazı sistemleri sınarken bu sistemlerin önyüklenemediğini veya işlemci PAE modunda çalışırken başka kararlılık sorunları bulunduğunu belirlemiştir.
PAE modu, NX işlemci özelliğinin kullanılabilmesi için gereklidir. Bu nedenle, sistem tasarımcıları ve bellenim yazılımı (firmware) mühendisleri, sistemin yonga kümesi ve bellenim yazılımı 4 GB'den fazla fiziksel RAM'i destekleyecek biçimde tasarlanmamış olsa bile sistemin PAE modunda çalışabileceğini bilmelidir.
İşletim sistemi tarafından yürütülen yönergeleri belirlemek amacıyla sayfa tablosu girdilerini yorumlayan sistem bellenim yazılımlarına özellikle dikkat edilmelidir. İşlemci PAE modunda çalışırken sayfa tablosu girdileri 64 bit uzunluğa genişletilir. Sistem tasarımcılarının ve bellenim yazılımı geliştiricilerin, işletim sistemi tarafından yürütülen yönergeleri güvenilir biçimde belirleme konusunda daha fazla bilgi için işlemci ve yonga kümesi satıcılarına başvurmaları önerilir.
AMD işlemcilerle çalışan sistem tasarımcıları, daha fazla bilgiyi “AMD Athlon™ 64 ve AMD Opteron İşlemciler için BIOS ve Çekirdek Geliştiricinin Kılavuzu” adlı teknik incelemede bulabilir. Bu teknik incelemeyi edinmek için, http://go.microsoft.com/fwlink/?LinkId=28165 adresindeki AMD Athlon™ 64 Web sitesine gidin ve “BIOS and Kernel Developer’s Guide for AMD Athlon™ 64 and AMD Opteron Processors” öğesini tıklatın.
Intel, genel kullanım amacıyla Sistem Yönetimi Modu (SMM) hakkında ayrıntılı bilgi sağlamamaktadır. Intel işlemcilerle çalışan sistem tasarımcılarının daha fazla bilgi için doğrudan Intel ile bağlantı kurması önerilir.
PAE modu için Windows desteği ile ilgili daha fazla bilgi için, Microsoft Web sitesinde, http://go.microsoft.com/fwlink/?LinkId=28166 adresindeki “Fiziksel Adres Uzantısı - PAE Belleği ve Windows” adlı teknik incelemeye bakın.
Bu sorunları nasıl gideririm?
Belleğin yürütülebilir bölümlerini kullanması gereken uygulamalar, bellek ayırırken PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE veya PAGE_EXECUTE_WRITECOPY özniteliklerini kullanmalıdır. Ayrıca, uygulamalar varsayılan işlem öbeğinden veya yığından yürütülemez. DEP ile uyumlu olmayan eylemler gerçekleştiren çoğu uygulamanın uyumlu hale getirilmesi için güncelleştirilmesi gerekir. Ayrıca, uygulamalar SafeSEH ile geliştirilmeli veya özel durum işleyicilerinin açıkça yürütülebilir olarak işaretlenmiş olan bellek bölümünde bulunması sağlanmalıdır.
Bir uygulama, VirtualAlloc() uygulama programlama arabirimini (API) kullanarak, yürütülebilir belleği uygun bellek koruması seçenekleriyle ayırabilir. En azından, PAGE_EXECUTE bellek koruma seçeneği kullanılmalıdır. Yürütülebilir kod oluşturulduktan sonra, uygulamanın ayrılan belleğe yazma erişimine izin vermemek amacıyla bellek korumalarını ayarlaması önerilir. Uygulamalar, VirtualProtect() API'sini kullanarak ayrılan belleğe yazma erişimi iznini engelleyebilir. Yazma erişimine izin vermemek, işlem adres alanının yürütülebilir bölümlerinde en üst düzeyde koruma sağlar.
Kötü niyetli bir işlem yürütülebilir bir bölgeye kod eklemeye çalışırsa, erişim bir STATUS_ACCESS_VIOLATION yazma özel durumuna neden olacaktır. Uygulama, adres alanının yürütülebilir bölümlerini olabildiğince küçük tutmaya çalışmalıdır. Böylece, yürütülebilir belleği işlem adres alanına ekleyip yürütmek için kullanılabilecek daha küçük bir saldırı yüzeyi oluşur.
Ayrıca, karmaşık uygulamalar sanal belleklerinin yerleşimini denetleyebilir ve yürütülebilir bölgeler oluşturabilir. Bu uygulamalar, yürütülebilir bölgeleri yürütülebilir olmayan bölgelere göre daha aşağıda bir bellek alanında bulundurmaya çalışmalıdır. Yürütülebilir bölgeleri yürütülebilir olmayan bölgelerin altında bulundurmanın amacı, bir arabellek taşmasının yürütülebilir belleğe taşmasını engellemektir.
Az sayıda yürütülebilir dosya ve kitaplık, yansıma dosyasının bir veri bölümünde yürütülebilir kod içerebilir. Bazı durumlarda, uygulamalar veri bölümlerine küçük kod parçaları (genellikle kod parçacıkları adı verilir) yerleştirebilir. Ancak Veri Yürütme Engellemesi, yansıma dosyasının belleğe yüklenen bölümlerini, bölüme yürütülebilir özniteliği uygulanmamışsa yürütülebilir olmayan olarak işaretler.
Bu nedenle, veri bölümlerindeki yürütülebilir kod bir kod bölümüne geçirilmeli veya yürütülebilir kodu içeren veri bölümü yürütülebilir olarak işaretlenmelidir. Yürütülebilir öznitelik olan IMAGE_SCN_MEM_EXECUTE (0x20000000), yürütülebilir kodu içeren bölümlerin bölüm üstbilgisindeki Characteristics alanına eklenmelidir.
Microsoft Visual Studio ürünleriyle dağıtılan Microsoft bağlayıcısı, /SECTION bağlayıcı seçeneğini kullanılarak bir bölüme yürütülebilir özniteliği ekleyebilir. /SECTION bağlayıcı seçeneğin biçimi aşağıdaki gibidir:
/SECTION:Ad,[E][R][W][S][D][K][L][P][X][,ALIGN=#]
E değeri, yürütülebilir özniteliğini (0x20000000) belirtir. /SECTION ve diğer Microsoft bağlayıcı seçenekleri hakkında daha fazla bilgiyi MSDN Web sitesinde, http://go.microsoft.com/fwlink/?LinkId=28167 adresinde bulabilirsiniz.
Ayrıca, varolan bir resmin bölüm özniteliklerini değiştirmek için Microsoft COFF İkili Dosya Düzenleyicisi (Editbin.exe) yardımcı programı kullanılabilir. Editbin yardımcı programının /SECTION seçeneğinin biçimi aşağıdaki gibidir:
/SECTION:Ad[=newname][,[[!]{CDEIKOMPRSUW}][A{1248PTSX}]]
E ve C değerleri, sırasıyla kod ve yürütülebilir özniteliklerini belirtir. Editbin yardımcı programı ve /SECTION seçeneği hakkında daha fazla bilgi için, MSDN Web sitesinde http://go.microsoft.com/fwlink/?LinkId=28168 adresine bakın.
Microsoft .NET Framework v1.0 ve v1.1 sürümlerinin, Windows XP SP2'de DEP'den yararlanacak biçimde güncelleştirilmesi planlanmaktadır. Microsoft .NET Framework'e bağımlı uygulamalar normal biçimde çalışmaya devam edecek, ancak etkinleştirilmişse DEP'den yararlanamayacaktır.
Microsoft .NET Framework'ü yeniden dağıtan uygulama geliştiricilerin, kullanılabilir olduğunda DEP'den yararlanan Microsoft .NET Framework v1.0 Service Pack 3 veya v1.1 Service Pack 1 sürümüne yükseltmeleri önerilir.
Windows XP Service Pack 2'de hangi ayarlar eklendi veya değiştirildi?
DEP'nin Sistem Genelinde Yapılandırılması
Sistemin veri yürütme engellemesi yapılandırması Boot.ini anahtarlarıyla denetlenir. Ayrıca, son kullanıcıların sistemde yönetici olarak oturum açtıklarında DEP ayarlarını kolayca yapılandırabilmeleri için, Denetim Masası'nda yer alan Sistem öğesinde değişiklikler yapılmıştır.
Windows, donanım ve yazılım tarafından zorlanan DEP için dört sistem genelinde yapılandırmayı destekler.
Donanım tarafından zorlanan DEP ile yazılım tarafından zorlanan DEP aynı şekilde yapılandırılır. Sistem genelindeki DEP ilkesi OptIn olarak ayarlanmışsa, donanım ve yazılım tarafından zorlanan DEP, aynı Windows çekirdek ikili dosyalarını ve uygulamalarını koruyacaktır. Sistemin donanım tarafından zorlanan DEP becerisi yoksa, Windows çekirdek ikili dosyaları ve uygulamaları yalnızca yazılım tarafından zorlanan DEP ile korunur.
Benzer şekilde, sistem genelindeki DEP ilkesi OptOut olarak ayarlanmışsa, DEP korumasından çıkarılan uygulamalar, hem yazılım hem de donanım tarafından zorlanan DEP dışında bırakılır.
Dört sistem genelinde DEP yapılandırması boot.ini anahtarlarıyla denetlenir. Boot.ini ayarları şunlardır:
/noexecute=ilke_düzeyi
Burada ilke_düzeyi olarak AlwaysOn, AlwaysOff, OptIn veya OptOut tanımlanır.
Boot.ini dosyasındaki var olan /noexecute ayarları, Windows XP SP2 yüklendiğinde veya Windows işletim sistemi görüntüsü donanım tarafından zorlanan DEP desteği olan veya olmayan bilgisayarlar arasında taşındığında değiştirilmez.
Windows XP SP2 kurulumu sırasında, katılımsız yüklemede farklı bir ilke düzeyi belirtilmemişse varsayılan olarak OptIn ilke düzeyi etkinleştirilir. DEP'yi destekleyen bir Windows sürümü için, önyükleme girdisinde /noexecute=ilke_düzeyi ayarı yoksa, /noexecute=OptIn seçeneğini içeriyormuş gibi davranılır.
Yönetici olarak oturum açan son kullanıcılar, Sistem Özellikleri iletişim kutusundaki Veri Yürütme Engellemesi sekmesini kullanarak DEP'yi OptIn ve OptOut ilkelerinden biri olarak yapılandırabilir. Aşağıdaki yordam, bilgisayarda DEP'nin nasıl el ile yapılandırılacağını anlatmaktadır:
1.
Başlat'ı ve Denetim Masası'nı tıklatın, sonra da Sistem’i çift tıklatın.
2.
Gelişmiş sekmesini tıklatın. Ardından, Performans altında Ayarlar'ı tıklatın.
3.
Veri Yürütme Engellemesi sekmesini tıklatın.
4.
OptIn ilkesini seçmek için, Sadece önemli Windows program ve hizmetleri için DEP'yi aç seçeneğini tıklatın.
5.
OptOut ilkesini seçmek için, Seçtiklerim dışındaki tüm program ve hizmetler için DEP'yi aç seçeneğini tıklatın.
6.
OptOut ilkesini seçtiyseniz, Ekle'yi tıklatın ve DEP kullanmasını istemediğiniz uygulamaları ekleyin.
BT uzmanları, sistem genelindeki DEP yapılandırmasını birkaç yöntemle denetleyebilir. Boot.ini dosyası, doğrudan komut dosyası mekanizmalarıyla veya Windows XP SP2'de bulunan Bootcfg.exe aracıyla değiştirilebilir.
Windows XP SP2'nin katılımsız yüklemelerinde, Unattend.txt dosyasını kullanarak belirli bir DEP yapılandırmasını önceden belirleyebilirsiniz. Unattend.txt dosyasının [Data] bölümündeki OSLoadOptionsVar girdisini kullanarak, sistem genelinde bir DEP yapılandırması belirleyebilirsiniz.
Uygulamaya Özel DEP Yapılandırması
DEP ilke düzeyi OptOut olarak ayarlandığında, uygulama uyumluluğu amacıyla bağımsız 32-bit uygulamalar için DEP isteğe bağlı olarak devre dışı bırakılabilir.
Son kullanıcılar, Sistem Özellikleri iletişim kutusunun Veri Yürütme Engellemesi sekmesini kullanarak DEP'yi belirli bir uygulama için devre dışı bırakabilir.
BT uzmanları için, DisableNX adlı yeni bir uygulama uyumluluğu düzeltmesi Windows XP Service Pack 2'de bulunmaktadır. DisableNX uyumluluk düzeltmesi, uygulandığı program için veri yürütme engellemesini devre dışı bırakır.