¿Cómo ayuda ASCII-Armoring a prevenir ataques de desbordamiento de búfer?

10

Estaba leyendo sobre ataques de retorno a libc en Wikipedia .

De acuerdo con lo que leí y entendí del artículo, el armado ASCII significa que los datos binarios se convierten en valores ASCII agrupándolos en fragmentos de 8 bits.

El artículo cita:

  

De hecho, con ASCII-Armoring, todas las bibliotecas del sistema (por ejemplo, libc)   Las direcciones contienen un byte NULO. Sin embargo, este mismo concepto puede ser   usado en un ataque similar y más avanzado conocido como return-to-plt,   donde en lugar de volver a libc, el atacante usa el PLT   funciones cargadas en el binario (por ejemplo, system @ plt, execve @ plt,   sprintf @ plt, strcpy @ plt, etc ...).

¿Alguien puede explicar, por favor, cómo evita exactamente el armado ASCII el desbordamiento del búfer? No obtuve la parte que dice que las direcciones de la biblioteca del sistema contienen un byte NULO. ¿Y cómo return-to-plt previene el desbordamiento del búfer? Busqué, pero no encontré mucha explicación con respecto a los ataques return-to-plt .

    
pregunta Karan 25.05.2013 - 17:02
fuente

2 respuestas

7

Si la dirección se trata como una cadena de caracteres terminada en nulo en algún punto, la inclusión de esta dirección "ASCII-Armored" causaría que las funciones que funcionan con cadenas de caracteres terminadas en nulo, como strcpy, strlen, sprintf, detengan el procesamiento en el final de la dirección libc.

    
respondido por el Phillip Nordwall 25.05.2013 - 17:24
fuente
1

Muchos desbordamientos de búfer en C son el resultado de leer sin cuidado una cadena en una matriz de tamaño fijo sin verificación de límites.

Las cadenas en C son simplemente matrices de char, con un carácter 0 o NULL al final. Las funciones de cadena de la biblioteca estándar como strcpy simplemente copian los valores de una matriz a otra hasta que se encuentra el carácter NULO.

Al forzar un ataque para que incluya un NULL o 0 bytes como la dirección syscall en la carga útil, las lecturas incorrectas de la cadena se detienen porque piensan que la cadena finalmente ha terminado.

Recuerde que la dirección 0xFFFF00FF es en realidad cuatro bytes (o caracteres), uno de los cuales es 0x00.

Al diseñar una carga útil de ataque de desbordamiento de búfer con el código de bytes de la máquina, los hackers a menudo deben ser inteligentes para evitar tener 0 bytes.

    
respondido por el trognanders 26.02.2017 - 23:34
fuente

Lea otras preguntas en las etiquetas