¿Por qué los valores canarios deben elegirse en tiempo de ejecución en lugar de compilar?

3

Para los ataques de desbordamiento de búfer, la revisión de mi examen dice que hay inconvenientes en la elección de los valores canarios en tiempo de compilación frente a tiempo de ejecución. ¿Por qué sería mejor elegir el valor canario en el tiempo de ejecución?

    
pregunta Jack 08.04.2015 - 21:04
fuente

1 respuesta

1

Un valor canario elegido en tiempo de compilación es constante de una ejecución a otra, en todas las copias del programa. Esto significa que un atacante puede resolverlo analizando el programa; una vez que lo saben, pueden configurar su ataque de desbordamiento para que el desbordamiento sobrescriba el canario con el mismo valor que tenía originalmente, haciendo que el ataque sea indetectable.

Por otra parte, si el valor canario se elige en tiempo de ejecución, un atacante debe adivinarlo en el primer intento. Si adivinan mal, el ataque será detectado; idealmente, esto provocaría que el desarrollador de la aplicación encuentre y solucione el error que permitió el desbordamiento en primer lugar.

Un beneficio menor es que aumenta ligeramente la seguridad contra los ataques de fuerza bruta: por ejemplo, un atacante que intente adivinar un canario estático de 32 bits a través de prueba y error deberá hacer un promedio de 2 mil millones de adivinanzas. donde un canario elegido en tiempo de ejecución tendrá un promedio de alrededor de 3 mil millones de conjeturas porque el canario puede cambiar a un valor que el atacante ya ha intentado.

    
respondido por el Mark 09.04.2015 - 04:24
fuente

Lea otras preguntas en las etiquetas