Relro
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
RELRO σημαίνει Relocation Read-Only, και είναι μια λειτουργία ασφαλείας που χρησιμοποιείται σε δυαδικά αρχεία για να μετριάσει τους κινδύνους που σχετίζονται με τις GOT (Global Offset Table) υπεργραφές. Υπάρχουν δύο τύποι προστασίας RELRO: (1) Μερική RELRO και (2) Πλήρης RELRO. Και οι δύο αναδιοργανώνουν την GOT και την BSS από τα αρχεία ELF, αλλά με διαφορετικά αποτελέσματα και επιπτώσεις. Συγκεκριμένα, τοποθετούν την ενότητα GOT πριν από την BSS. Δηλαδή, η GOT βρίσκεται σε χαμηλότερες διευθύνσεις από την BSS, καθιστώντας αδύνατη την υπεργραφή των καταχωρήσεων GOT μέσω υπερχείλισης μεταβλητών στην BSS (θυμηθείτε ότι η εγγραφή στη μνήμη συμβαίνει από χαμηλότερες προς υψηλότερες διευθύνσεις).
Ας αναλύσουμε την έννοια σε δύο διακριτούς τύπους για σαφήνεια.
Μερική RELRO ακολουθεί μια απλούστερη προσέγγιση για να ενισχύσει την ασφάλεια χωρίς να επηρεάζει σημαντικά την απόδοση του δυαδικού αρχείου. Η Μερική RELRO καθιστά το .got μόνο για ανάγνωση (το μη-PLT μέρος της ενότητας GOT). Να έχετε υπόψη ότι το υπόλοιπο της ενότητας (όπως το .got.plt) είναι ακόμα εγγράψιμο και, επομένως, επιρρεπές σε επιθέσεις. Αυτό δεν αποτρέπει την κακή χρήση της GOT από τρωτά σημεία αυθαίρετης εγγραφής.
Σημείωση: Από προεπιλογή, ο GCC συντάσσει δυαδικά αρχεία με Μερική RELRO.
Πλήρης RELRO ενισχύει την προστασία καθιστώντας ολόκληρη την GOT (τόσο .got όσο και .got.plt) και την ενότητα .fini_array εντελώς μόνο για ανάγνωση. Μόλις ξεκινήσει το δυαδικό αρχείο, όλες οι διευθύνσεις συναρτήσεων επιλύονται και φορτώνονται στην GOT, στη συνέχεια, η GOT σημειώνεται ως μόνο για ανάγνωση, αποτρέποντας αποτελεσματικά οποιεσδήποτε τροποποιήσεις σε αυτήν κατά τη διάρκεια της εκτέλεσης.
Ωστόσο, το κόστος με την Πλήρη RELRO είναι σε όρους απόδοσης και χρόνου εκκίνησης. Επειδή χρειάζεται να επιλύσει όλα τα δυναμικά σύμβολα κατά την εκκίνηση πριν σημειώσει την GOT ως μόνο για ανάγνωση, τα δυαδικά αρχεία με ενεργοποιημένη την Πλήρη RELRO ενδέχεται να έχουν μεγαλύτερους χρόνους φόρτωσης. Αυτή η επιπλέον επιβάρυνση εκκίνησης είναι ο λόγος που η Πλήρης RELRO δεν είναι ενεργοποιημένη από προεπιλογή σε όλα τα δυαδικά αρχεία.
Είναι δυνατόν να δείτε αν η Πλήρης RELRO είναι ενεργοποιημένη σε ένα δυαδικό αρχείο με:
Αν είναι ενεργοποιημένο το Full RELRO, ο μόνος τρόπος να το παρακάμψετε είναι να βρείτε έναν άλλο τρόπο που δεν χρειάζεται να γράψετε στον πίνακα GOT για να αποκτήσετε αυθαίρετη εκτέλεση.
Σημειώστε ότι ο πίνακας GOT της LIBC είναι συνήθως Partial RELRO, οπότε μπορεί να τροποποιηθεί με μια αυθαίρετη εγγραφή. Περισσότερες πληροφορίες στο Targetting libc GOT entries.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)