494 lines
		
	
	
	
		
			25 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			494 lines
		
	
	
	
		
			25 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN" [
 | |
| <!ENTITY base CDATA "..">
 | |
| <!ENTITY date "$Date: 1999-02-16 14:19:33 $">
 | |
| <!ENTITY title "Información de Seguridad en FreeBSD">
 | |
| <!ENTITY % includes SYSTEM "../includes.sgml"> %includes;
 | |
| ]>
 | |
| <!-- $Id: security.sgml,v 1.2 1999-02-16 14:19:33 jesusr Exp $ -->
 | |
| 
 | |
| <html>
 | |
|     &header;
 | |
| 
 | |
| <H2>Introducción</H2>
 | |
| 
 | |
| <P>El objetivo de esta página es orientar a los usuarios, tanto noveles
 | |
| como experimentados, en el área de seguridad del Sistema Operativo
 | |
| FreeBSD. El equipo de Desarrollo de FreeBSD se toma la seguridad muy en
 | |
| serio y trabaja constantemente para hacer el Sistema Operativo tan
 | |
| seguro como sea posible.</P>
 | |
| 
 | |
| <P>Aquí podrás encontrar información adicional, o enlaces 
 | |
| a información, acerca de cómo proteger tu sistema contra varios 
 | |
| tipos de ataque del exterior, con quién contactar si encuentra un error 
 | |
| de software relacionado con la seguridad, etc. También hay una 
 | |
| sección que trata de las distintas formas en que el programador de 
 | |
| sistemas puede concienciarse acerca de la seguridad, de modo que sea menos 
 | |
| probable la introducción de defectos de seguridad en el software.</P>
 | |
| 
 | |
| <H2>Contenidos</H2>
 | |
| <UL>
 | |
| <LI><A HREF="#sec">Información acerca del FreeBSD Security Officer</A></LI>
 | |
| <LI><A HREF="#adv">FreeBSD Security Advisories</A></LI>
 | |
| <LI><A HREF="#ml">Información sobre Listas de Distribución sobre seguridad en FreeBSD</A></LI>
 | |
| <LI><A HREF="#tat">Consejos sobre seguridad en FreeBSD</A></LI>
 | |
| <LI><A HREF="#spg">Pautas para la programación segura</A></LI>
 | |
| <LI><A HREF="#misc">Otra información relacionada con la seguridad</A></LI>
 | |
| </UL>
 | |
| 
 | |
| <A NAME=sec></A>
 | |
| <H2>El FreeBSD Security Officer</H2>
 | |
| 
 | |
| <P>Con el objetivo de coordinar mejor el intercambio de información con
 | |
| otras personas o entidades relacionadas con el ámbito de la seguridad,
 | |
| FreeBSD tiene un punto focal para las comunicaciones relacionadas con la
 | |
| seguridad: el FreeBSD <a href="mailto:security-officer@freebsd.org">security officer</a>.
 | |
| El puesto está actualmente ocupado por un equipo de security officers
 | |
| dedicados, siendo sus tareas principales emitir advisories cuando hay
 | |
| defectos de seguridad conocidos y actuar ante los informes de posibles
 | |
| problemas de seguridad con FreeBSD.</P>
 | |
| 
 | |
| <P>Si necesitas contactar con alguien del equipo de FreeBSD acerca
 | |
| de un posible error de software relacionado con la seguridad por favor
 | |
| hazlo por <A HREF="mailto:security-officer@FreeBSD.org"> correo al
 | |
| Security Officer</A>, incluyendo una descripción de lo que has encontrado
 | |
| y el tipo de vulnerabilidad que representa. El Security Officer también
 | |
| está en contacto con los diferentes equipos <A HREF="http://www.cert.org">
 | |
| CERT </A>y <A HREF="http://www.first.org/"> FIRST</A> en todo el mundo,
 | |
| con los que comparte información acerca de posibles vulnerabilidades en
 | |
| FreeBSD o programas de utilidad usados por FreeBSD. Los Security Officers
 | |
| también son miembros activos de dichas organizaciones.</P>
 | |
| 
 | |
| <P>Si necesitas contactar con el Security Officer acera de algún
 | |
