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

3.3 KiB

Relro

{% hint style="success" %} Apprenez et pratiquez le piratage AWS :Formation HackTricks AWS Red Team Expert (ARTE)
Apprenez et pratiquez le piratage GCP : Formation HackTricks GCP Red Team Expert (GRTE)

Soutenez HackTricks
{% endhint %}

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). Explorons 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 fonctions sont résolues et chargées dans la GOT, puis, la GOT est marquée comme 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 comme 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.