Uygulamaların Kullandığı Bellekle İlgili Koruma Yöntemleri: DEP ve ASLR

 

Windows’un belleği nasıl kullandığına bir göz atalım:

 

metin, diyagram, ekran görüntüsü, çizgi içeren bir resim

Yapay zeka tarafından oluşturulan içerik yanlış olabilir.

Şekil: Windows yüklü bilgisayarda tipik bir bellek düzeni

 

Bildiğiniz gibi, bilgiler kalıcı olarak sabit disklerde saklanır (klasik diskler ya da SSD diskler). Ama RAM bellek sabit diskten yaklaşık bin kat daha hızlı olduğu için işletim sisteminin kendisi ve kullanıcının çalıştırdığı uygulamalar sabit diskten alınıp hemen RAM belleğe taşınır.

Yukarıdaki şekilde belleğin bir kısmının işletim sistemine ayrıldığı görülüyor (normalde işletim sistemine ayrılan kısım şekilde gösterilenden çok daha küçüktür). İşletim sistemine ayrılmış kısımlarda da sistemin çeşitli ögeleri bulunur; çekirdek, aygıt sürücüleri, alt sistemler ve işletim sisteminin verileri (RAM’e ilişkin tablolar, çalışan programlara ilişkin bilgiler vb) gibi. Kullanıcının çalıştırdığı uygulamalar da bellekte, işletim sisteminden ayrı yerlerde tutulur.

Şekilde bir de kötü amaçlı yazılım var. Kötü amaçlı yazılım aynen Word ya da Excel gibi uygulamalara ayrılmış bölümde tutuluyor. Bu bölümde yapılabilecekler sınırlı: İşletim sistemi kullanıcının çalıştırdığı programları ve ilgili işletim sistemi ögelerini kısıtlar, onların yapabileceklerini sınırlar. Kötü amaçlı yazılımın da normalde eli böğründe kalır. Ama o yazılımı üretenlerin alet çantasında deneyebilecekleri çok şey bulunur. Bu araçların amaçlarından birisi kendilerini RAM’de işletim sisteminin ayrıcalıklı bölümlerine atmak, içerdikleri kodu bu bölümlerden çalıştırmaktır. Kendilerini attıkları bölüm işletim sisteminin kod içeren değil de veri içeren bölümü de olabilir, yeter ki bir kez o bölüme girsinler.

Kötü yazılımların bu amaçla deneyebileceği bir şey tampon taşırmadır (buffer overflow). Bu mekanizma kabaca şöyle çalışır: Bir uygulamanın kullanıcıdan beklediği bir girdi (input) olduğunda istenilenden fazla bilgi girilir. Örneğin, 11 rakamlık TC kimlik numarasının sorulduğu alana 100 rakam girildiğini düşünün. Bu girişle karşılaşan uygulama ne yapar? Eğer uygulama güvenlik ilkelerine uygun yazılmışsa TC kimlik numarasına kısmına yalnızca on bir rakam girilmesine izin verir. Bu durumda kötü bir şey yaşanmaz. Ama yazılım girilen verinin miktarını denetlemiyorsa o zaman fazladan girilen veri taşar (overflow) ve belleğin bir yerine yazılır. Fazladan bilgi belleğin neresine yazılır? Eğer her şey ayarlanırsa belleğin duyarlı kısımlarına (işletim sisteminin bilgilerinin bulunduğu kısma) yazılır. Yazılan şey de veri görünümlü küçük bir uygulama ise kötü niyetliler amaçlarına ulaşmış olur. TC kimlik numarasına 11 rakam yerine 100 rakam girilince, 89 rakamla ne elde edilebilir diye düşünebilirsiniz. O 89 rakam asıl kötü niyetli yazılımları belleğe kopyalamaya yarayan bir kod parçası olabilir. RAM söz konusu olduğunda Gigabayt’ları konuşuyoruz ama birkaç yüz bayt’lık kod nerede çalıştığına bağlı olarak büyük işler yapabilir. 1980’li yıllarda yaygın olan “boot sector” virüslerinin en çok 512 bayt büyüklüğünde olduğunu anımsayalım.

Tampon taşımına karşı ilk önlem programları daha iyi yazıp taşımı engellemektir. Ama yazılımcıların ne yaptığını bilemediğimiz için bu alanı belirlemek elimizde olmayabilir. Bellek taşımının saptanmasından onca yıl sonra bile bu sorunla karşılaşabiliyoruz.

O zaman işletim sisteminin bu durumu kabullenip önlem alması gerekir.

