hacktricks/binary-exploitation/common-binary-protections-and-bypasses/relro.md

43 lines
3.2 KiB
Markdown
Raw Normal View History

# Relro
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Relro
**RELRO**, **Relocation Read-Only**'nin kısaltmasıdır ve **GOT (Global Offset Table)** üzerine yazma risklerini azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramııklığa kavuşturmak için iki farklı türü olan **Partial RELRO** ve **Full RELRO**'yu inceleyelim.
### **Partial RELRO**
**Partial RELRO**, ikili dosyanın performansını önemli ölçüde etkilemeden güvenliği artırmak için daha basit bir yaklaşım benimser. **GOT'yi programın değişkenlerinin bellekte üzerine yerleştirerek, Partial RELRO, tampon taşmalarının GOT'a ulaşmasını ve onu bozmasını engellemeyi amaçlar**.
Bu, **GOT'un** keyfi yazma **zafiyetlerinden** kötüye kullanılmasını **engellemez**.
### **Full RELRO**
**Full RELRO**, **GOT 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, böylece çalışma zamanında herhangi bir değişikliğe izin verilmez.
Ancak, Full RELRO ile performans ve başlatma süresi arasında bir takas yapılır. GOT'u salt okunur olarak işaretlemek için başlangıçta tüm dinamik sembolleri çözmesi gerektiğinden, **Full RELRO etkinleştirilmiş ikili dosyalar daha uzun yükleme süreleri yaşayabilir**. Bu ek başlangıç maliyeti nedeniyle Full RELRO varsayılan olarak tüm ikili dosyalarda etkinleştirilmez.
Bir ikili dosyada Full RELRO'nun **etkinleştirilip** etkinleştirilmediğini görmek mümkündür:
```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
```
## Atlatma
Tam RELRO etkinleştirildiğinde, bunu atlatmanın tek yolu, keyfi yürütme elde etmek için GOT tablosuna yazma gerektirmeyen başka bir yol bulmaktır.
**LIBC'nin GOT tablosu genellikle Kısmi RELRO olduğundan**, keyfi yazma ile değiştirilebilir. Daha fazla bilgi için [LIBC GOT girişlerini hedefleme](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**