hacktricks/binary-exploitation/common-binary-protections-and-bypasses/relro.md

3.4 KiB

Relro

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Relro

RELRO signifie Relocation Read-Only, et c'est une fonctionnalité de sécurité utilisée dans les binaires pour atténuer les risques associés aux écrasements de la GOT (Global Offset Table). Démêlons le concept en ses deux types distincts pour plus de clarté : Partial RELRO et Full RELRO.

Partial RELRO

Partial RELRO adopte une approche plus simple pour renforcer la sécurité sans impacter significativement les performances du binaire. En positionnant la GOT au-dessus des variables du programme en mémoire, Partial RELRO vise à empêcher les débordements de tampon d'atteindre et de corrompre la GOT.

Cela n'empêche pas la GOT d'être exploitée par des vulnérabilités d'écriture arbitraire.

Full RELRO

Full RELRO renforce la protection en rendant la GOT et la section .fini_array complètement en lecture seule. Une fois que le binaire démarre, toutes les adresses de fonction sont résolues et chargées dans la GOT, puis, la GOT est marquée en lecture seule, empêchant efficacement toute modification pendant l'exécution.

Cependant, le compromis avec Full RELRO se situe en termes de performances et de temps de démarrage. Parce qu'il doit résoudre tous les symboles dynamiques au démarrage avant de marquer la GOT en lecture seule, les binaires avec Full RELRO activé peuvent connaître des temps de chargement plus longs. Ce surcoût de démarrage supplémentaire est la raison pour laquelle Full RELRO n'est pas activé par défaut dans tous les binaires.

Il est possible de vérifier si Full RELRO est activé dans un binaire avec :

readelf -l /proc/ID_PROC/exe | grep BIND_NOW

Contourner

Si Full RELRO est activé, la seule façon de le contourner est de trouver une autre méthode qui ne nécessite pas d'écrire dans la table GOT pour obtenir une exécution arbitraire.

Notez que la GOT de la LIBC est généralement en Partial RELRO, donc elle peut être modifiée avec une écriture arbitraire. Plus d'informations dans Cibler les entrées de la GOT de la libc.