¿Glibc usa la verificación de canarios para evitar el desbordamiento del búfer del montón?

0

¿Dado que gcc utiliza canary para evitar el desbordamiento de pila (por ejemplo, fstack-protector), me pregunto si glibc usa un enfoque basado en canary para defender el desbordamiento de búfer de pila? Por ejemplo, este documento propone una detección basada en canarios contra el desbordamiento del búfer del montón. Y los sistemas Windows ya utilizan cookies de pila para mitigar los desbordamientos de búferes de pila.

Cualquier referencia relacionada con glibc será altamente apreciada. ¡Gracias!

    
pregunta ZillGate 29.07.2014 - 05:30
fuente

1 respuesta

1

Glibc tiene algunas capacidades inherentes en la detección de sobrepasos, y se pueden activar con la variable de entorno MALLOC_CHECK_ . Consulte mcheck y mallopt para más detalles.

Al probarlo en un sistema Ubuntu 14.04 de 64 bits, parece que al asignar muchos bloques de memoria, malloc() redondea el tamaño solicitado al siguiente múltiplo de 8, y usa 8 bytes adicionales. Por ejemplo, si asignó 1000000 bloques de 50 bytes, el proceso realmente solicita 64000000 bytes del kernel, no 50000000. Esto deja espacio para un "canario separador" de 8 bytes entre cualquiera de los dos bloques asignados.

Estas características parecen estar destinadas a detectar errores de implementación, no a la explotación maliciosa. No está claro si serían realmente buenos para detectar realmente los desbordamientos de búfer, y hacerlo con la suficiente antelación; de hecho, por definición, las verificaciones de coherencia de la pila de ese tipo solo se pueden aplicar cuando se invocan las rutinas de asignación de pila. Esto significa que si tuvo un desbordamiento de búfer, puede recibir algún aviso solo cuando se libere el bloque relevante, o el siguiente en la RAM: esto sucede después del desbordamiento, posiblemente mucho después, por lo tanto, demasiado tarde. Esto contrasta con los canarios basados en la pila, que se verifican antes devolviendo (es decir, después del desbordamiento, pero antes de usar la ranura de dirección de retorno que puede haber sido obstruida).

Lo que tales controles son más o menos buenos es detectar problemas de doble libertad. No pueden atrapar los casos de uso después de que hayan sido liberados y, como se explicó anteriormente, cuando detectan un desbordamiento, probablemente sea demasiado tarde.

    
respondido por el Tom Leek 29.07.2014 - 16:04
fuente

Lea otras preguntas en las etiquetas