¿Cómo funciona un trineo NOP?


No puedo encontrar una buena fuente que responda a esta pregunta. Sé que un trineo nop es una técnica utilizada para eludir la aleatorización de la pila en un ataque de desbordamiento de búfer, pero no puedo entender cómo funciona.

¿Qué es un ejemplo simple que ilustra este método?

¿Qué significan términos como 128-byte nop sled?

Author: halfer, 2013-02-08

2 answers

Algunos ataques consisten en hacer que el programa salte a una dirección específica y continúe ejecutándose desde allí. El código inyectado tiene que ser cargado previamente de alguna manera en esa ubicación exacta.

La aleatorización de pila y otras diferencias de tiempo de ejecución pueden hacer que la dirección donde el programa saltará sea imposible de predecir, por lo que el atacante coloca un trineo NOP en un gran rango de memoria. Si el programa salta a cualquier parte del trineo, ejecutará todos los NOPs restantes, sin hacer nada, y luego ejecutará el código de carga, justo al lado del trineo.

La razón por la que el atacante usa el trineo NOP es para hacer que la dirección de destino sea más grande: el código puede saltar en cualquier parte del trineo, en lugar de exactamente al principio del código inyectado.

Un trineo NOP de 128 bytes es solo un grupo de intrucciones NOP de 128 bytes de ancho.

NOTA # 1: NOP (No-OPeration) es una instrucción disponible en la mayoría (all?) arquitecturas que no hacen nada, aparte de ocupar memoria y algún tiempo de ejecución.

NOTA # 2: en arquitecturas con instrucciones de longitud variable, una instrucción NOP suele tener solo un byte de longitud, por lo que puede usarse como un cómodo relleno de instrucciones. Desafortunadamente, eso también hace que sea fácil hacer un trineo NOP.

 67
Author: rodrigo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-09 05:06:13

Para agregar a la explicación de Rodrigo - Incluso con un trineo NOP, la ubicación aproximada del búfer en la memoria debe predecirse de antemano. Una técnica para aproximar la ubicación de la memoria es utilizar la ubicación de la pila cercana como marco de referencia. Al restar un desplazamiento de esta ubicación, se puede obtener la dirección relativa de cualquier variable.

NOTA AL MARGEN: en la arquitectura x86, la instrucción NOP es equivalente al byte hexadecimal 0x90, por lo tanto, un búfer de exploits completado podría verse algo como esto:

/ NOP sled / Shellcode / Repeated return address /

Viendo como si el registro EIP apuntara a cualquier dirección encontrada en el NOP sled, se incrementaría mientras ejecutaba cada instrucción NOP, una a la vez, hasta que finalmente alcanzara el shellcode

 0
Author: Boschko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-06 15:09:35