4.9 KiB
Relro
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Relro
RELRO, Yeniden Yerleştirme Salt Okunur anlamına gelir ve GOT (Küresel Ofset Tablosu) ü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) Kısmi RELRO ve (2) Tam RELRO. Her ikisi de GOT ve BSS'yi ELF dosyalarından 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
Kısmi RELRO, güvenliği artırmak için daha basit bir yaklaşım benimser ve ikilinin performansını önemli ölçüde etkilemez. Kısmi RELRO, .got'u salt 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
Tam 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 işlev 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şiklik yapılmasını etkili bir şekilde engeller.
Ancak, Tam 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, 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.
Tam 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.
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.
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.