por
pobrecito hablador
el Jueves, 16 Septiembre de 2004, 17:44h
(#356142)
"Esas operaciones no son tarea del SO ni de la MMU. Si lo fueran, difícilmente íbamos a ver cosas como buffer overflows y similares."
Esas operaciones si son tarea del sistema operativo, la memoria, es un recurso, que el SO tiene que gestionar y repartir. Si delegamos en un programa la comprobación de si viola o no el reparto que le corresponde de ese recurso estamos abriendo un agujero de seguridad en el que un proceso malintencionado obvie deliberadamente las restricciones a las que este sujeto. Cuando se produce un desbordamiento de pila el SO actua correctamente impidiendo el acceso a recursos que no estan al alcance del proceso. Es una lastima que se pueda mezclar en una zona de datos "variables" y "constantes" con direcciones de retorno de codigo ejecutable, gracias a ello es relativamente facil cambiar el flujo de un programa y forzarlo a hacer algo para lo que no ha sido programado.
"Tanto la comprobación de punteros nulos como la de límites de arrays son medidas que tomaron los diseñadores del lenguaje para ayudar a los desarrolladores a capturar errores, y es algo que solamente se hace una vez, nada de esfuerzos duplicados."
La comprobación de errores puede interesar dentro de la propia aplicación para salir airoso de algunos errores predecibles que puedan ocurrir, que sean interceptables y solucionables. Tomar la decisión de hacer la comprobación sistematicamente con todo, o con solo los puntos mas vulnerables depende de la naturaleza del programa y del uso que se pretenda hacer del mismo.
por
pobrecito hablador
el Jueves, 16 Septiembre de 2004, 21:55h
(#356349)
Permiteme que te explique un poco, desde mis escasos conocimientos, cómo funciona un microprocesador.
Cuando se hace referencia a un puntero nulo, es decir, la posición cero de memoria, la MMU pega un grito.
Y no sólo con la posición cero, con cualquier posición de memoria que no esté dentro del espacio del proceso, como por ejemplo un buffer overflow, la MMU pega otra interrupción hardware que el OS captura para a continuación invocar la señal SIGSEGV del programa, que por defecto volcará el espacio del proceso a un fichero llamado core.
En caso de que por puñetera casualidad el buffer overflow no afecte memoria ajena, programas como valgrind pueden ayudar a detectar estos accesos.
Si tu te montas una máquina virtual, que sobre lo que hace el OS y la MMU además chequea todo acceso a memoria, lo único que consigues es un retardo de narices.
Re:¿Y qué dice del C++?
(Puntos:0)Re:¿Y qué dice del C++?
(Puntos:0)Cuando se hace referencia a un puntero nulo, es decir, la posición cero de memoria, la MMU pega un grito.
Y no sólo con la posición cero, con cualquier posición de memoria que no esté dentro del espacio del proceso, como por ejemplo un buffer overflow, la MMU pega otra interrupción hardware que el OS captura para a continuación invocar la señal SIGSEGV del programa, que por defecto volcará el espacio del proceso a un fichero llamado core.
En caso de que por puñetera casualidad el buffer overflow no afecte memoria ajena, programas como valgrind pueden ayudar a detectar estos accesos.
Si tu te montas una máquina virtual, que sobre lo que hace el OS y la MMU además chequea todo acceso a memoria, lo único que consigues es un retardo de narices.