¿cómo evita ASLR regresar a libc / ROP y ataques similares?

3

Estoy tratando de entender ASLR y cómo se implementa. Entiendo que en realidad no "evita" que ocurra un desbordamiento de búfer, etc. solo lo hará más difícil. Pero no soy capaz de averiguar cómo previene un retorno a un ataque libc. Por ejemplo, digamos que tengo un programa que tiene un desbordamiento de búfer. Doy como entrada un sled np-op seguido de un código de shell. El código de shell sobrescribe la dirección de retorno en el marco de pila. Así que cuando la función vuelva, ejecutará el código de shell. De forma similar, si escribo la dirección de una función libc, esa función se invocará. ahora con ASLR, en cada ejecución del programa, el programa comenzará en alguna dirección aleatoria, ¿no? pero las funciones libc aún están en la misma dirección y, si estoy en lo cierto, eso no cambiará hasta que reinicie una máquina. Entonces, si básicamente intento forzar la fuerza bruta en un programa vulnerable con todas las direcciones posibles, ¿puedo obtener un retorno a libc? también, ¿aslr previene (y cómo?) los ataques de ROP? Si no, ¿cuáles son las defensas?

    
pregunta user775093 04.04.2015 - 04:29
fuente

1 respuesta

4
  

fuerza bruta un programa vulnerable con todas las direcciones posibles

Tratar de forzar el espacio de direcciones (hay 2 ^ 64 direcciones posibles en un sistema moderno de 64 bits) se supone imposible en la práctica debido a restricciones de tiempo (y recursos). También vea: ¿Cuál es el mayor rendimiento / posible? ¿Ataque de fuerza bruta hasta la fecha?

En una nota más práctica, si adivina que la dirección es incorrecta, existe una gran posibilidad de que el programa se bloquee debido, por ejemplo, a un fallo de segmentación. Debido a que una dirección de 64 bits de fuerza bruta puede llevar mucho tiempo, se pueden detectar estos bloqueos.

Por lo tanto, encontrar las direcciones del shellcode en la pila, las funciones de la biblioteca (en el caso de retorno a libc) o los gadgets (en el caso de ROP) es demasiado difícil para el atacante.

Por supuesto, hay otras formas de evitar ASLR. Examine las fugas de punteros y los ataques de diseño de memoria como heapspray si está interesado.

    
respondido por el Boris Mulder 27.12.2016 - 14:16
fuente

Lea otras preguntas en las etiquetas