hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md

3 KiB

Relro

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Relro

RELRO oznacza Relocation Read-Only i jest funkcją zabezpieczeń stosowaną w plikach binarnych w celu zmniejszenia ryzyka związanego z nadpisywaniem GOT (Global Offset Table). Rozbijmy ten koncept na dwa różne typy dla jasności: Częściowy RELRO i Pełny RELRO.

Częściowy RELRO

Częściowy RELRO stosuje prostsze podejście do zwiększenia bezpieczeństwa bez znacznego wpływu na wydajność binarnego pliku. Poprzez umieszczenie GOT powyżej zmiennych programu w pamięci, Częściowy RELRO ma na celu zapobieganie dotarciu i uszkodzeniu GOT przez przepełnienie bufora.

To nie zapobiega nadużywaniu GOT z podatności na dowolne zapisy.

Pełny RELRO

Pełny RELRO podnosi ochronę poprzez całkowite zablokowanie GOT do odczytu. Gdy binarny plik zaczyna działanie, wszystkie adresy funkcji są rozwiązywane i ładowane do GOT, a następnie GOT jest oznaczane jako tylko do odczytu, skutecznie uniemożliwiając jakiekolwiek modyfikacje podczas działania.

Jednakże, w przypadku Pełnego RELRO, kompromis dotyczy wydajności i czasu uruchamiania. Ponieważ wymaga to rozwiązania wszystkich symboli dynamicznych podczas uruchamiania przed oznaczeniem GOT jako tylko do odczytu, binarne pliki z włączonym Pełnym RELRO mogą doświadczyć dłuższych czasów ładowania. Dodatkowe obciążenie podczas uruchamiania to powód, dla którego Pełny RELRO nie jest domyślnie włączony we wszystkich plikach binarnych.

Można sprawdzić, czy Pełny RELRO jest włączony w pliku binarnym za pomocą:

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

Bypass

Jeśli Full RELRO jest włączone, jedynym sposobem na jego obejście jest znalezienie innego sposobu, który nie wymaga zapisywania w tabeli GOT, aby uzyskać dowolne wykonanie.