| asunto especialmente delicado, usa su <A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/public_key.asc">
 | |
| clave PGP</A> para encriptar el mensaje antes de enviarlo.</P>
 | |
| 
 | |
| <A NAME=adv></A>
 | |
| <H2>FreeBSD Security Advisories</H2>
 | |
| 
 | |
| <P>Los FreeBSD Security Officers proporcionan security advisories para las
 | |
| releases de FreeBSD siguientes:</P>
 | |
| 
 | |
| <UL>
 | |
| <LI>	La release oficial de FreeBSD más reciente.
 | |
| <LI>	FreeBSD-current.
 | |
| <LI>	FreeBSD-stable, cuando hay al menos 2 releases basadas en él.
 | |
| <LI>	FreeBSD-stable anterior cuando un "nuevo stable" aun no tiene
 | |
|         2 releases basadas en él.
 | |
| </UL>
 | |
| 
 | |
| En este momento hay disponibles security advisories para:
 | |
| <UL>
 | |
| <LI>	FreeBSD 2.2.7
 | |
| <LI>	FreeBSD 2.2.8
 | |
| <LI>	FreeBSD 3.0
 | |
| <LI>	FreeBSD-current
 | |
| <LI>	FreeBSD-stable
 | |
| </UL>
 | |
| 
 | |
| <P>No hay mantenimiento para releases anteriores a estas. Se recomienda
 | |
| a los usuarios se actualicen a una de las releases arriba mencionadas.
 | |
| </P>
 | |
| 
 | |
| <P>Como todos los esfuerzos de desarrollo, las reparaciones de seguridad
 | |
| se incorporan primero en la rama <A HREF="../../handbook/current.html">FreeBSD-current</A>.
 | |
| Después de un par de días de prueba la reparación se 
 | |
| incorpora en las ramas FreeBSD-stable soportadas y se emite un advisory. </P>
 | |
| 
 | |
| <P>Los advisories se envían a las siguientes listas de 
 | |
| distribución de FreeBSD:
 | |
| <UL>
 | |
| <LI>FreeBSD-security-notifications@freebsd.org
 | |
| <LI>FreeBSD-security@freebsd.org
 | |
| <LI>FreeBSD-announce@freebsd.org
 | |
| </UL>
 | |
| 
 | |
| 
 | |
| <P>Los advisories se firman siempre usando la 
 | |
| <A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/public_key.asc">
 | |
| clave PGP</A> del FreeBSD Security Officer y se archivan, junto con los
 | |
| patches asociados, en nuestro 
 | |
| <A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/index.html">
 | |
| repositorio FTP CERT</A>. En el momento de escribir esto están 
 | |
| disponibles los advisories siguientes:</P>
 | |
| 
 | |
| <UL>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:01.sliplogin.asc">FreeBSD-SA-96:01.sliplogin.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:02.apache.asc">FreeBSD-SA-96:02.apache.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:03.sendmail-suggestion.asc">FreeBSD-SA-96:03.sendmail-suggestion.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:08.syslog.asc">FreeBSD-SA-96:08.syslog.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:09.vfsload.asc">FreeBSD-SA-96:09.vfsload.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:10.mount_union.asc">FreeBSD-SA-96:10.mount_union.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:11.man.asc">FreeBSD-SA-96:11.man.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:12.perl.asc">FreeBSD-SA-96:12.perl.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:13.comsat.asc">FreeBSD-SA-96:13.comsat.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:14.ipfw.asc">FreeBSD-SA-96:14.ipfw.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:15.ppp.asc">FreeBSD-SA-96:15.ppp.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:16.rdist.asc">FreeBSD-SA-96:16.rdist.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:17.rzsz.asc">FreeBSD-SA-96:17.rzsz.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:18.lpr.asc">FreeBSD-SA-96:18.lpr.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:19.modstat.asc">FreeBSD-SA-96:19.modstat.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:20.stack-overflow.asc">FreeBSD-SA-96:20.stack-overflow.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:21.talkd.asc">FreeBSD-SA-96:21.talkd.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:01.setlocale">FreeBSD-SA-97:01.setlocale</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:02.lpd.asc">FreeBSD-SA-97:02.lpd.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:03.sysinstall.asc">FreeBSD-SA-97:03.sysinstall.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:04.procfs.asc">FreeBSD-SA-97:04.procfs.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:05.open.asc">FreeBSD-SA-97:05.open.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:06.f00f.asc">FreeBSD-SA-97:06.f00f.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:01.land.asc">FreeBSD-SA-98:01.land.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:02.mmap.asc">FreeBSD-SA-98:02.mmap.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:03.ttcp.asc">FreeBSD-SA-98:03.ttcp.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:04.mmap.asc">FreeBSD-SA-98:04.mmap.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:05.nfs.asc">FreeBSD-SA-98:05.nfs.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:06.icmp.asc">FreeBSD-SA-98:06.icmp.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:07.rst.asc">FreeBSD-SA-98:07.rst.asc</A></LI>
 | |
| <LI><A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:08.fragment.asc">FreeBSD-SA-98:08.fragment.asc</A></LI>
 | |
| </UL>
 | |
| 
 | |
| <A NAME=ml></A>
 | |
| <H2>Información acerca de las Listas de Distribución sobre 
 | |
| Seguridad en FreeBSD</H2>
 | |
| 
 | |
| <P>Si eres administrador o usuario de uno o más sistemas FreeBSD,
 | |
| quizás quieras suscribirte a alguna de las listas siguientes:</P>
 | |
| 
 | |
| <PRE>
 | |
| freebsd-security                Discusiones relacionadas con la seguridad en general
 | |
| freebsd-security-notifications  Notificaciones sobre seguridad (lista moderada)
 | |
| </PRE>
 | |
| 
 | |
| Envíe un mensaje a <A HREF="mailto:majordomo@freebsd.org">
 | |
| majordomo@FreeBSD.ORG</A> con
 | |
| <PRE>
 | |
|      subscribe <nombre_de_la_lista>  [<dirección_email_opcional>]
 | |
| </PRE>
 | |
| en el cuerpo del mensaje para suscribirse.
 | |
| Por ejemplo:
 | |
| <PRE>
 | |
| % echo "subscribe freebsd-security" | mail majordomo@freebsd.org
 | |
| </PRE>
 | |
| y si quieres desuscribirte de una lista de distribución:
 | |
| <PRE>
 | |
| % echo "unsubscribe freebsd-security" | mail majordomo@freebsd.org
 | |
| </PRE>
 | |
| 
 | |
| <A NAME=spg></A>
 | |
| <H2>Pautas para la Programación Segura</H2>
 | |
| <P><P><UL>
 | |
| <LI>Nunca te fíes de ninguna fuente de entrada, i.e. argumentos en la 
 | |
| línea de comando, variables de entorno, ficheros de 
 | |
| configuración, paquetes TCP/UDP/ICMP entrantes, argumentos de funciones,
 | |
|  etc. Si la longitud o el contenido de los datos recibidos están 
 | |
| sujetos, siquiera mínimamente, al control desde el exterior, el 
 | |
| programa o la función debería tenerlo en cuenta cuando maneja 
 | |
| dichos datos. Podemos considerar los apartados siguientes desde el punto de 
 | |
| vista de la seguridad:
 | |
| 
 | |
| <P></P>
 | |
|   <UL>
 | |
| 
 | |
| <LI>Llamadas a strcpy() y sprintf() para datos de longitud ilimitada. 
 | |
| Usa strncpy() y snprintf() cuando la longitud sea conocida (o implementa
 | |
| algun otro método de control de límites cuando sea desconocida).
 | |
| No uses nunca gets() ni sprintf(), punto.  Si lo haces, te acosarán sin 
 | |
| tregua duendes malvados.<P></P></LI>
 | |
| 
 | |
| <LI>Si tienes que validar los datos de entrada del usuario para evitar que
 | |
| contengan caracteres erróneos de cualquier clase, NO valides la presencia
 | |
| de dichos caracteres erróneos.  Simplemente verifica que la entrada
 | |
| consiste SOLO en los caracteres permitidos.  La idea es: todo lo que no
 | |
| está explícitamente permitido está prohibido.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Lee las páginas del manual para las llamadas strncpy() y strncat().
 | |
