Relro
Relro
RELRO steht für Relocation Read-Only und ist eine Sicherheitsfunktion, die in Binärdateien verwendet wird, um die Risiken im Zusammenhang mit GOT (Global Offset Table)-Überschreibungen zu mindern. Es gibt zwei Arten von RELRO-Schutz: (1) Partial RELRO und (2) Full RELRO. Beide ordnen die GOT und BSS aus ELF-Dateien neu, jedoch mit unterschiedlichen Ergebnissen und Auswirkungen. Genauer gesagt, platzieren sie den GOT-Abschnitt vor der BSS. Das bedeutet, dass GOT an niedrigeren Adressen als BSS liegt, was es unmöglich macht, GOT-Einträge durch Überlaufvariablen in der BSS zu überschreiben (denken Sie daran, dass das Schreiben in den Speicher von niedrigeren zu höheren Adressen erfolgt).
Lassen Sie uns das Konzept in seine beiden unterschiedlichen Typen zur Klarheit aufschlüsseln.
Partial RELRO
Partial RELRO verfolgt einen einfacheren Ansatz zur Verbesserung der Sicherheit, ohne die Leistung der Binärdatei erheblich zu beeinträchtigen. Partial RELRO macht die .got schreibgeschützt (den nicht-PLT-Teil des GOT-Abschnitts). Beachten Sie, dass der Rest des Abschnitts (wie die .got.plt) weiterhin beschreibbar ist und daher Angriffen ausgesetzt ist. Dies verhindert nicht, dass die GOT durch willkürliche Schreib-Schwachstellen missbraucht wird.
Hinweis: Standardmäßig kompiliert GCC Binärdateien mit Partial RELRO.
Full RELRO
Full RELRO erhöht den Schutz, indem es den gesamten GOT (sowohl .got als auch .got.plt) und den .fini_array-Abschnitt vollständig schreibgeschützt macht. Sobald die Binärdatei gestartet wird, werden alle Funktionsadressen aufgelöst und im GOT geladen, dann wird der GOT als schreibgeschützt markiert, was effektiv Änderungen während der Laufzeit verhindert.
Der Nachteil von Full RELRO liegt jedoch in Bezug auf Leistung und Startzeit. Da alle dynamischen Symbole beim Start aufgelöst werden müssen, bevor der GOT als schreibgeschützt markiert wird, könnten Binärdateien mit aktivem Full RELRO längere Ladezeiten erfahren. Dieser zusätzliche Startaufwand ist der Grund, warum Full RELRO nicht standardmäßig in allen Binärdateien aktiviert ist.
Es ist möglich zu sehen, ob Full RELRO in einer Binärdatei aktiviert ist mit:
Bypass
Wenn Full RELRO aktiviert ist, besteht der einzige Weg, es zu umgehen, darin, einen anderen Weg zu finden, der nicht benötigt, um in die GOT-Tabelle zu schreiben, um willkürliche Ausführung zu erhalten.
Beachten Sie, dass LIBC's GOT normalerweise Partial RELRO ist, sodass es mit einem willkürlichen Schreibvorgang modifiziert werden kann. Weitere Informationen in Targetting libc GOT entries.
Last updated