hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md

6.6 KiB
Raw Blame History

ASLR

AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

Adres Alanı Düzeni Rastgeleleştirme (ASLR), işletim sistemlerinde kullanılan bir güvenlik tekniğidir ve sistem ve uygulama süreçleri tarafından kullanılan bellek adreslerini rastgeleleştirir. Böyle yaparak, belirli süreçlerin ve verilerin konumunu, özellikle yığın, bellek havuzu ve kütüphaneleri tahmin etmeyi önemli ölçüde zorlaştırarak, belirli türde saldırıları, özellikle tampon taşmalarını hafifletir.

ASLR Durumunu Kontrol Etme

Linux sistemlerinde ASLR durumunu kontrol etmek için /proc/sys/kernel/randomize_va_space dosyasından değeri okuyabilirsiniz. Bu dosyada saklanan değer, uygulanan ASLR türünü belirler:

  • 0: Rastgeleleştirme yok. Her şey statiktir.
  • 1: Muhafazakar rastgeleleştirme. Paylaşılan kütüphaneler, yığın, mmap(), VDSO sayfası rastgeleleştirilir.
  • 2: Tam rastgeleleştirme. Muhafazakar rastgeleleştirme tarafından rastgeleleştirilen öğelerin yanı sıra brk() ile yönetilen bellek de rastgeleleştirilir.

ASLR durumunu aşağıdaki komutla kontrol edebilirsiniz:

bashCopy codecat /proc/sys/kernel/randomize_va_space

ASLR'nin Devre Dışı Bırakılması

ASLR'yi devre dışı bırakmak için /proc/sys/kernel/randomize_va_space değerini 0 olarak ayarlarsınız. ASLR'nin devre dışı bırakılması genellikle test veya hata ayıklama senaryoları dışında önerilmez. İşte nasıl devre dışı bırakılacağı:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

Ayrıca, bir yürütme için ASLR'yi devre dışı bırakabilirsiniz:

setarch `arch` -R ./bin args
setarch `uname -m` -R ./bin args

ASLR'ı Etkinleştirme

ASLR'ı etkinleştirmek için, /proc/sys/kernel/randomize_va_space dosyasına 2 değeri yazabilirsiniz. Genellikle kök izinleri gerektirir. Tam rastgeleleştirme etkinleştirme aşağıdaki komutla yapılabilir:

echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

Yeniden Başlatmalara Karşı Kalıcılık

echo komutları ile yapılan değişiklikler geçicidir ve yeniden başlatıldığında sıfırlanacaktır. Değişikliği kalıcı hale getirmek için /etc/sysctl.conf dosyasını düzenlemeniz ve aşağıdaki satırı eklemeniz veya değiştirmeniz gerekmektedir:

kernel.randomize_va_space=2 # Enable ASLR
# or
kernel.randomize_va_space=0 # Disable ASLR

/etc/sysctl.conf dosyasını düzenledikten sonra değişiklikleri uygulamak için:

sudo sysctl -p

Bu, ASLR ayarlarınızın yeniden başlatmalar arasında kalmasını sağlayacaktır.

32 bit ASLR'yi Atlatma

32 bit kaba kuvvet saldırısı

PaX işlem adres alanını 3 gruba böler:

  • Kod ve veri (başlatılmış ve başlatılmamış): .text, .data ve .bss —> delta_exec değişkeninde 16 bit rastgele entropi. Bu değişken her işlemle rastgele başlatılır ve başlangıç adreslerine eklenir.
  • mmap() tarafından tahsis edilen bellek ve paylaşılan kütüphaneler —> delta_mmap adında 16 bit.
  • Yığın —> delta_stack olarak 24 bit. Ancak, etkili olarak 11 bit kullanır (10. ile 20. bayt arasında dahil), 16 bayt'a hizalanmıştır —> Bu, 524,288 olası gerçek yığın adresine yol açar.

Önceki veriler 32 bit sistemler içindir ve azaltılmış son entropi, saldırı tamamlanana kadar işlemi tekrar tekrar deneyerek ASLR'yi atlamayı mümkün kılar.

Kaba kuvvet fikirleri:

  • Saldırı yerel ise, libc'nin taban adresini kaba kuvvetle deneyebilirsiniz (32 bit sistemler için faydalıdır):
for off in range(0xb7000000, 0xb8000000, 0x1000):
  • Uzak bir sunucuyu hedef alıyorsanız, usleep libc fonksiyonunun adresini 10 (örneğin) olarak argüman geçerek burte-force yöntemiyle deneyebilirsiniz. Eğer sunucu cevap vermek için 10 saniye daha fazla zaman alıyorsa, bu fonksiyonun adresini buldunuz demektir.

{% hint style="success" %} 64 bit sistemlerde entropi çok daha yüksektir ve bu mümkün değildir. {% endhint %}

Ret2ret

Yığın içindeki adresleri istismar ederek ASLR'yi atlamayı deneyin:

{% content-ref url="../stack-overflow/ret2ret.md" %} ret2ret.md {% endcontent-ref %}

AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'i desteklemenin diğer yolları: