"Leaky Pointers" o más comúnmente conocido como "Dangling Pointers" es útil para crear una cadena de ataque para evitar un sistema de seguridad en capas.
La idea detrás de DEP es que estás haciendo que las regiones de la memoria no sean ejecutables, por lo que no se puede ejecutar el código de shell en esta área. Solo el DEP es realmente fácil de omitir, solo puede volver a lib, y llamar a cualquier función que desee, system()
es un favorito.
Sin embargo, bajo Windows, las bibliotecas habilitadas para ASLR tendrán un espacio de memoria aleatorio, por lo que el atacante no sabrá la la dirección de memoria de la función system()
, y allí no se puede llamar. La idea detrás de ASLR es que no importa si puedes controlar el EIP si no sabes a dónde saltar.
Ser capaz de leer la ubicación de una región de memoria aleatoria socava la protección de ASLR, porque ahora tiene una ubicación de salto confiable. Esto se puede lograr a través de una amplia variedad de métodos. El uso de un desbordamiento de búfer para simplemente sobrescribir el terminador nulo y leer más allá del final de una matriz se ha utilizado en pwn2own contra IE. Pero realmente la técnica más común es utilizar un Dangling Pointer que se puede usar para leer / escribir o incluso ejecutar una ubicación de memoria válida a pesar de ASLR.
Incluso con ASLR, no todas las ubicaciones de memoria son aleatorias. De hecho, el binario ejecutable tiene un diseño predecible, por lo que puede usar el ejecutable contra sí mismo en una ROP Chain . Sin embargo, a veces es difícil encontrar gadgets ROP útiles, especialmente si el binario de destino es muy pequeño. Si no puede crear una cadena de ROP útil, entonces una vulnerabilidad de divulgación de memoria, como un puntero colgante, es un excelente método de ataque. Es importante tener en cuenta que ASLR solo aleatoriza la ubicación de la página (los primeros bytes de la dirección de memoria), si puede poblar una región dentro de esta página con su código de shell, es posible que pueda ejecutar su código de shell con precisión utilizando la memoria filtrada. diríjase como una base y luego, con suerte, su código de shell se encuentra en algún desplazamiento de esta ubicación aleatoria.
El uso de cadenas de vulnerabilidades de manipulación de memoria es inusualmente solo posible dentro de un entorno de scripting, como JavaScript.