mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['binary-exploitation/common-binary-protections-and-bypasses/
This commit is contained in:
parent
79f1657871
commit
f872cab7f8
1 changed files with 43 additions and 9 deletions
|
@ -1,25 +1,59 @@
|
|||
# Relro
|
||||
|
||||
**RELRO**는 **Relocation Read-Only**의 약자로, **GOT (Global Offset Table)** 덮어쓰기와 관련된 위험을 완화하기 위해 이진 파일에서 사용되는 보안 기능입니다. 이 개념을 명확히 하기 위해 두 가지 유형으로 나누어 살펴보겠습니다: **Partial RELRO**와 **Full RELRO**.
|
||||
{% 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 %}
|
||||
|
||||
## Relro
|
||||
|
||||
**RELRO**는 **Relocation Read-Only**의 약자로, **GOT (Global Offset Table)** 오버라이트와 관련된 위험을 완화하기 위해 바이너리에서 사용되는 보안 기능입니다. **RELRO** 보호에는 두 가지 유형이 있습니다: (1) **Partial RELRO**와 (2) **Full RELRO**. 두 가지 모두 ELF 파일의 **GOT**와 **BSS**를 재배치하지만, 결과와 의미는 다릅니다. 구체적으로, **GOT** 섹션을 **BSS**보다 *앞에* 배치합니다. 즉, **GOT**는 **BSS**보다 낮은 주소에 위치하므로, **BSS**의 변수를 오버플로우하여 **GOT** 항목을 덮어쓰는 것이 불가능합니다 (메모리에 쓰는 것은 낮은 주소에서 높은 주소로 진행됩니다).
|
||||
|
||||
명확성을 위해 이 개념을 두 가지 유형으로 나누어 보겠습니다.
|
||||
|
||||
### **Partial RELRO**
|
||||
|
||||
**Partial RELRO**는 이진 파일의 성능에 큰 영향을 미치지 않으면서 보안을 강화하는 간단한 방법을 취합니다. **메모리에서 프로그램 변수 위에 GOT를 배치함으로써 Partial RELRO는 버퍼 오버플로가 GOT에 도달하고 GOT를 손상시키는 것을 방지하려고 합니다**.
|
||||
**Partial RELRO**는 바이너리의 성능에 큰 영향을 주지 않으면서 보안을 강화하는 간단한 접근 방식을 취합니다. Partial RELRO는 **.got을 읽기 전용으로 만듭니다 (GOT 섹션의 비-PLT 부분)**. 나머지 섹션(예: .got.plt)은 여전히 쓰기가 가능하므로 공격의 대상이 될 수 있습니다. 이는 **GOT**가 **임의 쓰기** 취약점으로 악용되는 것을 방지하지 않습니다.
|
||||
|
||||
이는 **임의 쓰기** 취약점으로부터 GOT가 남용되는 것을 방지하지는 않습니다.
|
||||
참고: 기본적으로 GCC는 Partial RELRO로 바이너리를 컴파일합니다.
|
||||
|
||||
### **Full RELRO**
|
||||
|
||||
**Full RELRO**는 **GOT와 .fini\_array** 섹션을 완전히 **읽기 전용**으로 만들어 더 나은 보호를 제공합니다. 이진 파일이 시작되면 모든 함수 주소가 해결되어 GOT에 로드되고, 그런 다음 GOT가 읽기 전용으로 표시되어 실행 중에 이에 대한 수정을 방지합니다.
|
||||
**Full RELRO**는 **전체 GOT (both .got and .got.plt)와 .fini\_array** 섹션을 완전히 **읽기 전용**으로 만들어 보호를 강화합니다. 바이너리가 시작되면 모든 함수 주소가 해결되고 GOT에 로드된 후, GOT는 읽기 전용으로 표시되어 런타임 중에 수정이 효과적으로 방지됩니다.
|
||||
|
||||
그러나 Full RELRO의 단점은 성능과 시작 시간 측면에서 발생합니다. GOT를 읽기 전용으로 표시하기 전에 시작 시 모든 동적 심볼을 해결해야 하기 때문에 **Full RELRO가 활성화된 바이너리는 더 긴 로드 시간을 경험할 수 있습니다**. 이 추가적인 시작 오버헤드로 인해 Full RELRO는 모든 이진 파일에서 기본적으로 활성화되지 않습니다.
|
||||
그러나 Full RELRO의 단점은 성능과 시작 시간에 있습니다. GOT를 읽기 전용으로 표시하기 전에 모든 동적 심볼을 시작 시 해결해야 하므로, **Full RELRO가 활성화된 바이너리는 로드 시간이 더 길어질 수 있습니다**. 이 추가 시작 오버헤드 때문에 Full RELRO는 모든 바이너리에서 기본적으로 활성화되지 않습니다.
|
||||
|
||||
바이너리에서 Full RELRO가 **활성화되어 있는지 확인**하는 방법은 다음과 같습니다:
|
||||
Full RELRO가 **활성화**되어 있는지 확인하는 방법은 다음과 같습니다:
|
||||
```bash
|
||||
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
|
||||
```
|
||||
## 우회
|
||||
## Bypass
|
||||
|
||||
만약 Full RELRO가 활성화되어 있다면, 임의 실행을 얻기 위해 GOT 테이블에 쓰지 않아도 되는 다른 방법을 찾아야 합니다.
|
||||
Full RELRO가 활성화된 경우, 이를 우회하는 유일한 방법은 GOT 테이블에 쓰지 않고 임의 실행을 얻는 다른 방법을 찾는 것입니다.
|
||||
|
||||
**LIBC의 GOT는 일반적으로 Partial RELRO**이므로 임의 쓰기로 수정할 수 있습니다. 자세한 정보는 [Targetting libc GOT entries](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**에서 확인할 수 있습니다.**
|
||||
**LIBC의 GOT는 일반적으로 Partial RELRO이므로**, 임의 쓰기로 수정할 수 있습니다. [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