mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-29 08:01:00 +00:00
Translated ['binary-exploitation/common-binary-protections-and-bypasses/
This commit is contained in:
parent
a828712377
commit
11d1f36df9
1 changed files with 33 additions and 16 deletions
|
@ -1,42 +1,59 @@
|
||||||
# Relro
|
# Relro
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Naučite i vežbajte hakovanje AWS-a:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Naučite i vežbajte hakovanje GCP-a: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Podržite HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Relro
|
## Relro
|
||||||
|
|
||||||
**RELRO** označava **Relocation Read-Only**, i to je sigurnosna funkcija koja se koristi u binarnim fajlovima kako bi se umanjili rizici povezani sa **GOT (Global Offset Table)** prepisivanjem. Razložićemo koncept na dva različita tipa radi jasnoće: **Partial RELRO** i **Full RELRO**.
|
**RELRO** označava **Relocation Read-Only**, i to je bezbednosna funkcija koja se koristi u binarnim datotekama kako bi se smanjili rizici povezani sa **GOT (Global Offset Table)** prepisivanjem. Postoje dve vrste **RELRO** zaštita: (1) **Delimični RELRO** i (2) **Potpuni RELRO**. Obe preuređuju **GOT** i **BSS** iz ELF datoteka, ali sa različitim rezultatima i implikacijama. Konkretno, postavljaju **GOT** sekciju *pre* **BSS**. To jest, **GOT** se nalazi na nižim adresama od **BSS**, čime se onemogućava prepisivanje **GOT** unosa prelivanjem promenljivih u **BSS** (zapamtite da se pisanje u memoriju dešava od nižih ka višim adresama).
|
||||||
|
|
||||||
### **Partial RELRO**
|
Hajde da razložimo koncept na njegove dve različite vrste radi jasnoće.
|
||||||
|
|
||||||
**Partial RELRO** koristi jednostavniji pristup za poboljšanje sigurnosti bez značajnog uticaja na performanse binarnog fajla. **Pomeranjem GOT iznad promenljivih programa u memoriji, Partial RELRO ima za cilj da spreči preplavljivanje bafera da dosegne i ošteti GOT**. 
|
### **Delimični RELRO**
|
||||||
|
|
||||||
Ovo **ne sprečava** da se GOT **zloupotrebi** iz **proizvolnih upisa** ranjivosti.
|
**Delimični RELRO** koristi jednostavniji pristup za poboljšanje bezbednosti bez značajnog uticaja na performanse binarne datoteke. Delimični RELRO čini **.got samo za čitanje (deo GOT sekcije koji nije PLT)**. Imajte na umu da je ostatak sekcije (kao što je .got.plt) i dalje moguće pisati i, stoga, podložan napadima. Ovo **ne sprečava GOT** da bude zloupotrebljen **iz ranjivosti sa proizvoljnim pisanjem**.
|
||||||
|
|
||||||
### **Full RELRO**
|
Napomena: Po defaultu, GCC kompajlira binarne datoteke sa Delimičnim RELRO.
|
||||||
|
|
||||||
**Full RELRO** pojačava zaštitu tako što **čini GOT i .fini\_array** sekciju potpuno **samo za čitanje.** Kada binarni fajl počne, sve adrese funkcija se rešavaju i učitavaju u GOT, zatim, GOT se označava kao samo za čitanje, efikasno sprečavajući bilo kakve modifikacije tokom izvršavanja.
|
### **Potpuni RELRO**
|
||||||
|
|
||||||
Međutim, trgovina sa Full RELRO je u pogledu performansi i vremena pokretanja. Zato što mora da reši sve dinamičke simbole pri pokretanju pre označavanja GOT kao samo za čitanje, **binarni fajlovi sa omogućenim Full RELRO-om mogu imati duža vremena učitavanja**. Ovaj dodatni početni trošak je razlog zašto Full RELRO nije podrazumevano omogućen u svim binarnim fajlovima.
|
**Potpuni RELRO** pojačava zaštitu tako što **čini celu GOT (i .got i .got.plt) i .fini\_array** sekciju potpuno **samo za čitanje.** Kada se binarna datoteka pokrene, sve adrese funkcija se rešavaju i učitavaju u GOT, zatim, GOT se označava kao samo za čitanje, efikasno sprečavajući bilo kakve izmene tokom izvršavanja.
|
||||||
|
|
||||||
Moguće je proveriti da li je Full RELRO **omogućen** u binarnom fajlu sa:
|
Međutim, kompromis sa Potpunim RELRO je u pogledu performansi i vremena pokretanja. Pošto je potrebno rešiti sve dinamičke simbole prilikom pokretanja pre nego što se GOT označi kao samo za čitanje, **binarne datoteke sa omogućеним Potpunim RELRO mogu doživeti duže vreme učitavanja**. Ova dodatna prekomerna opterećenja prilikom pokretanja su razlog zašto Potpuni RELRO nije omogućен po defaultu u svim binarnim datotekama.
|
||||||
|
|
||||||
|
Moguće je videti da li je Potpuni RELRO **omogućen** u binarnoj datoteci sa:
|
||||||
```bash
|
```bash
|
||||||
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
|
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
|
||||||
```
|
```
|
||||||
## Bypass
|
## Bypass
|
||||||
|
|
||||||
Ako je omogućen puni RELRO, jedini način da ga zaobiđete je pronaći drugi način koji ne zahteva pisanje u GOT tabelu kako biste dobili proizvoljno izvršenje.
|
Ako je Full RELRO omogućen, jedini način da se zaobiđe je da se pronađe drugi način koji ne zahteva pisanje u GOT tabelu za dobijanje proizvoljne izvršne radnje.
|
||||||
|
|
||||||
Imajte na umu da je **GOT biblioteke obično delimično RELRO**, pa je moguće izmeniti je pomoću proizvoljnog upisa. Više informacija u [Ciljanje unosa libc GOT](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**
|
Napomena: **LIBC-ova GOT je obično Partial RELRO**, tako da se može modifikovati sa proizvoljnim pisanjem. Više informacija u [Targetting libc GOT entries](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**
|
||||||
|
|
||||||
|
{% hint style="success" %}
|
||||||
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
Loading…
Reference in a new issue