Tecnología

Inicio

Los efectos de desbordamiento de memoria intermedia y dar formato a textos sobre el flujo del programa

Incluso los aspectos más modestas de un programa pueden presentar amenazas a la seguridad. la entrada del usuario básico puede causar un cortocircuito código interno de un programa de varias maneras. La entrada puede utilizar el funcionamiento de las funciones de impresión para acceder flujo de control del programa sobreescribiendo los límites de la función. O bien, puede invadir los límites de autonomía ajustado para ello por el programador para afectar a los datos fuera de su espacio designado por el programador. De cualquier manera, la entrada del usuario afecta a cómo se ejecuta el programa, posiblemente hacia fines maliciosos.

cadenas de formato

cadenas de formato en C y C ++ son parte de las funciones de entrada y salida. La cadena de formato contiene datos para enviar datos a la pantalla. Las cadenas de formato tienen dos componentes principales. La primera es la cadena básica para imprimir, que contiene personajes y puntuacion. El segundo componente incluye carácter especial marcado con signos de porcentaje que sirven como marcadores de posición para los datos variables. Estos símbolos existen en la cadena, y son reemplazadas durante la salida de los valores mantenidos en las variables. El siguiente ejemplo ilustra la declaración básica printf con una cadena de formato:

charlas x = "c";
int y = 10;

printf ( "Impresión de Caracteres Decimales% C y% d", x, y);

Ataque de formato de Cuerda

La inseguridad de las cadenas de formato radica en cómo los símbolos incrustados en la secuencia de referencia de otras partes del programa. Por ejemplo, un atacante introducir datos en una variable utilizada en una cadena de formato puede inyectar símbolos que le permiten acceder a otros marcos de ejecución en el programa. De este modo, el atacante puede modificar los valores de las variables fuera del alcance de la función de impresión. Por otra parte, el atacante podría posiblemente acceder a los valores de la memoria que representan la ubicación de las funciones. El atacante podría cambiar ese valor para apuntar a una función diferente, cambiando así el flujo de ejecución y el secuestro esencialmente el programa.

Los tampones de entrada

buffers de entrada son espacios de almacenamiento de datos creado por el programador para almacenar los datos introducidos por el usuario. Muy a menudo, los buffers de entrada manejan la entrada del usuario de registro de nombres y contraseñas. Específicamente para el lenguaje de programación C, que no incluye manejo de cadenas nativo, existen buffers de entrada como matrices de caracteres con un tamaño fijo. En este caso, es de hasta el programador para asignar los datos de entrada del usuario.

Desbordamiento de búfer

Un atacante podría aprovechar las limitaciones de estos tampones inundándolo con datos. En el ejemplo más simple, una matriz de caracteres pensada para alojar un registro de nombre podría tener 20 espacio asignado, pero un atacante le da más de veinte caracteres para procesar. En este caso, los caracteres adicionales sobrescriben las posiciones de memoria inmediatamente después de la matriz. Estas posiciones de memoria, posiblemente contienen datos relevantes para la ejecución del programa, como las variables condicionales para sentencias de control de flujo o referencias a funciones en la pila. Al igual que el ataque de cadena de formato, esto permite esencialmente el atacante secuestrar el programa.