Relro
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 affecter 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 entièrement 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 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 nécessite de 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 :
Contournement
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.
Last updated