| Asegúrate de entender cómo funcionan!!!  Así como 
 | |
| strncpy() puede no añadir un \0 final, strncat() sí lo 
 | |
| añade.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Vigila el abuso de strvis() y getenv(). Con strvis() es fácil cometer
 | |
| un error con la cadena de destino, y getenv() podría devolver cadenas 
 | |
| mucho más largas de lo que el programa espera. Estas dos funciones son, 
 | |
| a menudo, una de las vías principales de ataque contra un programa, 
 | |
| provocando que este sobreescriba la pila o las variables al recibir variables 
 | |
| de entorno con valores no contemplados. Si tu programa lee variables de 
 | |
| entorno, se paranoico. Se muy paranoico!
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Cada vez que uses las llamadas open() o stat() pregúntate: " Y si es
 | |
| un enlace simbólico ?"
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Asegúrate de usar mkstemp() en lugar de mktemp(), tempnam(), 
 | |
| mkdtemp() y similares.  Asegúrate también de buscar problemas 
 | |
| de acceso concurrente en general en /tmp, teniendo en cuenta que hay muy pocas
 | |
|  cosas que pueden ser atómicas en /tmp:
 | |
| 	<UL>
 | |
| 	<LI>Crear un directorio.  O funciona o no funciona.</LI>
 | |
| 	<LI>Abrir un fichero O_CREAT | O_EXECL</LI>
 | |
| 	</UL>
 | |
| Si usas mkstemp la función tratará por tí estos casos 
 | |
| adecuadamente.  De aquí que todos los ficheros temporales 
 | |
| deberían usar mkstemp() para garantizar que no se produzcan problemas 
 | |
| de acceso concurrente y que los permisos son correctos.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Un atacante que consiga que los paquetes vayan a/vengan de un
 | |
| sistema arbitrario tendrá el control completo de los datos que recibimos,
 | |
| por lo tanto <B>NINGUNO</B> de estos datos será de fiar.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Nunca dés por hecho que un fichero de configuración 
 | |
| estará correctamente formateado o que habrá sido generado por 
 | |
| el programa de utilidad apropiado. No confíes en que las entradas del 
 | |
| usuario tales como nombres de terminal o cadenas del lenguaje estarán 
 | |
| libres de '/' o '../../../' si hay la mínima posibilidad de que puedan 
 | |
| ser usadas en un nombre de path. No confíes en <B>NINGUN</B> path 
 | |
| proporcionado por el usuario cuando el programa se ejecuta setuid root.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Busca fallos o puntos débiles en la forma de almacenar los datos.
 | |
| Todos los ficheros temporales deberían tener permisos de la forma
 | |
| 600 para protegerlos de ojos curiosos.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>No te limites a buscar con grep los sospechosos habituales en
 | |
| programas que se ejecutan con privilegios elevados. Busca los
 | |
| posibles desbordamientos línea a línea, hay muchísimas 
 | |
| más formas de provocar un desbordamiento de memoria además de 
 | |
| mediante el abuso de strcpy() y sus amigos.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>El simple hecho de restringir privilegios en algún punto no
 | |
| significa que no haya manera de explotar el recurso en cuestión.
 | |
| El atacante podría colocar el código necesario en la pila para
 | |
| recuperar los privilegios antes de ejecutar /bin/sh.</LI></UL>
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Administra los uid. Elimina privilegios tan pronto como sea posible,
 | |
| y elimínalos de verdad.  Cambiar entre euid y uid NO es suficiente. Usa
 | |
| setuid() siempre que puedas.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Nunca muestres el contenido de ficheros de configuración cuando 
 | |
| ocurra un error. Un número de línea y quizás un contador 
 | |
| de posición es suficiente.
 | |
| Esto mismo es igualmente cierto para todas las librerías y todos los 
 | |
| programas suid/gid.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Consejos para quienes revisen código existente debido a problemas de
 | |
| seguridad:<P></P><UL>
 | |
| 
 | |
| <LI>Si no estás seguro de tus reparaciones de seguridad, envíalas
 | |
|  para ser revisadas a alguien con quien así lo hayas acordado 
 | |
