operating system - solucion - ¿Cuál es la diferencia entre un desbordamiento de pila y un desbordamiento de búfer?
que es desbordamiento (9)
¿Qué hay de diferente entre el desbordamiento de la pila y el desbordamiento del búfer en la Programación?
1. Desbordamiento de búfer basado en pila • Ocurre cuando un programa escribe en una dirección de memoria en la pila de llamadas del programa fuera de la estructura de datos prevista - búfer de longitud fija. • Características de la programación basada en pila 1. "Pila" es un espacio de memoria en el que se asignan las variables automáticas. 2. Los parámetros de función se asignan en la pila y el sistema no los inicializa automáticamente, por lo que tienen basura hasta que se inicializan. 3. Una vez que una función ha completado su ciclo, se elimina la referencia a la variable en la pila. (es decir, si se llama a la función varias veces, sus variables y parámetros locales se vuelven a crear y se destruyen cada vez que se llama y se sale de la función).
• El atacante explota desbordamientos de búfer basados en la pila para manipular el programa de varias maneras sobrescribiendo
1. Una variable local que está cerca del búfer en la memoria en la pila para cambiar el comportamiento del programa que puede beneficiar al atacante.
2. Devuelva la dirección en un marco de pila. Una vez que la función retorna, la ejecución se reanudará en la dirección de retorno especificada por el atacante, generalmente un búfer lleno de entrada de usuario. 3. Un puntero a la función, o manejador de excepciones, que se ejecuta posteriormente. • Factores para superar los exploits son
1. Nulo de bytes en las direcciones 2. Variabilidad en la ubicación del código del shell 3. Diferencias entre el entorno El código de Shell es una pequeña porción de código que se usa para explotar la vulnerabilidad del software.
2. Desbordamiento del búfer de pila
• Ocurre en el área de datos del montón. • El desbordamiento ocurre cuando una aplicación copia más datos en un búfer de lo que el búfer fue diseñado para contener. • Vulnerable a la explotación si copia datos en el búfer sin verificar primero que la fuente encajará en el destino. • Características de la programación basada en pila y en montón: • "Heap" es una "tienda gratuita" que es espacio de memoria, cuando se asignan objetos dinámicos. • El montón es el espacio de memoria asignado dinámicamente a las funciones nuevas (), malloc () y calloc (). • Las variables creadas dinámicamente (es decir, las variables declaradas) se crean en el montón antes de la ejecución y se almacenan en la memoria hasta que se completa el ciclo de vida del objeto. • La explotación se realiza • Corromper los datos para anular las estructuras internas, como los punteros de lista vinculados. • Intercambio de puntero para anular la función del programa
El desbordamiento de búfer generalmente representa cualquier momento en que se accede a un búfer de memoria más allá de sus límites, ya sea en pila o en montón. Un desbordamiento de la pila significa que la pila ha excedido su límite asignado y en la mayoría de las máquinas / SO se está ejecutando sobre el montón.
El desbordamiento de pila se refiere específicamente al caso cuando la pila de ejecución crece más allá de la memoria que está reservada para él. Por ejemplo, si llama a una función que se llama recursivamente sin terminación, causará un desbordamiento de la pila ya que cada llamada de función crea un nuevo marco de pila y la pila eventualmente consumirá más memoria que la reservada para ella.
El desbordamiento de búfer se refiere a cualquier caso en el que un programa escribe más allá del final de la memoria asignada para cualquier búfer (incluso en el montón, no solo en la pila). Por ejemplo, si escribe más allá del final de una matriz asignada desde el montón, ha causado un desbordamiento del búfer.
La diferencia clave es conocer la diferencia entre la pila y un buffer.
La pila es el espacio reservado para que se ejecute el programa en ejecución. Cuando llama a una función, su parámetro y la información de retorno se colocan en la pila.
Un búfer es una porción genérica de memoria que se utiliza con un único propósito. Por ejemplo, una cadena es un buffer. Puede sobrepasarse al escribir más datos en la cadena de los asignados.
Un es cuando el tamaño de la pila para un hilo excede el tamaño de pila máximo permitido para ese hilo.
Un desbordamiento de búfer se produce cuando un valor se escribe en la memoria que no está asignada actualmente por el programa.
Desbordamiento de pila: ha puesto demasiadas cosas en la pila para la memoria asignada al hilo actual
Desbordamiento de búfer: ha excedido el tamaño de su búfer actualmente asignado y no lo ha redimensionado para que se ajuste (o no puede cambiar su tamaño aún más).
¿No quieres decir "¿cuál es la diferencia entre una pila y un buffer?" - eso te llevará a una mayor comprensión más rápidamente. Una vez que has llegado tan lejos, entonces puedes pensar en lo que significa desbordar cada una de estas cosas.
La mayoría de las personas que mencionan desbordamientos de búfer significa sobre-flujos de pila. Sin embargo, los desbordamientos pueden ocurrir en cualquier área no solo limitada a la pila. Tales como el montón o bss. Un desbordamiento de pila se limita a sobrescribir las direcciones de retorno en la pila, pero un desbordamiento normal que no sobrescribe la dirección de retorno probablemente solo sobrescribirá otras variables locales.