Önlemlerden ilki DEP (Data Execution Prevention) oldu. Bu mekanizma işlemci tarafından donanımda, işletim sistemi tarafından da yazılımda gerçekleştiriliyor. DEP mekanizması RAM’i kod ve veri bölümleri olarak işaretliyor ve veri alanı olarak işaretlenen bölümlerde kod çalıştırılmasını engelliyor. DEP’i uyguladığımızda bellek taşımıyla bir veri alanına yerleşen kod çalışmak istese de çalışamıyor. Microsoft XP işletim sisteminden başlayarak DEP mekanizmasını işletim sistemine yerleştirdi. Diğer işletim sistemlerinde de DEP desteği var. Her şey güzel, bellek taşımı tehlikesini engelliyoruz.

İstemci işletim sistemlerinde (Windows 10-11) DEP otomatik olarak etkindir. DEP’e ilişkin ayarları Sistem özellikleri, Gelişmiş sekmesinde Performans düğmesini tıklayıp oradan da veri Yürütme Engellemesi (DEP) sekmesinden görülebilir.

metin, ekran görüntüsü, yazılım, sayı, numara içeren bir resim

Yapay zeka tarafından oluşturulan içerik yanlış olabilir.

Şekil: Windows 10’da DEP ayarları

 

DEP’de ilişkin hazırgelen ayarlar “Sadece önemli Windows programları ve hizmetleri için DEP’yi aç” şeklinde. Böyle kalmasında da yarar var.

 

DEP komut satırından bcdedit komutuyla da yönetilebilir. Aşağıdaki komut DEP’yi tüm programlar için etkinleştirmeye yarar (yükseltilmiş komut satırı açmanızı gerektirir):

 

bcdedit.exe /set {current} nx AlwaysOn

 

Her şey güzel hoşken DEP’in aşılabileceği görüldü. Return-Oriented Programming (ROP) denilen bir mekanizmayla küçük küçük programlar yaratılıyor ve bu programlar zincir şeklinde birbiri ardına çalıştırılıyor. İlk program ya da programlar başarısız olurken (çalışmazken) ardından gelenler çalışma fırsatı buluyor. Hacker’lara şapka çıkarılacak zamanlardan birisi.

ROP örneğinde olduğu gibi DEP’in işe yaramadığı durumlara karşı ne yapabiliriz?

DEP’in aşılabilmesini sağlayan şey işletim sisteminin öğelerinin bellekte yüklendikleri adreslerin sabit oluşu. Belleği inceleyen hacker’lar bir sürücünün hep belli bir adrese, bir tablonun başka bir belli adrese yüklendiğini biliyorlar ve ona göre saldırı düzenliyorlar.

Buna bakılarak yapılacak şey özellikle işletim sisteminin uygulama dosyalarının (exe ve DLL dosyaları) ve tablolarının belli adreslere değil rastgele adreslere yerleşmesini sağlamak. ASLR (Address Space Layout Randomization) tam da bunu yapıyor.

ASLR sayesinde sistem başlarken küçük bir kod çalışıyor ve sistemin o başlamasına özgü şekilde, kullanılacak rastgele adresleri belirliyor. Sonra, işletim sisteminin uygulamaları ve veri tabloları bu rastgele adreslere yerleştiriliyor. Bu aşamadan sonra DEP’i aşan bir kötü niyetli yazılım büyük olasılıkla kendisini ayrıcalıklı bir bellek bölümünde bulmayacak. Hacker’lar binbir çabayla hangi ögenin şu anda nerede olduğunu öğrenirse bu bilgileri ancak bir sonraki kapanış-açılışa kadar geçerli olacak. Bu durum bilgisayarları ara ara yeniden başlatma için iyi bir neden olabilir.

ASLR ayarları Windows Güvenliği’ndeExploit protection” bölümünde görülebilir.

metin, ekran görüntüsü, yazı tipi, sayı, numara içeren bir resim

Yapay zeka tarafından oluşturulan içerik yanlış olabilir.

Şekil: ASLR ayarları

 

Buradaki hazırgelen ayarlar yeterlidir ve değiştirmeye gerek yoktur.

DEP aşılabiliyordu, peki ASLR de aşılabiliyor mu? ASLR’nin de aşılabileceğini gösteren çalışmalar var. ASLR ile uygulamaların rastgele yerleştiği yerlerin sayısı sınırlı ve azimle bu adresleri araştıran bir hacker’ın ASLR’yi aşması mümkün. Pratik olarak da bunun yapılabildiği gösterilmiş durumda ama halen çok pratik bir iş değil bu. Bu yüzden kullanmayı sürdürmek gerekli.  

Not: Kurumunuzdaki bilgisayarlarda DEP ve ASLR ayarlarının ne olduğuna ara bakmanızda yarar vardır. DEP ve ASLR küçük bir olasılıkla da çalışmakta olan programları etkileyip hata üretebilir ve geçmişte bu yüzden devre dışı bırakılmış olabilir. DEP ve ASLR’nin devre dışı olduğunu görürseniz onları devreye alıp söz konusu uygulamalar için istisna tanımlayabilirsiniz.