Relro

Support HackTricks

Relro

RELRO inamaanisha Relocation Read-Only, na ni kipengele cha usalama kinachotumika katika binaries kupunguza hatari zinazohusiana na GOT (Global Offset Table) kuandikwa upya. 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 usahihi, zinaweka sehemu ya GOT kabla ya BSS. Hiyo ni, GOT iko katika anwani za chini kuliko BSS, hivyo kufanya iwe haiwezekani kuandika upya GOT 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 uandishi wa kiholela.

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

Full RELRO

Full RELRO inaongeza ulinzi kwa kufanya GOT yote (zote .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:

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. Maelezo zaidi katika Targetting libc GOT entries.

Support HackTricks

Last updated