Relro

Support HackTricks

Relro

RELRO staan vir Relocation Read-Only, en dit is 'n sekuriteitskenmerk wat in binêre lêers gebruik word om die risiko's wat verband hou met GOT (Global Offset Table) oorskrywings te verminder. Daar is twee tipes RELRO beskermings: (1) Deeltelike RELRO en (2) Volle RELRO. Albei herskik die GOT en BSS van ELF-lêers, maar met verskillende resultate en implikasies. Spesifiek plaas hulle die GOT afdeling voor die BSS. Dit wil sê, GOT is op laer adresse as BSS, wat dit onmoontlik maak om GOT inskrywings te oorskryf deur variabeles in die BSS oor te loop (onthou dat skryf in geheue van laer na hoër adresse gebeur).

Kom ons breek die konsep af in sy twee duidelike tipes vir duidelikheid.

Deeltelike RELRO

Deeltelike RELRO neem 'n eenvoudiger benadering om sekuriteit te verbeter sonder om die binêre se prestasie aansienlik te beïnvloed. Deeltelike RELRO maak die .got slegs leesbaar (die nie-PLT deel van die GOT afdeling). Hou in gedagte dat die res van die afdeling (soos die .got.plt) steeds skryfbaar is en, gevolglik, onderhewig is aan aanvalle. Dit verhoed nie dat die GOT misbruik word van arbitrêre skryf kwesbaarhede nie.

Nota: Standaard kompileer GCC binêre lêers met Deeltelike RELRO.

Volle RELRO

Volle RELRO verhoog die beskerming deur die hele GOT (both .got en .got.plt) en .fini_array afdeling heeltemal slegs leesbaar te maak. Sodra die binêre begin, word al die funksie adresse opgelos en in die GOT gelaai, dan word GOT as slegs leesbaar gemerk, wat effektief enige wysigings aan dit tydens uitvoering verhoed.

Die handelsoffensief met Volle RELRO is egter in terme van prestasie en opstarttyd. Omdat dit al die dinamiese simbole by opstart moet oplos voordat dit die GOT as slegs leesbaar merk, kan binêre lêers met Volle RELRO geaktiveer langer laai tye ervaar. Hierdie ekstra opstartlas is waarom Volle RELRO nie standaard in alle binêre lêers geaktiveer is nie.

Dit is moontlik om te sien of Volle RELRO geaktiveer is in 'n binêre met:

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

Bypass

As Volle RELRO geaktiveer is, is die enigste manier om dit te omseil om 'n ander manier te vind wat nie skryf in die GOT tabel benodig om arbitrêre uitvoering te verkry nie.

Let daarop dat LIBC se GOT gewoonlik Gedeeltelike RELRO is, so dit kan met 'n arbitrêre skryf verander word. Meer inligting in Targetting libc GOT entries.

Support HackTricks

Last updated