Relro
Reading time: 3 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Relro
RELRO, Relocation Read-Only anlamına gelir ve GOT (Global Offset Table) üzerine yazma ile ilişkili riskleri azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. İki tür RELRO koruması vardır: (1) Partial RELRO ve (2) Full RELRO. Her ikisi de GOT ve BSS'yi ELF dosyalarından yeniden sıralar, ancak farklı sonuçlar ve etkileri vardır. Özellikle, GOT bölümünü BSS'den önce yerleştirir. Yani, GOT daha düşük adreslerde bulunur, bu nedenle BSS'deki değişkenleri taşırarak GOT girişlerini yazmak imkansız hale gelir (belleğe yazmanın daha düşük adreslerden daha yüksek adreslere doğru gerçekleştiğini unutmayın).
Kavramı netlik için iki ayrı türüne ayıralım.
Partial RELRO
Partial RELRO, güvenliği artırmak için daha basit bir yaklaşım benimser ve ikilinin performansını önemli ölçüde etkilemez. Partial 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 Partial RELRO ile derler.
Full RELRO
Full RELRO, tüm GOT'u (hem .got hem de .got.plt) ve .fini_array bölümünü tamamen salt okunur hale getirerek korumayı artırır. İkili dosya başladığında tüm fonksiyon adresleri çözülür ve GOT'a yüklenir, ardından GOT salt okunur olarak işaretlenir, bu da çalışma zamanında herhangi bir değişikliğe karşı etkili bir şekilde koruma sağlar.
Ancak, Full RELRO ile ilgili bir takas, performans ve başlangıç süresidir. Çünkü GOT'u salt okunur olarak işaretlemeden önce tüm dinamik sembolleri başlangıçta çözmesi gerektiğinden, Full RELRO etkin olan ikililer daha uzun yükleme süreleri yaşayabilir. Bu ek başlangıç yükü, Full RELRO'nun tüm ikililerde varsayılan olarak etkin olmamasının nedenidir.
Full RELRO'nun bir ikili dosyada etkin olup olmadığını görmek mümkündür:
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
Bypass
Eğer Full RELRO etkinse, bunu aşmanın tek yolu, keyfi yürütme elde etmek için GOT tablosuna yazma gerektirmeyen başka bir yol bulmaktır.
Not edin ki LIBC'nin GOT'u genellikle Partial RELRO'dur, bu nedenle keyfi bir yazma ile değiştirilebilir. Daha fazla bilgi için Targetting libc GOT entries.
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.