3.3 KiB
Relro
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Kup oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud.
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.