¿Por qué los programas legítimos tienen una instrucción 'jmp esp'?

7

Parece que un truco de explotación común es usar el desbordamiento de pila para sobrescribir el puntero de la instrucción de modo que apunte a una instrucción jmp esp en algún lugar del segmento de código que luego ejecuta el código arbitrario de la elección del atacante.

Sin embargo, me cuesta entender qué es lo que usan los programas legítimos (que, en mi opinión, generalmente no son auto-modificables y tienen todo su código ejecutable almacenado en el segmento de código) que tendrían al incluir dichas instrucciones jmp esp en el primer lugar.

    
pregunta 1110101001 28.03.2018 - 12:14
fuente

1 respuesta

6

La instrucción jmp esp se codifica como FF E4 . No es necesario encontrar una instrucción jmp real, solo esos bytes en medio de cualquier otro código o datos.

Esta es la base para la programación orientada al retorno (ROP) y estas pequeñas secuencias de instrucciones útiles a menudo se denominan "gadgets ROP".

Tenga en cuenta que esta técnica en particular se rompe fácilmente con una pila no ejecutable. Requerir una pila ejecutable es bastante raro (fuera de casos específicos como un compilador JIT), por lo que esta es una mitigación simple y efectiva. Para solucionar esto, existen técnicas como el retorno a libc que encadena a varios de estos pequeños gadgets ROP para construir una secuencia más larga de instrucciones.

    
respondido por el David 30.03.2018 - 00:46
fuente

Lea otras preguntas en las etiquetas