| previamente. No entregues código del que no estás seguro, llegar 
 | |
| a estropear algo en nombre de las reparaciones de seguridad resulta bastante 
 | |
| embarazoso.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Aquellos con privilegios de entrega ("commit") para CVS deberían
 | |
| asegurarse de que alguien con dichos privilegios esté entre los 
 | |
| últimos en revisar los cambios. Dicha persona revisará e 
 | |
| incorporará la versión final que se desea tener en el 
 | |
| árbol.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Cuando distribuyas cambios para ser revisados usa siempre diffs con
 | |
| formato context o unidiff. De este modo los diffs pueden ser fácilmente
 | |
| proporcionados como entrada a patch(1). No te limites a enviar los ficheros
 | |
| enteros. Los diffs son más fáciles de leer y aplicar al 
 | |
| código fuente local (especialmente a aquel en el que podrían 
 | |
| tener lugar múltiples cambios simultáneamente). Todos los cambios
 | |
|  deberían referirse a la rama de desarrollo -current.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Prueba tu mismo todos los cambios (i.e. compila y ejecuta el
 | |
| código fuente afectado) antes de enviarlos a otra persona para que los
 | |
| revise. A nadie le gusta que le envíen material averiado para revisar,
 | |
| y además produce la impresión de que el remitente ni siquiera se 
 | |
| fijó en lo que estaba haciendo (lo que no contribuye precisamente a dar 
 | |
| una sensación de confianza). Si necesita una cuenta en una 
 | |
| máquina donde hay una versión específica que no tienes a 
 | |
| mano, simplemente pregunta. El proyecto tiene recursos asignados para ese 
 | |
| propósito en concreto.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Nota para los responsables de la entrega de código ("commit"): no
 | |
| se debe olvidar incorporar a la rama -stable los patches hechos sobre
 | |
| -current, de la forma que sea adecuada.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>No reescribas código innecesariamente para acomodarlo a tu estilo/
 | |
| gustos. Esto sólo hace el trabajo de quienes lo revisan más 
 | |
| difícil.
 | |
| Hazlo sólo si hay razones claras para ello.</LI></UL
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Busca programas que hagan cosas complicadas con los gestores de
 | |
| señales. Muchas rutinas en varias bibliotecas no son lo suficientemente
 | |
| reentrantes como para hacerlo con seguridad.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Presta especial atención al uso de realloc(). Lo habitual es no
 | |
| usar la función correctamente.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Cuando uses áreas de memoria de longitud fija use sizeof() para 
 | |
| evitar pérdidas cuando se cambia el tamaño del área pero 
 | |
| no el código que la usa. Por ejemplo:
 | |
| <LISTING>       
 | |
|         char buf[1024];
 | |
|         struct foo { ... };
 | |
|         ...
 | |
| MAL:
 | |
|         xxx(buf, 1024)
 | |
|         xxx(yyy, sizeof(struct foo))
 | |
| BIEN:
 | |
|         xxx(buf, sizeof(buf))
 | |
|         xxx(yyy, sizeof(yyy))
 | |
| </LISTING>
 | |
| Ten cuidado al aplicar sizeof a un puntero cuando lo que quieres es
 | |
| el tamaño del objeto referenciado!
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Siempre que veas "char foo[###]", comprueba cada uso de foo para
 | |
| asegurarte de que no se desbordará. Si no puedes evitar el desbordamiento
 | |
| (se han dado casos), usa malloc como mal menor para ubicar el área de
 | |
| memoria, de este modo evitarás sobreescribir la pila.
 | |
| <P></P></LI>
 | |
| 
 | |
| <LI>Cierra siempre los descriptores de ficheros tan pronto como puedas, lo
 | |
| que hará más probable que los contenidos del área de 
 | |
| memoria de entrada de stdio() sean desechados. En rutinas de biblioteca, 
 | |
| dispon siempre los descriptores de ficheros que abras de modo que se cierren 
 | |
| tras lanzar con éxito otro proceso.
 | |
| <P><P></LI>
 | |
| </UL>
 | |
| 
 | |
| <A NAME=tat></A>
 | |
| <H2>Consejos sobre seguridad en FreeBSD</H2>
 | |
| <P>Se deben ejecutar varios pasos para hacer seguro un sistema FreeBSD
 | |
| (para el caso, cualquier sistema Unix):
 | |
| <UL>
 | |
| 
 | |
| <LI>Inhabilitar todo software potencialmente peligroso<BR><P></P>
 | |
| Gran cantidad de software debe ser ejecutado con un usuario privilegiado
 | |
| especial para poder hacer uso de recursos específicos, haciendo el
 | |
| ejecutable set-uid. Un ejemplo es el software UUCP o PPP, que hacen uso
 | |
| del puerto serie, o sendmail, que tiene que escribir en el spool de correo
 | |
| y conectar con un puerto de red privilegiado. Si no usas UUCP de poco
 | |
| sirve tener en su sistema el software asociado; sería prudente 
 | |
| inhabilitarlo.
 | |
| Desde luego, esto requiere saber a ciencia cierta lo que puede ser eliminado
 | |
| y lo que no, así como tener claro si se va a necesitar o no dicha
 | |
| funcionalidad en el futuro.<BR><P></P>
 | |
| Lo mismo se puede decir de aquellos programas de utilidad que no consideres
 | |
| lo bastante útiles y que supongan un posible riesgo para la seguridad, 
 | |
| como swapinfo. Si elminas el bit set-uid del ejecutable (por medio del
 | |
| comando "chmod ug-s nombre-de-fichero") siempre habrá la posibildad de
 | |
| que el usuario root pueda usar swapinfo. Sin embargo no es una buena idea
 | |
| elminar tantos sbits que se haga necesario ser root contínuamente.<BR><P></P>
 | |
| No sólo elimines programas que no uses, elimina también servicios
 | |
|  que no quieras o necesites suministrar. Esto se puede hacer editando los 
 | |
| ficheros <TT>/etc/inetd.conf</TT> y <TT>/etc/rc.conf</TT> e inhabilitando los
 | |
| servicios que no quieras usar.<P></P>
 | |
| 
 | |
| <LI>Reparar el software con errores que afecten a la seguridad (o cómo
 | |
| mantenerse un paso por delante de los crackers)
 | |
| <BR><P></P>
 | |
| Asegúrate de suscribirte a las diferentes <A HREF="#ml">Listas de
 | |
| ditribución sobre seguridad en FreeBSD</A> para obtener actualizaciones
 | |
| relacionadas con los errores que afectan a la seguridad y reparaciones.
 | |
| Aplica las reparaciones inmediatamente.<P></P>
 | |
| 
 | |
| <LI>Copias de seguridad. Repare su sistema si una violación de la seguridad
 | |
| llegara a ocurrir<BR><P></P>
 | |
| Disponga siempre de copias de seguridad y de una versión limpia del sistema
 | |
| operativo (por ejemplo en CD-Rom). Asegúrese de que sus copias de seguridad
 | |
| no contienen datos alterados o modificados por el atacante.<P></P>
 | |
| 
 | |
| <LI>Instala software pare vigilar el estado del sistema<BR><P></P>
 | |
| Programas como tcp wrappers y tripwire (ambos en packages/ports) pueden
 | |
| ayudarte a monitorizar la actividad en tu sistema. Esto hace más 
 | |
| fácil la detección de irrupciones. Lee también la salida 
 | |
| de los scripts de /etc/security, que se ejecutan diariamente y se envían
 | |
|  por correo a la cuenta root.<P></P>
 | |
| 
 | |
| <LI>Educa a la gente que trabaja en el sistema<BR><P></P>
 | |
| Los usuarios deberían ser conscientes de lo que hacen. Deberías
 | |
| indicarles que nunca revelen su password a nadie y que usen passwords 
 | |
| difíciles de adivinar. Hazles entender que la seguridad del 
 | |
| sistema/de la red está parcialmente en sus manos.<P></P>
 | |
| </UL>
 | |
| 
 | |
| 
 | |
| <P>También hay un documento PASO a PASO ("HowTo") sobre seguridad en
 | |
| FreeBSD disponible que proporciona algunos consejos avanzados acerca de
 | |
