13.07.2015 Views

SEGURIDAD EN UNIX Y REDES

SEGURIDAD EN UNIX Y REDES

SEGURIDAD EN UNIX Y REDES

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5.3. ERRORES <strong>EN</strong> LOS PROGRAMAS 71comunidad de la seguridad informática. En la mayoría de situaciones no se trata de desconocimientoa la hora de realizar programas seguros, sino del hecho que es prácticamente imposible noequivocarse en miles de líneas de código: simplemente el núcleo de Minix, un mini-Unix diseñadopor Andrew Tanenbaum ([Tan91]) con fines docentes, tiene más de 13000 líneas de código en suversión 1.0.Cuando un error sucede en un programa que se ejecuta en modo usuario el único problema que suelecausar es la inconveniencia para quién lo estaba utilizando. Por ejemplo, imaginemos un acceso noautorizado a memoria por parte de cierta aplicación; el sistema operativo detectará que se intentaviolar la seguridad del sistema y finalizará el programa enviándole la señal sigsegv. Pero si esemismo error sucede en un programa que corre con privilegios de root – por ejemplo, un ejecutablesetuidado –, un atacante puede aprovechar el fallo para ejecutar código malicioso que el programaa priori no debía ejecutar. Y si un error similar se produce en el código del kernel del sistema operativo,las consecuencias son incluso peores: se podría llegar a producir un Kernel Panic o, dichode otra forma, la parada súbita de la máquina en la mayoría de situaciones; el error más grave quese puede generar en Unix.5.3.1 Buffer overflowsSeguramente uno de los errores más comunes, y sin duda el más conocido y utilizado es el stacksmashing o desbordamiento de pila, también conocido por buffer overflow 2 ; aunque el gusano deRobert T. Morris (1988) ya lo utilizaba, no fué hasta 1997 cuando este fallo se hizo realmente populara raíz de [One96]. A pesar de que alguien pueda pensar que en todo el tiempo trascurrido hastahoy en día los problemas de buffer overflow estarán solucionados, o al menos controlados, aún seven con frecuencia alertas sobre programas que se ven afectados por desbordamientos (justamentehoy, 28 de febrero del 2000, han llegado a la lista bugtraq un par de programas que aprovechabanestos errores para aumentar el nivel de privilegio de un usuario en el sistema). Aunque cadavez los programas son más seguros, especialmente los setuidados, es casi seguro que un potencialatacante que acceda a nuestro sistema va a intentar – si no lo ha hecho ya – conseguir privilegiosde administrador a través de un buffer overflow.La idea del stack smashing es sencilla: en algunas implementaciones de C es posible corromperla pila de ejecución de un programa escribiendo más allá de los límites de un array declarado autoen una función; esto puede causar que la dirección de retorno de dicha función sea una direcciónaleatoria. Esto, unido a permisos de los ficheros ejecutables en Unix (principalmente a los bits de SetUIDy SetGID), hace que el sistema operativo pueda otorgar acceso root a usuarios sin privilegios.Por ejemplo, imaginemos una función que trate de copiar con strcpy() un array de 200 caracteresen uno de 20: al ejecutar el programa, se generará una violación de segmento (y por tanto el clásicocore dump al que los usuarios de Unix estamos acostumbrados). Se ha producido una sobreescriturade la dirección de retorno de la función; si logramos que esta sobreescritura no sea aleatoria sinoque apunte a un código concreto (habitualmente el código de un shell), dicho código se va a ejecutar.¿Cuál es el problema? El problema reside en los ficheros setuidados y setgidados; recordemos quecuando alguien los ejecuta, está trabajando con los privilegios de quien los creó, y todo lo que ejecutelo hace con esos privilegios. . . incluido el código que se ha insertado en la dirección de retorno denuestra función problemática. Si como hemos dicho, este código es el de un intérprete de comandosy el fichero pertenece al administrador, el atacante consigue ejecutar un shell con privilegios de root.Existen multitud de exploits (programas que aprovechan un error en otro programa para violarla política de seguridad del sistema) disponibles en Internet, para casi todas las variantes de Unixy que incluyen el código necesario para ejecutar shells sobre cualquier operativo y arquitectura.Para minimizar el impacto que los desbordamientos pueden causar en nuestro sistema es necesaria2 Realmente el stack smashing es un caso particular del buffer overflow, aunque al ser el más habitual se suelenconfundir ambos términos ([C + 98]).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!