Aparición del gadget ROP

4

Estoy investigando varias técnicas de desbordamiento de búfer, una que encuentro y que está muy interesada en el momento es la Programación Orientada al Retorno (ROP) y el uso de pequeños grupos de instrucciones conocidas como gadgets.

La pregunta: hay ciertos gadgets que son populares y se utilizan ampliamente en muchas vulnerabilidades, por ejemplo, la secuencia POP / POP / RET. ¿Hay alguna investigación o prueba de que la aparición de tal dispositivo o sus equivalencias sea lo suficientemente alta como para que siempre haya una en la mayoría de los binarios? Estoy buscando una biblioteca común determinada o unas técnicas de compilación populares que produzcan estas secuencias.

EDITAR: En resumen, ¿POP / POP / RET y las equivalencias siempre estarán en un binario?

Lo pregunto en el contexto x86, pero si hay algún otro cliente potencial en otra plataforma, comparte.

    
pregunta Pham Trung Nghia 28.02.2013 - 12:23
fuente

1 respuesta

8

Crear una cadena ROP es un proceso difícil, creativo, laborioso pero a la vez emocionante. En términos generales, cuando estamos usando ROP, estamos tratando de evitar el DEP. Después de todo, si tenemos el control de EIP y podemos escribir y ejecutar la pila, ¿por qué no saltar a nuestro Shellcode?

Teniendo esto en cuenta, es importante recordar que, en general, las cargas útiles no están escritas como una cadena ROP. Generar un shell inverso completamente a partir de los gadgets ROP mientras sea posible, es probable que ponga a prueba la cordura de cualquier escritor explotador.

La función de una cadena ROP es simplemente desactivar DEP. Usamos ROP para desactivar DEP (agregando el permiso de ejecución a la página de memoria que contiene la pila) y luego simplemente saltamos a nuestra carga tradicional de código de shell.

En Windows, este suele ser el caso de hacer una llamada al sistema VirtualProtect() , cargada con los parámetros correctos para permitir la ejecución de la pila. Se ha demostrado que solo kernel32.dll contiene los gadgets adecuados para realizar dicha llamada en la mayoría de los casos. Las herramientas para identificar gadgets potencialmente útiles en el código del programa pueden hacer este proceso mucho más fácil. Consulte esta página para obtener un ejemplo detallado del proceso.

Entonces, si una secuencia específica, como POP POP RET está presente, no es tan relevante. En cualquier programa que vincule las bibliotecas principales (lo que todos hacen), habrá gadgets más que suficientes para construir una simple DEP desactivando la cadena ROP. Todo lo que necesita es un poco de pensamiento lateral, es como tratar de construir un rompecabezas cuando cada pieza proviene de una caja diferente.

    
respondido por el lynks 28.02.2013 - 15:03
fuente

Lea otras preguntas en las etiquetas