| cómo mejorar la seguridad de su sistema.  Puede ser consultado en 
 | |
| <A HREF="http://www.freebsd.org/~jkb/howto.html">
 | |
| http://www.freebsd.org/~jkb/howto.html</A>.</P>
 | |
| 
 | |
| <p>La seguridad es un proceso contínuo.  Asegúrate de estar al 
 | |
| día con los avances en el campo de la seguridad.</P>
 | |
| 
 | |
| <A NAME=misc></A>
 | |
| <H2>Qué hacer si detectas que la seguridad ha sido comprometida</H2>
 | |
| 
 | |
| <UL>
 | |
| <LI><B>Determina el alcance de la violación de seguridad</B><BR>
 | |
|  Qué privilegios consiguió el atacante ?   Consiguió 
 | |
| acceso de root ?
 | |
|  Consiguió acceso sólo en el nivel de usuario ?</LI>
 | |
| 
 | |
| <LI><B>Determina si se ha alterado el estado del sistema (ámbito del
 | |
| kernel o de usuario)</B><BR>
 | |
|  Qué software ha sido alterado? Se instaló un nuevo kernel ?
 | |
| Ha sido modificado alguno de los archivos binarios del sistema (tales como
 | |
| telnetd, login, etc.) ?   Si sospechas que un atacante puede haber
 | |
| causado cualquier alteración en un sistema operativo, podrías 
 | |
| considerar conveniente reinstalar el sistema operativo desde un medio seguro.</LI>
 | |
| 
 | |
| <LI><B>Averigua cómo se logró la irrupción</B><BR>
 | |
|  Ocurrió por medio de un error de seguridad bien conocido ?   Si este es
 | |
| el caso, asegúrate de instalar los patches correctos. Tuvo éxito 
 | |
| la irrupción debido a una mala configuración ?  Fue el resultado 
 | |
| de un error desconocido hasta el momento ?   Si sospechas que la 
 | |
| irrupción ocurrió por medio de un error nuevo, deberías 
 | |
| advertir al <A HREF="mailto:security-officer@freebsd.org"> FreeBSD Security
 | |
| Officer</A>.</LI>
 | |
| 
 | |
| <LI><B>Repara el defecto de seguridad</B><BR>
 | |
| Instala nuevo software o aplica patches al antiguo para reparar los
 | |
| problemas.  Inhabilita las cuentas que ya han sido comprometidas.</LI>
 | |
| 
 | |
| <LI><B>Otros recursos</B><BR>
 | |
| <A HREF="http://www.cert.org">CERT</A> también ofrece 
 | |
| <A HREF="http://www.cert.org/nav/recovering.html">información detallada</A>
 | |
| acerca de qué pasos seguir en caso de que un sistema se vea comprometido.
 | |
| </LI>
 | |
| </UL>
 | |
| 
 | |
| <H2>Otra Información Relacionada Con La Seguridad</H2>
 | |
| <UL>
 | |
| <LI><A href="http://www.cs.purdue.edu/coast/archive/index.html">El archivo
 | |
| COAST</A> contiene una vasta colección de materiales relacionados con la
 | |
| securidad.</LI>
 | |
| 
 | |
| <LI><A href="http://www.cs.purdue.edu/coast/hotlist/">La COAST Security
 | |
| Hotlist</A> es el lugar donde empezar a buscar materiales relacionados con
 | |
| la seguridad. Contiene cientos de enlaces útiles.  Todo lo que siempre
 | |
| quiso saber sobre seguridad ...  y más.</LI>
 | |
| 
 | |
| <LI>Los diferentes equipos CERT tales como <A href="http://www.cert.org">
 | |
| http://www.cert.org</A> y <A href="http://www.auscert.org.au">
 | |
| http://www.auscert.org.au</A>.</LI>
 | |
| 
 | |
| <LI>Listas de distribución como <A HREF="http://www.geek-girl.com/bugtraq/">
 | |
| Bugtraq</A> y <A HREF="http://www.nfr.net/forum/firewall-wizards.html">
 | |
| Firewall Wizards</A>.</LI>
 | |
| </UL>
 | |
| 
 | |
| 	&footer
 | |
|     </body>
 | |
| </html>
 |