Relro

Reading time: 3 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Relro

RELRO inamaanisha Relocation Read-Only, na ni kipengele cha usalama kinachotumika katika binaries kupunguza hatari zinazohusiana na GOT (Global Offset Table) overwrites. Kuna aina mbili za ulinzi wa RELRO: (1) Partial RELRO na (2) Full RELRO. Zote zinapanga upya GOT na BSS kutoka kwa faili za ELF, lakini kwa matokeo na athari tofauti. Kwa hakika, zinaweka sehemu ya GOT kabla ya BSS. Hiyo ni, GOT iko katika anwani za chini kuliko BSS, hivyo kufanya iwezekanavyo kuandika tena GOT entries kwa kujaa kwa mabadiliko katika BSS (kumbuka kuandika kwenye kumbukumbu kunatokea kutoka anwani za chini kuelekea juu).

Hebu tufanye uchambuzi wa dhana hii katika aina zake mbili tofauti kwa uwazi.

Partial RELRO

Partial RELRO inachukua njia rahisi kuboresha usalama bila kuathiri sana utendaji wa binary. Partial RELRO inafanya .got iwe ya kusoma tu (sehemu isiyo ya PLT ya sehemu ya GOT). Kumbuka kwamba sehemu nyingine (kama vile .got.plt) bado inaweza kuandikwa, na hivyo, inakuwa chini ya mashambulizi. Hii haiwezi kuzuia GOT kutumika vibaya kutokana na udhaifu wa kuandika bila mpangilio.

Kumbuka: Kwa kawaida, GCC inakusanya binaries na Partial RELRO.

Full RELRO

Full RELRO inaongeza ulinzi kwa kufanya GOT yote (sawa na .got na .got.plt) na sehemu ya .fini_array kuwa kabisa ya kusoma tu. Mara binary inapoanza, anwani zote za kazi zinatatuliwa na kupakiwa katika GOT, kisha, GOT inakumbukwa kama ya kusoma tu, kwa ufanisi kuzuia mabadiliko yoyote kwake wakati wa utendaji.

Hata hivyo, gharama ya Full RELRO iko katika utendaji na muda wa kuanzisha. Kwa sababu inahitaji kutatua alama zote za dinamik wakati wa kuanzisha kabla ya kuashiria GOT kama ya kusoma tu, binaries zenye Full RELRO iliyoanzishwa zinaweza kukumbana na muda mrefu wa kupakia. Mzigo huu wa ziada wa kuanzisha ndio sababu Full RELRO haijaanzishwa kwa kawaida katika binaries zote.

Inawezekana kuona ikiwa Full RELRO ime anzishwa katika binary kwa:

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

Bypass

Ikiwa Full RELRO imewezeshwa, njia pekee ya kuipita ni kutafuta njia nyingine ambayo haitahitaji kuandika kwenye jedwali la GOT ili kupata utekelezaji wa kiholela.

Kumbuka kwamba GOT ya LIBC kwa kawaida ni Partial RELRO, hivyo inaweza kubadilishwa kwa kuandika kiholela. Taarifa zaidi katika Targetting libc GOT entries.

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks