Translated ['binary-exploitation/common-binary-protections-and-bypasses/

This commit is contained in:
Translator 2024-08-12 13:17:58 +00:00
parent 51bed8ab1c
commit 24ff03ea0d

View file

@ -1,42 +1,59 @@
# Relro # 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
**RELRO**は**Relocation Read-Only**の略で、**GOT (Global Offset Table)**の上書きに関連するリスクを緩和するためにバイナリで使用されるセキュリティ機能です。この概念を明確にするために、**Partial RELRO**と**Full RELRO**の2つの異なるタイプに分けて説明します。 **RELRO**は**Relocation Read-Only**の略で、**GOT (Global Offset Table)**の上書きに関連するリスクを軽減するためにバイナリで使用されるセキュリティ機能です。**RELRO**保護には2種類あります(1) **Partial RELRO**と(2) **Full RELRO**です。どちらもELFファイルから**GOT**と**BSS**の順序を変更しますが、結果と影響は異なります。具体的には、**GOT**セクションを**BSS**の*前*に配置します。つまり、**GOT**は**BSS**よりも低いアドレスにあり、したがって**BSS**内の変数をオーバーフローさせることで**GOT**エントリを上書きすることは不可能です(メモリへの書き込みは低いアドレスから高いアドレスに向かって行われることを思い出してください)。
この概念を明確にするために、2つの異なるタイプに分解しましょう。
### **Partial RELRO** ### **Partial RELRO**
**Partial RELRO**は、バイナリのパフォーマンスに大きな影響を与えることなくセキュリティを向上させるシンプルなアプローチを取ります。**メモリ内のプログラムの変数よりもGOTを上に配置することで、Partial RELROはバッファオーバーフローがGOTに到達して破損させるのを防ぐことを目指します**。 **Partial RELRO**は、バイナリのパフォーマンスに大きな影響を与えずにセキュリティを強化するためのよりシンプルなアプローチを取ります。Partial RELROは**.gotを読み取り専用にしますGOTセクションの非PLT部分**。セクションの残りの部分(.got.pltなどはまだ書き込み可能であり、したがって攻撃の対象となることに注意してください。この**GOT**が**任意の書き込み**の脆弱性から悪用されるのを防ぐことはありません
これは**GOTが任意の書き込み**脆弱性から悪用されるのを防ぎません。 デフォルトでは、GCCはPartial RELROでバイナリをコンパイルします
### **Full RELRO** ### **Full RELRO**
**Full RELRO**は、**GOTと.fini\_array**セクションを完全に**読み取り専用**にすることで保護を強化します。バイナリが開始されると、すべての関数アドレスが解決され、GOTにロードされます。その後、GOTは読み取り専用としてマークされ、ランタイム中にそれに対する変更を防ぎます。 **Full RELRO**は、**GOT全体(.got.got.pltの両方および.fini\_array**セクションを完全に**読み取り専用**にすることで保護を強化します。バイナリが起動すると、すべての関数アドレスが解決され、GOTにロードされ、その後、GOTは読み取り専用としてマークされ、実行時にそれに対する変更を効果的に防ぎます。
ただし、Full RELROのトレードオフはパフォーマンスと起動時間です。Full RELROを有効にするには、GOTを読み取り専用にマークする前に起動時にすべての動的シンボルを解決する必要があるため、**Full RELROが有効になっているバイナリはロード時間が長くなる可能性があります**。この追加の起動オーバーヘッドのため、Full RELROはすべてのバイナリでデフォルトで有効になっているわけではありません。 ただし、Full RELROのトレードオフはパフォーマンスと起動時間にあります。GOTを読み取り専用としてマークする前に、起動時にすべての動的シンボルを解決する必要があるため、**Full RELROが有効なバイナリは読み込み時間が長くなる可能性があります**。この追加の起動オーバーヘッドが、すべてのバイナリでFull RELROがデフォルトで有効になっていない理由です
バイナリでFull RELROが**有効**かどうかを確認することができます バイナリでFull RELROが**有効**かどうかを確認することができます
```bash ```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW readelf -l /proc/ID_PROC/exe | grep BIND_NOW
``` ```
## バイパス ## バイパス
完全なRELROが有効になっている場合、GOTテーブルに書き込む必要がない別の方法を見つけることで任意の実行を得ることができます。 フルRELROが有効な場合、バイパスする唯一の方法は、任意の実行を得るためにGOTテーブルに書き込む必要のない別の方法を見つけることです。
**LIBCのGOTは通常Partial RELRO**であるため、任意の書き込みで変更できます。[libcのGOTエントリをターゲットにする](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**に関する詳細情報**。 **LIBCのGOTは通常、パーシャル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" %} {% hint style="success" %}
AWSハッキングの学習と実践:<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">\
GCPハッキングの学習と実践: <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>HackTricksのサポート</summary> <summary>Support HackTricks</summary>
* [**購読プラン**](https://github.com/sponsors/carlospolop)をチェック! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@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)**.**
* **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。 * **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 %}