6.5 KiB
ASLR
Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén la merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte tus trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información Básica
La Randomización del Diseño del Espacio de Direcciones (ASLR, por sus siglas en inglés) es una técnica de seguridad utilizada en sistemas operativos para aleatorizar las direcciones de memoria utilizadas por los procesos del sistema y de las aplicaciones. Al hacerlo, se vuelve significativamente más difícil para un atacante predecir la ubicación de procesos y datos específicos, como la pila, el montón y las bibliotecas, mitigando así ciertos tipos de exploits, especialmente los desbordamientos de búfer.
Verificar el Estado de ASLR
Para verificar el estado de ASLR en un sistema Linux, puedes leer el valor del archivo /proc/sys/kernel/randomize_va_space
. El valor almacenado en este archivo determina el tipo de ASLR que se está aplicando:
- 0: Sin aleatorización. Todo es estático.
- 1: Aleatorización conservadora. Las bibliotecas compartidas, la pila, mmap(), la página VDSO se aleatorizan.
- 2: Aleatorización completa. Además de los elementos aleatorizados por la aleatorización conservadora, la memoria gestionada a través de
brk()
se aleatoriza.
Puedes verificar el estado de ASLR con el siguiente comando:
bashCopy codecat /proc/sys/kernel/randomize_va_space
Desactivando ASLR
Para desactivar ASLR, establece el valor de /proc/sys/kernel/randomize_va_space
en 0. Desactivar ASLR generalmente no se recomienda fuera de escenarios de prueba o depuración. Así es como puedes desactivarlo:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
También puedes desactivar ASLR para una ejecución con:
setarch `arch` -R ./bin args
setarch `uname -m` -R ./bin args
Activando ASLR
Para habilitar ASLR, puedes escribir un valor de 2 en el archivo /proc/sys/kernel/randomize_va_space
. Normalmente se requieren privilegios de root. La activación de la aleatorización completa se puede hacer con el siguiente comando:
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
Persistencia a través de reinicios
Los cambios realizados con los comandos echo
son temporales y se restablecerán al reiniciar. Para hacer que el cambio sea persistente, necesitas editar el archivo /etc/sysctl.conf
y agregar o modificar la siguiente línea:
kernel.randomize_va_space=2 # Enable ASLR
# or
kernel.randomize_va_space=0 # Disable ASLR
Después de editar /etc/sysctl.conf
, aplica los cambios con:
sudo sysctl -p
Esto asegurará que la configuración de tu ASLR se mantenga después de reinicios.
Burlando ASLR de 32 bits
Fuerza bruta de 32 bits
PaX divide el espacio de direcciones del proceso en 3 grupos:
- Código y datos (inicializados y no inicializados):
.text
,.data
y.bss
—> 16 bits de entropía en la variabledelta_exec
. Esta variable se inicializa aleatoriamente con cada proceso y se suma a las direcciones iniciales. - Memoria asignada por
mmap()
y bibliotecas compartidas —> 16 bits, llamadodelta_mmap
. - La pila —> 24 bits, referido como
delta_stack
. Sin embargo, efectivamente utiliza 11 bits (desde el décimo hasta el vigésimo byte inclusive), alineados a 16 bytes —> Esto resulta en 524,288 posibles direcciones reales de pila.
Los datos anteriores son para sistemas de 32 bits y la entropía final reducida hace posible eludir ASLR intentando la ejecución una y otra vez hasta que el exploit se complete con éxito.
Ideas de fuerza bruta:
- Si el exploit es local, puedes intentar forzar la dirección base de libc (útil para sistemas de 32 bits):
for off in range(0xb7000000, 0xb8000000, 0x1000):
- Si estás atacando un servidor remoto, podrías intentar hacer fuerza bruta en la dirección de la función
usleep
delibc
, pasando como argumento 10 (por ejemplo). Si en algún momento el servidor tarda 10 segundos adicionales en responder, encontraste la dirección de esta función.
{% hint style="success" %} En sistemas de 64 bits, la entropía es mucho mayor y esto no es posible. {% endhint %}
Ret2ret
Intenta evadir ASLR abusando de direcciones dentro de la pila:
{% content-ref url="../stack-overflow/ret2ret.md" %} ret2ret.md {% endcontent-ref %}
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si quieres ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén productos oficiales de PEASS & HackTricks
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.