9 - Ojo con los "core"


Tutorial creado por Mononeurona.org . Extraido de: http://www.mononeurona.org/index.php?idp=535
08 Noviembre 2005
< anterior | 1 .. 7 8 9 10 11 .. 16 | siguiente >
Todos estamos famirializados con los "core", los ficheros de volcado de memoria que se generan cuando un programa tiene algún error fatal, como intentar acceder a memoria que no le pertenece. Los "core" son muy útiles, ya que con las herramientas adecuadas permiten estudiar la información "post-mortem" del programa y averiguar la causa del problema. Sin embargo no carecen de riesgos, como el hecho de que muchas veces no están sujetos a cuota, por ejemplo.

Uno de los problemas más graves es que, en algunas versiones de Unix, cuando el Kernel genera un "core" sigue los enlaces simbólicos. Ello hace que cualquier usuario pueda destruir el contenido de cualquier fichero del sistema, sin más que localizar un fichero SUID a "root" que genere un "core" bajo determinadas circunstancias (por ejemplo, parámetros de entrada demasiado largos) y creando un enlace simbólico a "/etc/passwd", pongamos por caso. La mayor parte de los sistemas modernos borran primero el enlace, antes de grabar el "core".

El otro problema es que el "core" genera todo un volcado de la memoria del proceso. Eso puede incluir claves, fragmentos del fichero "/etc/shadow" y demás información confidencial. Muchos Unix evitan el problema haciendo que no se genere "core" si los usuarios real y efectivo no coinciden. Lamentablemente, muchos procesos o bien liberan sus privilegios demasiado tarde, o bien no destruyen el contenido de búfferes "antiguos" que puedan contener información no pública.

Se puede limitar el tamaño de los "core", o prohibirlos del todo, usando "ulimit" y "setrlimit()". En todo caso no es permisible que ningún programa en producción genere un core, sobre todo si se trata de un SUID...

Si el Unix utilizado permite que un proceso con usuarios real y efectivo diferentes genere un "core", más vale hacer un "setrlimit()" y capturar todas las señales. Bajo Solaris, por cierto, teneis una función "gcore" muy interesante :-).

Otro detalle a considerar es que el fichero "core" se graba con los modos especificados en "umask()". Las consecuencias se pueden ver en el punto siguiente.
< anterior | 1 .. 7 8 9 10 11 .. 16 | siguiente >

Autor y licencia de '¿Cómo Escribir Programas Seguros?'


Tutorial de Mononeurona.org . Extraido de: http://www.mononeurona.org/index.php?idp=535 CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.