Relro
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
RELRO, Yeniden Yerleştirme Sadece Okuma anlamına gelir ve GOT (Küresel Ofset Tablosu) yazmalarına ilişkin riskleri azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. İki tür RELRO koruması vardır: (1) Kısmi RELRO ve (2) Tam RELRO. Her ikisi de ELF dosyalarındaki GOT ve BSS'yi yeniden sıralar, ancak farklı sonuçlar ve etkilerle. Özellikle, GOT bölümünü BSS'den önce yerleştirir. Yani, GOT, BSS'den daha düşük adreslerde bulunur, bu nedenle BSS'deki değişkenleri taşırarak GOT girişlerini yazmak imkansız hale gelir (belleğe yazma işlemi daha düşük adreslerden daha yüksek adreslere doğru gerçekleşir).
Kavramı netlik için iki ayrı türüne ayıralım.
Kısmi RELRO, ikilinin performansını önemli ölçüde etkilemeden güvenliği artırmak için daha basit bir yaklaşım benimser. Kısmi RELRO, .got'u yalnızca okunur hale getirir (GOT bölümünün PLT dışı kısmı). Kalan bölümün (örneğin, .got.plt) hala yazılabilir olduğunu ve dolayısıyla saldırılara maruz kalabileceğini unutmayın. Bu, GOT'un rastgele yazma zafiyetleri tarafından kötüye kullanılmasını engellemez.
Not: Varsayılan olarak, GCC ikilileri Kısmi RELRO ile derler.
Tam RELRO, tüm GOT'u (hem .got hem de .got.plt) ve .fini_array bölümünü tamamen sadece okunur hale getirerek korumayı artırır. İkili dosya başladığında tüm işlev adresleri çözülür ve GOT'a yüklenir, ardından GOT yalnızca okunur olarak işaretlenir, bu da çalışma zamanında herhangi bir değişikliğin önlenmesini sağlar.
Ancak, Tam RELRO ile ilgili bir takas, performans ve başlangıç süresidir. Çünkü GOT'u yalnızca okunur hale getirmeden önce tüm dinamik sembolleri başlangıçta çözmesi gerektiğinden, Tam RELRO etkin olan ikililer daha uzun yükleme süreleri yaşayabilir. Bu ek başlangıç yükü, Tam RELRO'nun tüm ikililerde varsayılan olarak etkin olmamasının nedenidir.
Bir ikilide Tam RELRO'nun etkin olup olmadığını görmek mümkündür:
Eğer Full RELRO etkinse, bunu aşmanın tek yolu, rastgele yürütme elde etmek için GOT tablosuna yazma gerektirmeyen başka bir yol bulmaktır.
LIBC'nin GOT'u genellikle Partial RELRO'dur, bu nedenle rastgele bir yazma ile değiştirilebilir. Daha fazla bilgi için Targetting libc GOT entries.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)