Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¿Qué es el "desbordamiento del búfer" en las computadoras?

¿Qué es el "desbordamiento del búfer" en las computadoras?

¿Qué es un desbordamiento de búfer?

En pocas palabras, un desbordamiento de búfer es un error en el que un programa no puede detectar eficazmente los datos de entrada que recibe, lo que provoca que el programa se bloquee o ejecute los comandos del atacante. Consulte la sección "Exploits" de unsecret.org para obtener más información.

El concepto de desbordamiento del búfer

El desbordamiento del búfer es como poner diez libras de azúcar en un recipiente que sólo puede contener cinco libras de azúcar... .

Los ataques de desbordamiento de pila (también conocidos como desbordamiento de búfer) son una de las técnicas de hacking más utilizadas. Es bien sabido que el propio UNIX y muchas de sus aplicaciones están escritas en lenguaje C, que no comprueba los límites del búfer. En algunos casos, si el usuario ingresa datos que son más largos que el búfer proporcionado por la aplicación, sobrescribe el resto del área de datos. Esto se denomina "desbordamiento de pila o desbordamiento de búfer".

En términos generales, sobrescribir datos en otras áreas de datos no tiene sentido y, en el mejor de los casos, provocará errores en la aplicación. Sin embargo, si los datos de entrada son elaborados por un "hacker" y los datos que sobrescriben la pila resultan ser el código del programa de intrusión del hacker, entonces el hacker obtendrá el control del programa. Si el programa se ejecuta con privilegios de root, el hacker obtendrá privilegios de root y luego podrá compilar el programa del hacker, dejar una puerta trasera de intrusión, etc., y llevar a cabo más ataques. Los ataques de piratería basados ​​en este principio se denominan "ataques de desbordamiento de pila".

Para facilitar la comprensión, también podríamos hacer una analogía. Un desbordamiento del buffer es como poner diez libras de azúcar en un recipiente que sólo puede contener cinco libras de azúcar. Una vez que el recipiente esté lleno, el azúcar restante se derramará sobre la encimera y el piso, provocando un desastre. Debido a que los escritores de programas de computadora escribieron código que no comprobó adecuadamente las áreas objetivo o buffers (los contenedores de cinco libras) para ver si eran lo suficientemente grandes como para contener completamente el nuevo contenido (diez libras de azúcar, por lo que se produjo un desbordamiento del buffer). es posible. Si los datos que se pretenden colocar en un lugar nuevo no se pueden acomodar y se desbordan por todas partes, los datos también causarán muchos problemas. Sin embargo, esto sólo es un problema si se trata simplemente de un desbordamiento del búfer. Hasta ahora, no es disruptivo. Cuando el azúcar se desborda, el contador se sobrescribe. El azúcar se puede limpiar o aspirar para restaurar el mostrador a su apariencia original. Por el contrario, cuando un búfer se desborda, la información adicional sobrescribe el contenido anterior de la memoria de la computadora. A menos que estos contenidos sobrescritos se guarden o restauren, se perderán para siempre.

Entre la información perdida se encuentra información sobre la lista de subrutinas que el programa podría llamar antes de que el búfer se desbordara. Además, se pierde la información proporcionada a estas subrutinas (es decir, los parámetros). Esto significa que el programa no puede obtener suficiente información de la subrutina para completar su tarea. Es como caminar solo en el desierto. Si confiaba en las huellas para caminar de regreso, cuando llegara una tormenta de arena, las huellas se borrarían y se perdería en el desierto. Este problema es mucho más grave que la pérdida de un programa. El intruso utiliza un código de intrusión cuidadosamente escrito (programa malicioso) para desbordar el búfer y luego le dice al programa que procese el búfer de acuerdo con un método predeterminado y ejecute el programa. En este punto, el programa está completamente controlado por el intruso.

Los intrusos suelen adaptar aplicaciones existentes para ejecutar diferentes programas. Por ejemplo, un intruso podría iniciar un nuevo programa que envíe documentos secretos (registros de chequera, archivos de contraseñas o listas de propiedades) al correo electrónico del intruso. Es como si una tormenta de arena no sólo dejara huellas, sino que quienes vinieron detrás de nosotros dejaron nuevas huellas, llevando a nuestro hombre perdido a diferentes lugares de los que él mismo no sabía nada.

Cómo lidiar con los desbordamientos del búfer

Cuantas menos puertas y ventanas tenga en su casa, menos formas tendrán de entrar los intrusos...

Debido a que el desbordamiento del búfer es un problema de programación, solo se puede resolver reparando el código del programa dañado. Si no tiene el código fuente, se puede ver a partir del principio del "ataque de desbordamiento de pila" anterior que para evitar tales ataques, podemos:

1. Verificar cuidadosamente si hay un desbordamiento cuando se produce un desbordamiento de pila. abra el programa y no permita que los datos se desborden del búfer.

Esto es muy difícil debido a la programación y los lenguajes de programación, y no es adecuado para una gran cantidad de programas que ya están en uso;

2. Utilice un compilador que pueda verificar el desbordamiento de la pila o agregue algunos símbolos. al programa para que Al ejecutar el programa, confirme que los desbordamientos causados ​​intencionalmente por piratas informáticos están prohibidos.

3. La mejor manera es consultar con frecuencia los sitios web del sistema operativo y los proveedores de aplicaciones, y una vez que encuentre los parches que proporcionan, descargarlos y aplicarlos al sistema inmediatamente. Sin embargo, los administradores del sistema siempre van un paso por detrás de los atacantes y, si el software en cuestión es opcional o incluso temporal, deben eliminarlo del sistema. Como otro ejemplo, cuantas menos puertas y ventanas tenga una casa, menos formas tendrán los intrusos de entrar.

ype="text/javascript" src="../css/tongji.js">