CodeBlanks Logo Icon CodeBlanks

ASLR

ASLR ile adres alanı rastgeleleştirmeyi öğrenirsin.

ASLR nedir?

ASLR (Address Space Layout Randomization), program her çalıştığında bellek bölgelerinin konumlarını rastgeleleştirir. Kod, yığın, öbek ve kitaplıklar farklı adreslere yerleşir.

Saldırgan bir açık bulsa bile, hedef adresini önceden bilemediği için saldırı başarısız olur. Linux'ta /proc/sys/kernel/randomize_va_space ile denetlenir: 0 kapalı, 1 kısmi, 2 tam. Derleyici -fPIE seçeneğiyle programı konumdan bağımsız yapar; bu ASLR'in tam çalışması için gerekir. ASLR tek başına yeterli değildir; canary ve güvenli fonksiyonlarla birlikte kullanılır.

PIE ve ASLR etkileşimi

PIE (Position Independent Executable), program kodunun herhangi bir adrese yüklenebilmesini sağlar. PIE olmadan ASLR yalnızca yığını ve öbeği rastgeleleştirir; kod segmenti sabit kalır.

Derleyici -fPIE ile derler, bağlayıcı -pie ile bağlar. Bu ikisi birlikte çalışınca programın kendisi de rastgele adrese yerleşir. Saldırgan artık kod içindeki gadget adreslerini önceden bilemez; ROP saldırıları zorlaşır. Üretim derlemelerinde PIE varsayılan açıktır. Yine de en önemli savunma, açık yazmamak: sınır denetimi yapmayan fonksiyonlardan kaçınmak.

Uygulama Bellek bölgesi bilgisi yazdır

void print_aslr_info(const char *region, int base) fonksiyonunu tanımla; gövdesi printf("%s=%d\n", region, base); olsun. main içinde üç bölge için çağır: ("text", 4194304), ("stack", 65536), ("heap", 1048576).

Başlangıç kodu

main.c
#include <stdio.h>

// print_aslr_info fonksiyonunu tanımla
// text, stack, heap için (ad, taban) ile çağır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

void print_aslr_info(const char *region, int base) {
    printf("%s=%d\n", region, base);
}

int main(void) {
    print_aslr_info("text", 4194304);
    print_aslr_info("stack", 65536);
    print_aslr_info("heap", 1048576);
    return 0;
}

Beklenen çıktı

text=4194304
stack=65536
heap=1048576

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 ASLR durum iletisini tamamla

Soru
printf("ASLR: %s
", enabled ? "ON" : "____");
Cevap
printf("ASLR: %s
", enabled ? "ON" : "OFF");

Açıklama: ASLR kapalıysa "OFF" yazdırılır.

2 Bellek bölgelerini eşle

Kavram Anlamı
text Kod segmenti
stack Yığın
heap Öbek
library Kitaplık

3 ASLR neyi rastgeleştirir?

  • Bellek bölgesi konumlarını Doğru cevap
  • Yalnız tarih bilgisini
  • Yalnız dosya adını
  • Yalnız kullanıcı adını

Açıklama: ASLR bellek bölgelerinin adreslerini rastgeleleştirir.

Uzman bölümündeki tüm dersler