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

4.2 KiB

Relro

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Relro

RELRO oznacza Relocation Read-Only i jest funkcją zabezpieczeń stosowaną w plikach binarnych w celu złagodzenia ryzyka związanego z GOT (Global Offset Table) nadpisaniami. Rozłóżmy ten koncept na dwa wyraźne typy dla jasności: Partial RELRO i Full RELRO.

Partial RELRO

Partial RELRO przyjmuje prostsze podejście do zwiększenia bezpieczeństwa bez znaczącego wpływu na wydajność binarnego pliku. Poprzez umieszczenie GOT powyżej zmiennych programu w pamięci, Partial RELRO ma na celu zapobieżenie przepełnieniom bufora, które mogłyby dotrzeć do GOT i go uszkodzić.

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

Full RELRO

Full RELRO zwiększa ochronę poprzez uczynienie GOT całkowicie tylko do odczytu. Gdy plik binarny się uruchamia, wszystkie adresy funkcji są rozwiązywane i ładowane w GOT, a następnie GOT jest oznaczany jako tylko do odczytu, co skutecznie zapobiega jakimkolwiek modyfikacjom w czasie wykonywania.

Jednak kompromis związany z Full RELRO dotyczy wydajności i czasu uruchamiania. Ponieważ musi rozwiązać wszystkie dynamiczne symbole podczas uruchamiania przed oznaczeniem GOT jako tylko do odczytu, pliki binarne z włączonym Full RELRO mogą doświadczać dłuższych czasów ładowania. Ten dodatkowy narzut przy uruchamianiu to powód, dla którego Full RELRO nie jest domyślnie włączony we wszystkich plikach binarnych.

Można sprawdzić, czy Full 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łączony, jedynym sposobem na obejście go jest znalezienie innej metody, która nie wymaga zapisu w tabeli GOT, aby uzyskać dowolne wykonanie.

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

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}