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 odrębne typy dla jasności: Częściowy RELRO i Pełny RELRO.

Częściowy RELRO

Częściowy RELRO stosuje prostsze podejście do poprawy bezpieczeństwa bez znacznego wpływu na wydajność binariów. 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 oznaczenie GOT i sekcji .fini_array jako tylko do odczytu. Gdy binarny się uruchamia, 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, pojawia się kompromis pod względem wydajności i czasu uruchamiania. Ponieważ należy rozwiązać wszystkie symbole dynamiczne podczas uruchamiania przed oznaczeniem GOT jako tylko do odczytu, binaria 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 binariach.

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

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

Bypass

Jeśli pełne RELRO jest włączone, jedynym sposobem na jego ominięcie jest znalezienie innego sposobu, który nie wymaga zapisu do tabeli GOT, aby uzyskać dowolne wykonanie.

Należy zauważyć, że GOT LIBC jest zazwyczaj częściowo zabezpieczone RELRO, więc może być zmodyfikowane za pomocą dowolnego zapisu. Więcej informacji w Targetting libc GOT entries.

Last updated