3.7 KiB
Relro
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricks をサポートする他の方法:
- HackTricks で企業を宣伝したいまたは HackTricks をPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローする。**
- ハッキングトリックを共有するために、HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出する。
Relro
RELRO は Relocation Read-Only の略で、GOT(Global Offset Table) の上書きに関連するリスクを緩和するためにバイナリで使用されるセキュリティ機能です。この概念を明確にするために、Partial RELRO と Full RELRO の2つの異なるタイプに分解してみましょう。
Partial RELRO
Partial RELRO は、バイナリのパフォーマンスに大きな影響を与えることなくセキュリティを向上させるシンプルなアプローチを取ります。メモリ内のプログラムの変数よりもGOTを上に配置することで、Partial RELRO はバッファオーバーフローがGOTに到達して破損させるのを防ぐことを目指します。
これにより、任意の書き込み脆弱性からGOTが悪用されることはありません。
Full RELRO
Full RELRO は、GOT と .fini_array セクションを完全に 読み取り専用 にすることで保護を強化します。バイナリが開始すると、すべての関数アドレスが解決され、GOTにロードされます。その後、GOT は読み取り専用としてマークされ、ランタイム中にそれに対する変更を防ぎます。
ただし、Full RELRO のトレードオフはパフォーマンスと起動時間です。Full RELRO を有効にするには、GOT を読み取り専用にマークする前に起動時にすべての動的シンボルを解決する必要があるため、Full RELRO が有効になっているバイナリは起動時間が長くなる可能性があります。この追加の起動オーバーヘッドのため、Full RELRO はすべてのバイナリでデフォルトで有効になっているわけではありません。
バイナリで Full RELRO が 有効 かどうかを確認することができます。
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
バイパス
完全なRELROが有効になっている場合、GOTテーブルに書き込む必要がない別の方法を見つけることで任意の実行を得ることができます。
LIBCのGOTは通常Partial RELROであるため、任意の書き込みで変更できます。詳細はTargetting libc GOT entriesを参照してください。