hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/relro.md

3.9 KiB

Relro

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Relro

RELRO significa Relocation Read-Only, y es una característica de seguridad utilizada en binarios para mitigar los riesgos asociados con las sobrescrituras de la GOT (Global Offset Table). Vamos a desglosar el concepto en sus dos tipos distintos para mayor claridad: Partial RELRO y Full RELRO.

Partial RELRO

Partial RELRO adopta un enfoque más simple para mejorar la seguridad sin afectar significativamente el rendimiento del binario. Al posicionar la GOT por encima de las variables del programa en la memoria, Partial RELRO tiene como objetivo evitar que los desbordamientos de búfer alcancen y corrompan la GOT.

Esto no evita que la GOT sea abusada por vulnerabilidades de escritura arbitraria.

Full RELRO

Full RELRO intensifica la protección al hacer que la GOT sea completamente de solo lectura. Una vez que el binario comienza, todas las direcciones de las funciones se resuelven y se cargan en la GOT, luego, la GOT se marca como de solo lectura, evitando efectivamente cualquier modificación durante la ejecución.

Sin embargo, el inconveniente de Full RELRO se encuentra en términos de rendimiento y tiempo de inicio. Debido a que requiere resolver todos los símbolos dinámicos al inicio antes de marcar la GOT como de solo lectura, los binarios con Full RELRO habilitado pueden experimentar tiempos de carga más largos. Esta sobrecarga adicional en el inicio es la razón por la cual Full RELRO no está habilitado de forma predeterminada en todos los binarios.

Es posible verificar si Full RELRO está habilitado en un binario con:

readelf -l /proc/ID_PROC/exe | grep BIND_NOW
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: