Protecciones de Libc
Reading time: 8 minutes
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripci贸n!
- 脷nete al 馃挰 grupo de Discord o al grupo de telegram o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.
Aplicaci贸n de Alineaci贸n de Chunk
Malloc asigna memoria en agrupaciones de 8 bytes (32 bits) o 16 bytes (64 bits). Esto significa que el final de los chunks en sistemas de 32 bits debe alinearse con 0x8, y en sistemas de 64 bits con 0x0. La caracter铆stica de seguridad verifica que cada chunk se alinee correctamente en estas ubicaciones espec铆ficas antes de usar un puntero de un bin.
Beneficios de Seguridad
La aplicaci贸n de la alineaci贸n de chunks en sistemas de 64 bits mejora significativamente la seguridad de Malloc al limitar la colocaci贸n de chunks falsos a solo 1 de cada 16 direcciones. Esto complica los esfuerzos de explotaci贸n, especialmente en escenarios donde el usuario tiene control limitado sobre los valores de entrada, haciendo que los ataques sean m谩s complejos y dif铆ciles de ejecutar con 茅xito.
- Ataque Fastbin en __malloc_hook
Las nuevas reglas de alineaci贸n en Malloc tambi茅n frustran un ataque cl谩sico que involucra el __malloc_hook
. Anteriormente, los atacantes pod铆an manipular los tama帽os de los chunks para sobrescribir este puntero de funci贸n y obtener ejecuci贸n de c贸digo. Ahora, el requisito de alineaci贸n estricta asegura que tales manipulaciones ya no sean viables, cerrando una ruta de explotaci贸n com煤n y mejorando la seguridad general.
Mangling de Punteros en fastbins y tcache
Mangling de Punteros es una mejora de seguridad utilizada para proteger punteros Fd de fastbin y tcache en operaciones de gesti贸n de memoria. Esta t茅cnica ayuda a prevenir ciertos tipos de t谩cticas de explotaci贸n de memoria, espec铆ficamente aquellas que no requieren informaci贸n de memoria filtrada o que manipulan ubicaciones de memoria directamente en relaci贸n con posiciones conocidas (sobrescrituras relativas).
El n煤cleo de esta t茅cnica es una f贸rmula de ofuscaci贸n:
New_Ptr = (L >> 12) XOR P
- L es la Ubicaci贸n de Almacenamiento del puntero.
- P es el Puntero Fd de fastbin/tcache.
La raz贸n del desplazamiento a la derecha de la ubicaci贸n de almacenamiento (L) por 12 bits antes de la operaci贸n XOR es cr铆tica. Esta manipulaci贸n aborda una vulnerabilidad inherente a la naturaleza determinista de los 12 bits menos significativos de las direcciones de memoria, que son t铆picamente predecibles debido a las limitaciones de la arquitectura del sistema. Al desplazar los bits, la porci贸n predecible se mueve fuera de la ecuaci贸n, mejorando la aleatoriedad del nuevo puntero mangled y, por lo tanto, protegiendo contra exploits que dependen de la predictibilidad de estos bits.
Este puntero mangled aprovecha la aleatoriedad existente proporcionada por Randomizaci贸n de Dise帽o de Espacio de Direcciones (ASLR), que aleatoriza las direcciones utilizadas por los programas para dificultar que los atacantes predigan el dise帽o de memoria de un proceso.
Desmangling del puntero para recuperar la direcci贸n original implica usar la misma operaci贸n XOR. Aqu铆, el puntero mangled se trata como P en la f贸rmula, y cuando se XOR con la ubicaci贸n de almacenamiento sin cambios (L), resulta en la revelaci贸n del puntero original. Esta simetr铆a en el mangling y desmangling asegura que el sistema pueda codificar y decodificar punteros de manera eficiente sin una sobrecarga significativa, mientras aumenta sustancialmente la seguridad contra ataques que manipulan punteros de memoria.
Beneficios de Seguridad
El mangling de punteros tiene como objetivo prevenir sobrescrituras parciales y completas de punteros en la gesti贸n de heap, una mejora significativa en la seguridad. Esta caracter铆stica impacta las t茅cnicas de explotaci贸n de varias maneras:
- Prevenci贸n de Sobrescrituras Relativas Byte a Byte: Anteriormente, los atacantes pod铆an cambiar parte de un puntero para redirigir chunks de heap a diferentes ubicaciones sin conocer direcciones exactas, una t茅cnica evidente en el exploit sin filtraciones House of Roman. Con el mangling de punteros, tales sobrescrituras relativas sin una filtraci贸n de heap ahora requieren fuerza bruta, reduciendo dr谩sticamente su probabilidad de 茅xito.
- Aumento de la Dificultad de Ataques a Tcache Bin/Fastbin: Los ataques comunes que sobrescriben punteros de funci贸n (como
__malloc_hook
) manipulando entradas de fastbin o tcache se ven obstaculizados. Por ejemplo, un ataque podr铆a involucrar filtrar una direcci贸n de LibC, liberar un chunk en el bin de tcache y luego sobrescribir el puntero Fd para redirigirlo a__malloc_hook
para ejecuci贸n de c贸digo arbitrario. Con el mangling de punteros, estos punteros deben estar correctamente mangled, necesitando una filtraci贸n de heap para una manipulaci贸n precisa, elevando as铆 la barrera de explotaci贸n. - Requisito de Filtraciones de Heap en Ubicaciones No Heap: Crear un chunk falso en 谩reas no heap (como la pila, secci贸n .bss o PLT/GOT) ahora tambi茅n requiere una filtraci贸n de heap debido a la necesidad de mangling de punteros. Esto extiende la complejidad de explotar estas 谩reas, similar al requisito de manipular direcciones de LibC.
- Filtrar Direcciones de Heap se Vuelve M谩s Desafiante: El mangling de punteros restringe la utilidad de los punteros Fd en fastbin y tcache como fuentes para filtraciones de direcciones de heap. Sin embargo, los punteros en bins no ordenados, peque帽os y grandes permanecen sin mangling, por lo que a煤n son utilizables para filtrar direcciones. Este cambio empuja a los atacantes a explorar estos bins en busca de informaci贸n explotable, aunque algunas t茅cnicas a煤n pueden permitir desmangling de punteros antes de una filtraci贸n, aunque con restricciones.
Desmangling de Punteros con una Filtraci贸n de Heap
caution
Para una mejor explicaci贸n del proceso ver la publicaci贸n original desde aqu铆.
Resumen del Algoritmo
La f贸rmula utilizada para mangling y desmangling de punteros es:
New_Ptr = (L >> 12) XOR P
Donde L es la ubicaci贸n de almacenamiento y P es el puntero Fd. Cuando L se desplaza a la derecha por 12 bits, expone los bits m谩s significativos de P, debido a la naturaleza de XOR, que produce 0 cuando los bits se XOR con s铆 mismos.
Pasos Clave en el Algoritmo:
- Filtraci贸n Inicial de los Bits M谩s Significativos: Al XORear el L desplazado con P, efectivamente obtienes los 12 bits superiores de P porque la porci贸n desplazada de L ser谩 cero, dejando los bits correspondientes de P sin cambios.
- Recuperaci贸n de Bits del Puntero: Dado que XOR es reversible, conocer el resultado y uno de los operandos permite calcular el otro operando. Esta propiedad se utiliza para deducir todo el conjunto de bits para P al XORear sucesivamente conjuntos conocidos de bits con partes del puntero mangled.
- Desmangling Iterativo: El proceso se repite, cada vez utilizando los nuevos bits descubiertos de P del paso anterior para decodificar el siguiente segmento del puntero mangled, hasta que se recuperen todos los bits.
- Manejo de Bits Deterministas: Los 煤ltimos 12 bits de L se pierden debido al desplazamiento, pero son deterministas y pueden ser reconstruidos despu茅s del proceso.
Puedes encontrar una implementaci贸n de este algoritmo aqu铆: https://github.com/mdulin2/mangle
Guardi谩n de Punteros
El guardi谩n de punteros es una t茅cnica de mitigaci贸n de exploits utilizada en glibc para proteger punteros de funci贸n almacenados, particularmente aquellos registrados por llamadas a bibliotecas como atexit()
. Esta protecci贸n implica desordenar los punteros mediante XOR con un secreto almacenado en los datos del hilo (fs:0x30
) y aplicar una rotaci贸n a nivel de bits. Este mecanismo tiene como objetivo prevenir que los atacantes secuestren el flujo de control sobrescribiendo punteros de funci贸n.
Eludiendo el Guardi谩n de Punteros con una filtraci贸n
- Comprensi贸n de las Operaciones del Guardi谩n de Punteros: El desordenamiento (mangling) de punteros se realiza utilizando el macro
PTR_MANGLE
que XORea el puntero con un secreto de 64 bits y luego realiza una rotaci贸n a la izquierda de 0x11 bits. La operaci贸n inversa para recuperar el puntero original es manejada porPTR_DEMANGLE
. - Estrategia de Ataque: El ataque se basa en un enfoque de texto plano conocido, donde el atacante necesita conocer tanto la versi贸n original como la mangled de un puntero para deducir el secreto utilizado para el mangling.
- Explotando Textos Planos Conocidos:
- Identificaci贸n de Punteros de Funci贸n Fijos: Al examinar el c贸digo fuente de glibc o tablas de punteros de funci贸n inicializadas (como
__libc_pthread_functions
), un atacante puede encontrar punteros de funci贸n predecibles. - C谩lculo del Secreto: Usando un puntero de funci贸n conocido como
__pthread_attr_destroy
y su versi贸n mangled de la tabla de punteros de funci贸n, se puede calcular el secreto rotando hacia atr谩s (rotaci贸n a la derecha) el puntero mangled y luego XORe谩ndolo con la direcci贸n de la funci贸n.
- Textos Planos Alternativos: El atacante tambi茅n puede experimentar con mangling de punteros con valores conocidos como 0 o -1 para ver si estos producen patrones identificables en la memoria, revelando potencialmente el secreto cuando se encuentran estos patrones en volcado de memoria.
- Aplicaci贸n Pr谩ctica: Despu茅s de calcular el secreto, un atacante puede manipular punteros de manera controlada, eludiendo esencialmente la protecci贸n del Guardi谩n de Punteros en una aplicaci贸n multihilo con conocimiento de la direcci贸n base de libc y la capacidad de leer ubicaciones de memoria arbitrarias.
Referencias
- https://maxwelldulin.com/BlogPost?post=5445977088
- https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripci贸n!
- 脷nete al 馃挰 grupo de Discord o al grupo de telegram o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.