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

4.8 KiB
Raw Blame History

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
{% endhint %}

Relro

RELRO označava Relocation Read-Only, i to je bezbednosna funkcija koja se koristi u binarnim datotekama kako bi se smanjili rizici povezani sa GOT (Global Offset Table) prepisivanjem. Postoje dve vrste RELRO zaštita: (1) Delimični RELRO i (2) Potpuni RELRO. Obe preuređuju GOT i BSS iz ELF datoteka, ali sa različitim rezultatima i implikacijama. Konkretno, postavljaju GOT sekciju pre BSS. To jest, GOT se nalazi na nižim adresama od BSS, čime se onemogućava prepisivanje GOT unosa prelivanjem promenljivih u BSS (zapamtite da se pisanje u memoriju dešava od nižih ka višim adresama).

Hajde da razložimo koncept na njegove dve različite vrste radi jasnoće.

Delimični RELRO

Delimični RELRO koristi jednostavniji pristup za poboljšanje bezbednosti bez značajnog uticaja na performanse binarne datoteke. Delimični RELRO čini .got samo za čitanje (deo GOT sekcije koji nije PLT). Imajte na umu da je ostatak sekcije (kao što je .got.plt) i dalje moguće pisati i, stoga, podložan napadima. Ovo ne sprečava GOT da bude zloupotrebljen iz ranjivosti sa proizvoljnim pisanjem.

Napomena: Po defaultu, GCC kompajlira binarne datoteke sa Delimičnim RELRO.

Potpuni RELRO

Potpuni RELRO pojačava zaštitu tako što čini celu GOT (i .got i .got.plt) i .fini_array sekciju potpuno samo za čitanje. Kada se binarna datoteka pokrene, sve adrese funkcija se rešavaju i učitavaju u GOT, zatim, GOT se označava kao samo za čitanje, efikasno sprečavajući bilo kakve izmene tokom izvršavanja.

Međutim, kompromis sa Potpunim RELRO je u pogledu performansi i vremena pokretanja. Pošto je potrebno rešiti sve dinamičke simbole prilikom pokretanja pre nego što se GOT označi kao samo za čitanje, binarne datoteke sa omogućеним Potpunim RELRO mogu doživeti duže vreme učitavanja. Ova dodatna prekomerna opterećenja prilikom pokretanja su razlog zašto Potpuni RELRO nije omogućен po defaultu u svim binarnim datotekama.

Moguće je videti da li je Potpuni RELRO omogućen u binarnoj datoteci sa:

readelf -l /proc/ID_PROC/exe | grep BIND_NOW

Bypass

Ako je Full RELRO omogućen, jedini način da se zaobiđe je da se pronađe drugi način koji ne zahteva pisanje u GOT tabelu za dobijanje proizvoljne izvršne radnje.

Napomena: LIBC-ova GOT je obično Partial RELRO, tako da se može modifikovati sa proizvoljnim pisanjem. Više informacija u Targetting libc GOT entries.

{% 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
{% endhint %}