Uygulamaların
Kullandığı Bellekle İlgili Koruma Yöntemleri: DEP ve ASLR
Windows’un belleği nasıl kullandığına bir
göz atalım:
Ş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.
Ş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’nde
“Exploit protection”
bölümünde görülebilir.
Ş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.